java拼图游戏设计报告Word下载.docx
《java拼图游戏设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《java拼图游戏设计报告Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
选择图片
查看图片
本拼图游戏,运用了Java2中的图形处理技术和消息响应技术。
通过图形技术,实现图片的导入和分割。
通过消息响应机制,使程序可以响应用户的鼠标操作,进行拼图游戏的操作。
这个游戏主要分为四个模块,分别是游戏开始、查看图片、选择图片和退出游戏。
这四个摸块的功能各不一样,玩家如果在游戏过程中感觉拼图小块之间的接合不明显,玩家可以点击“查看”按钮来浏览拼图完成的效果图,从而使得游戏不会无从下手;
玩家如果觉得当前拼图的画面不满意可以点击“选择”图片按钮来更换图片,或者想更改拼图的画面,玩家可以进入游戏文件夹进行更换图片文件,但是需要注意的是图片需要有格式,同时还需要将所要更改的图片切割成大小相同的九个小块,具体就不详细说了,游戏文件夹中会给大家附一个.txt文件,供大家更换图片使用,从而提高玩家乐趣。
六、主要功能程序段
importjava.awt.Rectangle;
//引入类
importjava.awt.event.*;
importjavax.swing.*;
classPaneButtonextendsJButton{//继承按钮类实现加图片的方格
PaneButton(Iconicon){//构造方法进行初始化,设置图标
super(icon);
this.setSize(100,100);
//设置每个方格的大小
}
publicvoidmove(Stringdirection,intsleep){//方格的移动
if(direction=="
UP"
){//方格向上移动
this.setLocation(this.getBounds().x,this.getBounds().y-100);
}elseif(direction=="
DOWN"
){//方格向下移动
this.setLocation(this.getBounds().x,this.getBounds().y+100);
LEFT"
){//方格向左移动
this.setLocation(this.getBounds().x-100,this.getBounds().y);
}else{//方格向右移动
this.setLocation(this.getBounds().x+100,this.getBounds().y);
}
}
publicclassPanelOfImageextendsJPanelimplementsMouseListener{//图片面板加载方格对象
booleanhasAddActionListener=false;
//设置方格动作监听器的标识
PaneButtonpane[];
//声明方格
RectanglenullPanel;
//声明空方格,没有添图片
publicstaticintcurrentPID=1;
//当前选择的图片编号
publicPanelOfImage(){//构造方法进行初始化
this.setLayout(null);
//设置面板的布局为空
this.setSize(400,400);
//设置面板的大小
nullPanel=newRectangle(200,200,100,100);
//设置空方格的位置
pane=newPaneButton[9];
//创建九个方格
Iconicon;
//声明图标
for(inti=0;
i<
3;
i++){//循环为每个方格加载图片
for(intj=0;
j<
j++){//循环列
icon=newImageIcon("
pictrue/pic_"
+currentPID+"
_"
+(i*3+j+1)+"
.jpg"
);
//创建图标
pane[i*3+j]=newPaneButton(icon);
//创建方格在方格中加载图片
pane[i*3+j].setLocation(j*100,i*100);
//设置方格的位置
this.add(pane[i*3+j]);
//面板添加方格
}
this.remove(pane[8]);
//移除多余的方格
publicbooleanisFinish(){//判断是否拼凑成功
8;
i++){
intx=pane[i].getBounds().x;
inty=pane[i].getBounds().y;
if(y/100*3+x/100!
=i)
returnfalse;
returntrue;
publicvoidreLoadPictrue(){//重新加载图片在重新选择图片时
j++){
pane[i*3+j].setIcon(icon);
publicvoidbreakRank(){//方格打乱重新排序
while(pane[0].getBounds().x<
=100&
&
pane[0].getBounds().y<
=100){//当第一个方格距左上角近时
intx=nullPanel.getBounds().x;
inty=nullPanel.getBounds().y;
intdirection=(int)(Math.random()*4);
//随机产生一个数字对应空方格的上下左右移动
if(direction==0){//空方格左移动,与左侧方格互换位置,左侧方格右移动
x-=100;
//空主格左移
if(test(x,y)){
for(intj=0;
j++){//循环寻打左侧的按钮
if((pane[j].getBounds().x==x)
&
(pane[j].getBounds().y==y)){//依次寻找左侧的按钮
pane[j].move("
RIGHT"
100);
//方格向右移动一格
nullPanel.setLocation(x,y);
//重新设置空方格的位置
break;
//跳出循环
}
}
}
}elseif(direction==1){//空方格右移动
x+=100;
(pane[j].getBounds().y==y)){
//方格向左移动一格
}elseif(direction==2){//空方格上移动
y-=100;
//方格向下移动一格
}else{//空方格下移动
y+=100;
//方格向上移动一格
if(!
hasAddActionListener)//判断是否添加动作事件
for(inti=0;
i++){//循环为每个方格添加动作事件
pane[i].addMouseListener(this);
hasAddActionListener=true;
privatebooleantest(intx,inty){//检测方格是否在指定的范围内移动
if((x>
=0&
x<
=200)||(y>
y<
=200))
returntrue;
else
returnfalse;
publicvoidmouseClicked(MouseEventarg0){//鼠标点击时调用
publicvoidmouseEntered(MouseEventarg0){//鼠标进入组件区域时调用
publicvoidmouseExited(MouseEventarg0){//控制鼠标不能移动出面板的范围
publicvoidmouseReleased(MouseEventarg0){//鼠标按键在组件上释放时调用
publicvoidmousePressed(MouseEventevent){//鼠标按下时调用
PaneButtonbutton=(PaneButton)event.getSource();
//获得鼠标按的方格按钮
intx1=button.getBounds().x;
//获得该方格按钮的横坐标
inty1=button.getBounds().y;
//获得该方格按钮的纵坐标
intnullDir_X=nullPanel.getBounds().x;
//得到空方格的横坐标
intnullDir_Y=nullPanel.getBounds().y;
//得到空方格的纵坐标
if(x1==nullDir_X&
y1-nullDir_Y==100)//进行比较果满足条件则交换
button.move("
//方格向上移动
elseif(x1==nullDir_X&
y1-nullDir_Y==-100)
//方格向下移动
elseif(x1-nullDir_X==100&
y1==nullDir_Y)
//方格向左移动
elseif(x1-nullDir_X==-100&
//方格向右移动
return;
nullPanel.setLocation(x1,y1);
this.repaint();
//重新加载
if(this.isFinish()){//进行是否完成的判断
JOptionPane.showMessageDialog(this,"
恭喜你,完成拼图"
i++){//循环撤消鼠标事件
pane[i].removeMouseListener(this);
hasAddActionListener=false;
importjava.awt.*;
publicclassTextImagePieceTogetherextendsJFrameimplementsActionListener{//操作实现拼图的游戏的类
PanelOfImageimagePanel;
//声明图片面板
JPanelpanelOfSouth,panelOfLook;
////声明南侧面板和查看面板
ButtonstartButton;
//声明开始按钮
ButtonlookButton;
//声明查看按钮
ButtonchooseButton;
//选择按钮
Containercontainer;
//容器,得到内容面板
publicTextImagePieceTogether(){//构造方法进行初始化
container=this.getContentPane();
//获得内容面板
startButton=newButton("
开始"
//创建开始按钮
startButton.addActionListener(this);
//添加监听事件
lookButton=newButton("
查看"
lookButton.addActionListener(this);
chooseButton=newButton("
选择"
chooseButton.addActionListener(this);
panelOfLook=newJPanel();
//创建查看面板
panelOfLook.setLayout(null);
//设置布局
Iconicon=newImageIcon("
+PanelOfImage.currentPID
+"
JLabellabel=newJLabel(icon);
//创建图标标签
label.setBounds(0,0,300,300);
//设置标签的位置
panelOfLook.add(label);
//添加标签
panelOfSouth=newJPanel();
//创建南侧面板
panelOfSouth.setBackground(Color.red);
//设置背景颜色
panelOfSouth.add(startButton);
//添加开始按钮
panelOfSouth.add(lookButton);
//添加查看按钮
panelOfSouth.add(chooseButton);
//添加选择按钮
imagePanel=newPanelOfImage();
//创建图片面板
container.add(imagePanel,BorderLayout.CENTER);
container.add(panelOfSouth,BorderLayout.SOUTH);
this.setTitle("
拼图游戏"
//设置标题
this.setLocation(300,200);
//设置位置
this.setSize(308,365);
//设置大小
this.setResizable(false);
//设置是否可以通过某个用户操作调整
this.setVisible(true);
//设置可视
this.setDefaultCloseOperation(3);
//设置默认关闭操作
publicvoidactionPerformed(ActionEventevent){//按钮触发的事件
Buttonbutton=(Button)event.getSource();
//获得事件按钮源
if(button==startButton){//如果是开始按钮
imagePanel.breakRank();
//调用图片方格打乱方法
}elseif(button==lookButton){//如果是查看事件
if(button.getLabel()=="
){//如果按钮标签为"
container.remove(imagePanel);
//容器移除图片面板
container.add(panelOfLook);
//容器添加查看标签
panelOfLook.updateUI();
//不用调整大小就可以出现新增删的组件
container.repaint();
//重绘
button.setLabel("
返回"
//设置按钮标签
}else{
container.remove(panelOfLook);
//容器移除查看面板
container.add(imagePanel);
//容器添加图片面板
}elseif(button==chooseButton){//如果是选择按钮
Choicechoice=newChoice();
//创建选择器
choice.add("
--小猫--"
//添加列表项
--QQ--"
inti=JOptionPane.showConfirmDialog(this,choice,"
选择图片"
JOptionPane.OK_CANCEL_OPTION);
//弹出对话框
if(i==JOptionPane.YES_OPTION){//选择对话框的确定按钮
PanelOfImage.currentPID=choice.getSelectedIndex()+1;
//获得列表项的编号
imagePanel.reLoadPictrue();
//图片重载
Iconicon=newImageIcon("
+PanelOfImage.currentPID+"
//获得图片图标
JLabellabel=newJLabel(icon);
//根据图标设置标签
label.setBounds(0,0,300,300);
//设置标签的方位
panelOfLook.removeAll();
panelOfLook.add(label);
panelOfLook.repaint();
publicstaticvoidmain(String[]args){//java程序主入口处
newTextImagePieceTogether();
//实例化对象
七、运行结果
游戏界面:
开始游戏:
查看全图:
更换图片:
8、编程经验
本练习制作拼图游戏的实例,运用了Java2中的图形处理技术和消息响应技术。
9、设计体会
在编程过程中,使我更进一步理解了JAVA编程的思想,体会