java拼图游戏完整代码.docx
- 文档编号:2808866
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:16
- 大小:18.80KB
java拼图游戏完整代码.docx
《java拼图游戏完整代码.docx》由会员分享,可在线阅读,更多相关《java拼图游戏完整代码.docx(16页珍藏版)》请在冰豆网上搜索。
java拼图游戏完整代码
//Cell.java
packagecn.itcast.picture.ui;
importjavax.swing.Icon;
importjavax.swing.JButton;
/*
*图片小方格类
*/
publicclassCellextendsJButton{
//带有图片的小方格
publicCell(Iconicon){
super(icon);
//设置小方格大小
this.setSize(150,150);
}
//带有图片和文字的小方格
publicCell(Stringtext,Iconicon){
super(text,icon);
//设置小方格大小
this.setSize(150,150);
this.setHorizontalTextPosition(CENTER);//设置文字水平居中显示
this.setVerticalTextPosition(CENTER);//设置文字垂直居中显示
}
//
publicvoidmove(Stringdirection){
switch(direction){
case"UP":
this.setLocation(this.getBounds().x,this.getBounds().y-150);
break;
case"DOWN":
this.setLocation(this.getBounds().x,this.getBounds().y+150);
break;
case"LEFT":
this.setLocation(this.getBounds().x-150,this.getBounds().y);
break;
case"RIGHT":
this.setLocation(this.getBounds().x+150,this.getBounds().y);
break;
default:
break;
}
}
}
//PictureCanvas.java
packagecn.itcast.picture.ui;
importjava.awt.Rectangle;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjavax.swing.ImageIcon;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
/*
*拼图类
*/
publicclassPictureCanvasextendsJPanelimplementsMouseListener{
//静态变量
publicstaticintpictureID=1;//图片ID
publicstaticintstepNum=0;//步数
privateCell[]cell;
privatebooleanhasAddActionListener=false;//表示是否为小方格添加了点击监听,有为true
privateRectanglenullCell;
//构造方法
publicPictureCanvas(){
initCanvas();
}
//初始化
publicvoidinitCanvas(){
//设置拼图区的位置
this.setLayout(null);//帧布局
//创建12个小方格,并添加到拼图区
cell=newCell[12];
for(inti=0;i<4;i++){
for(intj=0;j<3;j++){
//加载图片
intnum=i*3+j;
ImageIconicon=newImageIcon("picture/"+pictureID+"_"+(num+1)+".gif");
//创建图片小方格
cell[num]=newCell(icon);
//指定显示位置
cell[num].setLocation(150*j+20,i*150+20);
//把图片小方格添加到拼图区
this.add(cell[num]);
}
}
//删除第12个小方格
this.remove(cell[11]);
nullCell=newRectangle(320,470,150,150);
hasAddActionListener=false;
}
//重新加载图片,并添加数字提示
publicvoidreloadPictureAddNumber(){
for(inti=0;i<4;i++){
for(intj=0;j<3;j++){
intnum=i*3+j;
ImageIconicon=newImageIcon("picture/"+pictureID+"_"+(num+1)+".gif");
cell[num].setIcon(icon);
cell[num].setText(num+1+"");
cell[num].setVerticalTextPosition(getY()/2);
cell[num].setHorizontalTextPosition(getX()/2);
}
}
}
//重新加载图片,并清除数字提示
publicvoidreloadPictureClearNumber(){
for(inti=0;i<4;i++){
for(intj=0;j<3;j++){
intnum=i*3+j;
ImageIconicon=newImageIcon("picture/"+pictureID+"_"+(num+1)+".gif");
cell[num].setIcon(icon);
cell[num].setText("");
}
}
}
//start对小方格重新排序
publicvoidstart(){
//如果没有给小方格添加监听,则添加监听
if(!
hasAddActionListener){
for(inti=0;i<11;i++){
cell[i].addMouseListener(this);
}
hasAddActionListener=true;
}
//当第一个小方格离左上角比较近的话,进行空方格与就近方格的随机交换
while(cell[0].getBounds().x<=170&&cell[0].getBounds().y<=170){
//获取空方格的位置
intnullX=nullCell.getBounds().x;
intnullY=nullCell.getBounds().y;
//随机产生一个方向,进行空方格的移动互换
//产生0-3之间的随机数,代表交换移动方向
intdirection=(int)(Math.random()*4);
switch(direction){
case0:
//空方格向左交换移动,原左侧方格向右移动
nullX-=150;
cellMove(nullX,nullY,"RIGHT");
break;
case1:
//空方格向右交换移动,原右侧方格向左移动
nullX+=150;
cellMove(nullX,nullY,"LEFT");
break;
case2:
//空方格向上交换移动,原上方方格向下移动
nullY-=150;
cellMove(nullX,nullY,"DOWN");
break;
case3:
//空方格向下交换移动,原下方方格向上移动
nullY+=150;
cellMove(nullX,nullY,"UP");
break;
}
}
}
privatevoidcellMove(intnullX,intnullY,Stringdirection){
for(inti=0;i<11;i++){
if(cell[i].getBounds().x==nullX&&cell[i].getBounds().y==nullY){
//当前方格移动
cell[i].move(direction);
//空方格移动(nullX,nullY)
nullCell.setLocation(nullX,nullY);
break;
}
}
}
@Override
publicvoidmouseClicked(MouseEvente){
}
@Override
publicvoidmousePressed(MouseEvente){
//获取当前点击的小方格
Cellbutton=(Cell)e.getSource();
//获取所点击方格的x,y
intclickX=button.getBounds().x;
intclickY=button.getBounds().y;
//获取空方格的x,y
intnullX=nullCell.getBounds().x;
intnullY=nullCell.getBounds().y;
//比较如果满足条件,则互换位置
if(clickX==nullX&&clickY-nullY==150){//点击为空方格下方方格
button.move("UP");
}elseif(clickX==nullX&&clickY-nullY==-150){//点击为空方格上方方格
button.move("DOWN");
}elseif(clickX-nullX==150&&clickY==nullY){//点击为空方格右方方格
button.move("LEFT");
}elseif(clickX-nullX==-150&&clickY==nullY){//点击为空方格左方方格
button.move("RIGHT");
}else{
return;
}
//更新空方格位置
nullCell.setLocation(clickX,clickY);
//拼图区重新绘制
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 拼图游戏 完整 代码