您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > java拼图游戏代码(完整版)
Pintu.java(class)importjava.awt.Color;importjava.awt.FileDialog;importjava.awt.Graphics;importjava.awt.Image;importjava.awt.Rectangle;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JMenu;importjavax.swing.JMenuBar;importjavax.swing.JMenuItem;importjavax.swing.JOptionPane;importjavax.swing.JRadioButtonMenuItem;publicclassPintuextendsJFrameimplementsActionListener{JMenuBarmenubar=newJMenuBar();//菜单条JMenumenu1=newJMenu(操作);//菜单JMenumenu2=newJMenu(设置);JMenumenu3=newJMenu(帮助);//菜单选项JMenuItemjitem1=newJMenuItem(开始游戏);JMenuItemjitem2=newJMenuItem(退出游戏);JMenuItemjitem3=newJMenuItem(游戏图片);JMenujitem4=newJMenu(难度设置);JMenuItemjitem5=newJMenuItem(关于我们);JRadioButtonMenuItemnandu1=newJRadioButtonMenuItem(3*3);//单选菜单JRadioButtonMenuItemnandu2=newJRadioButtonMenuItem(4*4);Stringfilename=a.jpg;//默认图片路径ImageIconpreimage=null;//预览图对象JButtonprebtn=null;//预览图片放置控件intm=3,n=3;//默认设置为3*3的阵列intw=80,h=80;//默认小方格的高度与宽度intstep=0;//拼图步数JLabellstep=newJLabel(步数:0步);JLabelisover=newJLabel(状态:未开始);ImageIcon[]pic=null;//存放小方格图片JButtonbtn[][]=null;//小方格控件Rectanglep[][]=null;//小方格的位置与大小publicvoidinit(){this.setTitle(拼图游戏);this.setLayout(null);this.setBounds(400,100,300,480);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);isover.setBounds(100,50,100,30);lstep.setBounds(100,10,100,30);this.add(isover);this.add(lstep);//菜单显示this.setJMenuBar(menubar);menubar.add(menu1);menubar.add(menu2);menubar.add(menu3);menu1.add(jitem1);menu1.add(jitem2);menu2.add(jitem3);menu2.add(jitem4);menu3.add(jitem5);jitem4.add(nandu1);jitem4.add(nandu2);nandu1.setSelected(true);//设置单选默认值为3*3jitem2.addActionListener(this);//注册监听事件jitem3.addActionListener(this);//注册监听事件nandu1.addActionListener(this);//注册监听事件nandu2.addActionListener(this);//注册监听事件jitem1.addActionListener(this);//注册监听事件jitem5.addActionListener(this);//注册监听事件this.setVisible(true);this.setResizable(false);//不能更改窗体大小setpic();//图片分割必须放置窗体显示以后}//判断我们的图片是否拼图完整如果完成返回true未完成返回falsepublicbooleancheck(){booleanb=true;for(inti=n;i(m+1)*n;i++){intx1=i/n,y1=i%n;if(btn[x1][y1].getIcon()!=null&&btn[x1][y1].getIcon()==pic[i-n]){}else{b=false;}}returnb;}//图片的放置publicvoidsetpic(){isover.setText(状态:未开始);step=0;lstep.setText(步数:+step+步);w=280/m;h=280/n;Image[]a=splitImage(filename,1,1,100,100);//缩放预览图preimage=newImageIcon(a[0]);//图片转换image=》IMageIconif(prebtn==null)//*如果存在,就不需要重新分配控件只需要更新图标prebtn=newJButton(preimage);//把图片设置为JButton的图标elseprebtn.setIcon(preimage);prebtn.setBounds(200,5,100,100);this.add(prebtn);//图片分割pic=newImageIcon[m*n];//分配空间大小if(btn==null)//*如果存在,就不需要重新分配控件只需要更新图标btn=newJButton[m+1][n];//分配控件实例化p=newRectangle[m+1][n];//坐标Image[]t=splitImage(filename,m,n,w,h);//图片分割m*n个每个高度与宽度为w,hfor(inti=0;i(m+1)*n;i++){intx1=i/n,y1=i%n;//下标转换if(btn[x1][y1]==null)//*如果存在,就不需要重新实例化控件btn[x1][y1]=newJButton();//实例化每个控件btn[x1][y1].setBounds(y1*w+5,x1*h+50,w,h);//控件坐标btn[x1][y1].addActionListener(this);//添加事件this.add(btn[x1][y1]);}for(inti=1;in;i++){btn[0][i].removeActionListener(this);//第一行除了第一个以外,其他都不注册事件btn[0][i].setVisible(false);//第一行除了第一个以外,其他都不显示}inttemp[]=randarray(m*n);for(inti=0;im*n;i++)//把图片放到方格内{pic[i]=newImageIcon(t[i]);//图片转换image=》ImageIcon}for(inti=0;im*n;i++)//把图片放到方格内{btn[(i+n)/n][(i+n)%n].setIcon(pic[temp[i]]);//设置图标}btn[0][0].setBackground(Color.BLUE);//设置背景btn[0][0].setIcon(null);this.repaint();//图片及时刷新}//图片方格随机产生一组随机序列数组,不能重复publicint[]randarray(intn){intre[]=newint[n];for(inti=0;in;i++)re[i]=i;for(inti=1;in;i++){intt;inta=(int)(Math.random()*(n-1)+1);//-1+1是为了第一个数不使用随机数t=re[i];re[i]=re[a];re[a]=t;}returnre;}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getSource()==jitem5)//关于{JOptionPane.showMessageDialog(this,四川师范大学成都学院开发实验室\n2010年12月12日);return;}if(e.getSource()==nandu1)//难度选择{nandu1.setSelected(true);//更改单选菜单nandu2.setSelected(false);for(inti=0;i(m+1)*n;i++){intx1=i/n,y1=i%n;//下标转换this.remove(btn[x1][y1]);//清除所有button控件}m=n=3;//重新设置难度btn=null;//释放btn对象setpic();return;}if(e.getSource()==nandu2){nandu2.setSelected(true);nandu1.setSelected(false);for(inti=0;i(m+1)*n;i++){intx1=i/n,y1=i%n;//下标转换this.remove(btn[x1][y1]);//实例化每个控件}m=n=4;btn=null;setpic();return;}if(e.getSource()==jitem1)//重新开始{for(intj=0;j(m+1)*n;j++){intx2=j/n,y2=j%n;//下标转换btn[x2][y2].removeActionListener(this);//实例化每个控件}setpic();return;}if(e.getSource()==jitem2){System.exit(0);}if(e.getSource()==jitem3){FileDialogdf=newFileDialog(this,图片选择,FileDialog.LOAD);df.setVisible(true);if(df.getFile()==null)return;filename=df.getDirectory()+df.getFile();//文件路径+文件名for(intj=0;j(m+1)*n;j++){intx2=j/n,y2=j%n;//下标转换btn[x2][y2].removeActionListener(this);//实例化每个控件}setpic();return;}for(inti=0;i(m+1)*n;i++)//循环所有控件{intx1=i/n,y1=i%n;//下标转换if(e.getSource()==btn[x1][y1])//如果点击了小方格{step++;lstep.setText(步数:+step+步);isover.setText(状态:已开始);//向上移动if(x10&&btn[x1-1][y1].isVisible()&&btn[x1-1][y1].getIcon()==null){btn[x1-1][y1].setIcon(btn[x1][y1].getIcon());//获取当前图标给上一个控件为图标btn[x1][y1].setIcon(nu
本文标题:java拼图游戏代码(完整版)
链接地址:https://www.777doc.com/doc-3613519 .html