JAVA课程设计拼图游戏源代码.docx
- 文档编号:28545972
- 上传时间:2023-07-18
- 格式:DOCX
- 页数:16
- 大小:18.62KB
JAVA课程设计拼图游戏源代码.docx
《JAVA课程设计拼图游戏源代码.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计拼图游戏源代码.docx(16页珍藏版)》请在冰豆网上搜索。
JAVA课程设计拼图游戏源代码
packagepingtuyoouxi;
importjava.awt.Color;
importjava.awt.Container;
importjava.awt.Font;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.KeyEvent;
importjava.awt.event.KeyListener;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjavax.swing.Icon;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JMenu;
importjavax.swing.JMenuBar;
importjavax.swing.JMenuItem;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
publicclassPtextendsJFrameimplementsKeyListener{
intcurNum,next,sum=0;//当前块编号curNum,目标块编号next,移动步数sum
intu=2,v=0,rcd;
Stringname;
int[]number=newint[9];
JLabelinfor,label2,label3,label4,label44,label5,label6,label7,label8,label9,label10;
JLabel[]label;//定义信息标签
publicPt(){
setTitle("拼图游戏");
setLayout(null);
JMenuBarmenubar=newJMenuBar();
JMenumenu=newJMenu("菜单");
JMenumenu2=newJMenu("帮助");
JMenuItemmenuitem1=newJMenuItem("开始");
JMenuItemmenuitem2=newJMenuItem("重新开始");
JMenuItemmenuitem3=newJMenuItem("退出游戏");
JMenuItemmenuitem4=newJMenuItem("关于");
label3=newJLabel("完整图片:
");
label2=newJLabel(newImageIcon(getClass().getResource("9.jpg")));
label4=newJLabel("益智");
label44=newJLabel("游戏");
label5=newJLabel("冠军榜");
read();//调用读文件函数,读取最佳记录
label6=newJLabel("最少步数:
"+name+""+rcd+"步");
label7=newJLabel(newImageIcon(getClass().getResource("10.jpg")));
label8=newJLabel("参照图");
label9=newJLabel("操作说明");
label10=newJLabel("按键盘上的方向键移动");
infor=newJLabel("步数:
"+sum);
label4.setFont(newFont("Times",Font.HANGING_BASELINE,35));
label44.setFont(newFont("Times",Font.HANGING_BASELINE,35));
label5.setFont(newFont("Times",Font.BOLD,20));
label8.setFont(newFont("Times",Font.BOLD,20));
label9.setFont(newFont("Times",Font.BOLD,20));
infor.setFont(newFont("Times",Font.TYPE1_FONT,18));//设置字体字号
label4.setBackground(Color.blue);
label44.setBackground(Color.blue);
label5.setBackground(Color.yellow);
label9.setBackground(Color.yellow);
infor.setForeground(Color.red);//设置标签前景色即字体颜色
label2.setBounds(210,40,340,340);
label3.setBounds(210,10,200,20);
label4.setBounds(50,30,150,40);
label44.setBounds(50,70,150,40);
label5.setBounds(10,250,150,30);
label6.setBounds(10,280,170,30);
label7.setBounds(580,200,160,160);
label8.setBounds(630,160,100,30);
label9.setBounds(10,160,150,30);
label10.setBounds(10,180,150,30);
infor.setBounds(600,50,160,30);
setJMenuBar(menubar);
menubar.add(menu);
menubar.add(menu2);
menu.add(menuitem1);
menu.add(menuitem2);
menu.add(menuitem3);
menu2.add(menuitem4);
add(label3);
add(label2);
add(label4);add(label44);
add(label5);
add(label6);
add(label7);
add(label8);
add(label9);
add(label10);
add(infor);
//菜单事件
menuitem1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
star();
}
});
menuitem2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
dispose();//关闭当前窗体
Ptpt2=newPt();
pt2.star();
}
});
menuitem3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
System.exit(0);
}
});
menuitem4.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
newAbout();
}
});
setBounds(400,100,800,480);
setVisible(true);
}
publicvoidstar(){
label2.setVisible(false);
label3.setVisible(false);
sum=0;
label=newJLabel[9];//实例化标签数组
int[]num=generRandPerm(9);//随机生成0~8的排列
putLabel(num);//调用加入标签函数
for(inti=0;i<9;i++)//按随机生成的序号给number赋值
number[i]=num[i];
addKeyListener(this);//加入键盘监视器
}
//产生随机数函数
publicint[]generRandPerm(intn){
int[]rnum=newint[n];//存储随机生成0~8的排列
intm,t=1;
while(t%2!
=0){
boolean[]flag=newboolean[n];//标志数组
for(inti=0;i flag[i]=false;//表示num[i]未存入数字 } rnum[2]=2; flag[2]=true; for(inti=0;i if(i==2)continue; m=(int)(Math.floor(n*Math.random()));//发生随机数,介于【0,n-1】 if(flag[m]==false){//还未设置 rnum[i]=m; flag[m]=true;//标志rnum[m]已存数字 } else{ while(flag[m]){//循环直到flag[m]为false m=(int)(Math.floor(n*Math.random()));//发生随机数 } rnum[i]=m;//这个m与已存数字不重复 flag[m]=true; } } t=0; for(inti=0;i for(intj=0;j if(rnum[i] t++; } } } returnrnum;//返回数组 } //加入标签函数 publicvoidputLabel(int[]num){ for(intv=0;v<3;v++){ for(intu=0;u<3;u++){ intk=u+3*v;//计算块编号k//\\pics\\pic["+num[k]+"]. //System.out.println(num[k]); if(k==2){ label[k]=newJLabel(newImageIcon(getClass().getResource("2.png")));//设置图片 } else{ label[k]=newJLabel(newImageIcon(getClass().getResource(num[k]+".jpg")));//设置图片 } label[k].setBounds(210+u*115,40+v*115,110,110);//设置坐标和大小 add(label[k]); } } } //按方向键动作响应函数 publicvoidkeyPressed(KeyEvente){ intkeyCode=e.getKeyCode();//获取虚拟键值 curNum=u+3*v;//计算当前坐标值 if(keyCode==KeyEvent.VK_UP){//按向上方向键 if(v<2)move(0,1);//限制条件,调用函数 } elseif(keyCode==KeyEvent.VK_DOWN){ if(v>0)move(0,-1); } elseif(keyCode==KeyEvent.VK_LEFT){ if(u<2)move(1,0); } elseif(keyCode==KeyEvent.VK_RIGHT){ if(u>0)move(-1,0); } infor.setText("步数: "+sum); tf();//调用判断是否成功函数 } //移动函数 publicvoidmove(intdu,intdv){ inttem; next=(u+du)+3*(v+dv);//计算移动目标块编号 label[curNum].setIcon(label[next].getIcon());//获取目标块的数字,并将其设置为当前块的数字 label[next].setIcon(newImageIcon(getClass().getResource("2.png"))); tem=number[curNum];number[curNum]=number[next];number[next]=tem;//交换两个标签的值 if(du==0){ if(dv==1)v=v+1; elseif(dv==-1)v=v-1; } elseif(dv==0){ if(du==1)u=u+1; elseif(du==-1)u=u-1; } sum=sum+1; } //判断是否拼图成功 publicvoidtf(){ inti=0; for(i=0;i<9;i++){ if(number[i]! =i) break; } if(i==9){ read();//调用读文件函数 Succedss=newSucced();//弹出Succed窗口 ss.ttt(sum,rcd);//调用函数 ss.setVisible(true); } } //读取文件数据 publicvoidread(){ Filefile=newFile("D: ","ab.txt"); FileInputStreamin=null; try{ in=newFileInputStream(file);//创建FileInputStream类对象 byte[]content=newbyte[1024];//创建byte数组 intlength=in.read(content);//从文件中读取信息 Stringstr=newString(newString(content,0,length)); intn=str.indexOf("");//获取第一个空格的索引位置 name=newString(newString(content,0,n));//文件中的名字 Stringstep=newString(newString(content,n+1,length-n-1)); rcd=Integer.parseInt(step);//文件中的数字 }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace();//输出异常信息 }finally{ if(in! =null){ try{ in.close();//关闭流 }catch(IOExceptione){ e.printStackTrace(); } } } } //main函数 publicstaticvoidmain(Stringargs[]){ newPt(); } @Override publicvoidkeyTyped(KeyEvente){ //TODO自动生成的方法存根 } @Override publicvoidkeyReleased(KeyEvente){ //TODO自动生成的方法存根 } } //帮助窗口 classAboutextendsJFrame{ publicAbout(){ setTitle("关于"); setLayout(null); JTextAreajt=newJTextArea("按键盘上的上下左右方向键来移动空白块周围的图片," +"当所有小图片都回到原位的时候即拼图成功,此时将弹出一个Succed窗口,若所用" +"步数少于最高记录,则会同时弹出一个新纪录的窗口,记录新纪录。 ",10,10);//创建文本区,关于游戏的介绍 jt.setBounds(1,10,390,210); jt.setFont(newFont("Times",Font.BOLD,18)); jt.setLineWrap(true);//可以自动换行 add(jt); setBounds(400,250,400,240); setVisible(true); } } //拼图成功窗口 classSuccedextendsJFrame{ publicSucced(){ setTitle("Succed"); setLayout(null); Fontfont=newFont("Times",Font.BOLD,20); JLabellbe=newJLabel("Succed! "); JLabellbe2=newJLabel("再玩一次? "); JButtonbtn=newJButton("Yes"); JButtonbtn2=newJButton("No"); lbe.setFont(font); lbe2.setFont(font); lbe.setBounds(60,20,100,35); lbe2.setBounds(60,60,150,35); btn.setBounds(60,100,60,30); btn2.setBounds(130,100,60,30); add(lbe); add(lbe2); add(btn); add(btn2); btn.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ dispose(); Ptpt2=newPt();//System.exit(0); pt2.star(); } }); btn2.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ System.exit(0); } }); setBounds(500,300,300,200); setVisible(true); } publicvoidttt(intsum,intrecod){ if(sum Recordrr=newRecord(); rr.record(sum); } } } //新记录类 classRecordextendsJFrame{ publicRecord(){ setTitle("Record"); setLayout(null); setBounds(500,300,300,250); setVisible(true); } publicvoidrecord(intsum){ Fontfont=newFont("Times",Font.BOLD,20); JLabeljb=newJLabel("恭喜您打破了最高记录! "); JLabeljb2=newJLabel("请输入您的姓名: "); JTextFieldjt=newJTextField(50); JButtonbtn3=newJButton("保存"); jb.setFont(font); jb.setBounds(25,30,300,30); jb2.setBounds(80,70,200,30); jt.setBounds(80,110,100,30); btn3.setBounds(100,150,60,30); add(jb); add(jb2); add(jt); add(btn3); btn3.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ Stringname=jt.getText().toString(); if(! name.equals("")){ writer(name,sum); dispose(); } } }); } //将数据写入文件 publicvoidwriter(Stringname,intsum){ Filefile=newFile("D: ","ab.txt"); FileOutputStreamout=null; try{ out=newFileOutputStream(file);//创建对象 out.write((name+""+String.valueOf(sum)).getBytes());
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- JAVA 课程设计 拼图游戏 源代码