您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > java拼图游戏设计报告
《Web程序开发》课程大作业拼图游戏3011212046张杰2014.11一、题目说明拼图游戏不仅可以帮助人们打发时间,还可以用于锻炼儿童脑力,帮助少儿开发大脑思维,拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。本游戏使用Java语言设计,开发平台为JDK。开发工具Eclipse。JDK是SunMicrosystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的JavaSDK。JDK是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。二、题意分析因为要制作拼图游戏,所以首先要实现图片的导入。这是通过getImage()函数来实现的,该函数有两个参数,第一个参数指明图片的路径,第二个参数指明图片的名称。然后,因为要实现图片摆放的随意性,所以要通过initgame()函数来实现。Initgame()函数是自写函数,在函数体内,通过调用Math.random()函数产生随机数,用来达到图片位置摆放的随意性和随机性。最后,因为要实现人机交互.,所以首先要通过一系列函数来实现对鼠标事件的监听和响应,这是通过函数addMouseListener(this)和addMouseMotionListener(this)来完成的。这样程序会区分用户对鼠标不同的操作,正确执行相应的功能。游戏操作流程:开始游戏游戏完成操作游戏三、设计目的本游戏的设计目的在于休闲娱乐,玩家可以在学习、编程等工作后用来休息放松,让集中的心态得到释放,对于小孩可以通过精美的卡通的图片来吸引孩子的兴趣,加强动脑动手能力。本游戏适玩人群老少皆宜。四、设计特点本游戏主要充分运用图形用户界面将一张图片切割成大小相同的九块小图,运用其中的八块,将小图的顺序和位置打乱,通过将图片移动到剩余的一格空白处而改变图片的位置,最终拼成原始图片。五、功能说明游戏功能图:关闭游戏开始游戏查看图片选择图片退出游戏拼图游戏本拼图游戏,运用了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);}elseif(direction==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;i3;i++){//循环为每个方格加载图片for(intj=0;j3;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(){//判断是否拼凑成功for(inti=0;i8;i++){intx=pane[i].getBounds().x;inty=pane[i].getBounds().y;if(y/100*3+x/100!=i)returnfalse;}returntrue;}publicvoidreLoadPictrue(){//重新加载图片在重新选择图片时Iconicon;for(inti=0;i3;i++){//循环为每个方格加载图片for(intj=0;j3;j++){icon=newImageIcon(pictrue/pic_+currentPID+_+(i*3+j+1)+.jpg);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;j8;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;if(test(x,y)){for(intj=0;j8;j++){if((pane[j].getBounds().x==x)&&(pane[j].getBounds().y==y)){pane[j].move(LEFT,100);//方格向左移动一格nullPanel.setLocation(x,y);break;}}}}elseif(direction==2){//空方格上移动y-=100;if(test(x,y)){for(intj=0;j8;j++){if((pane[j].getBounds().x==x)&&(pane[j].getBounds().y==y)){pane[j].move(DOWN,100);//方格向下移动一格nullPanel.setLocation(x,y);break;}}}}else{//空方格下移动y+=100;if(test(x,y)){for(intj=0;j8;j++){if((pane[j].getBounds().x==x)&&(pane[j].getBounds().y==y)){pane[j].move(UP,100);//方格向上移动一格nullPanel.setLocation(x,y);break;}}}}}if(!hasAddActionListener)//判断是否添加动作事件for(inti=0;i8;i++){//循环为每个方格添加动作事件pane[i].addMouseListener(this);}hasAddActionListener=true;}privatebooleantest(intx,inty){//检测方格是否在指定的范围内移动if((x=0&&x=200)||(y=0&&y=200))returntrue;elsereturnfalse;}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(UP,100);//方格向上移动elseif(x1==nullDir_X&&y1-nullDir_Y==-100)button.move(DOWN,100);//方格向下移动elseif(x1-nullDir_X==100&y1==nullDir_Y)button.move(LEFT,100);//方格向左移动elsei
本文标题:java拼图游戏设计报告
链接地址:https://www.777doc.com/doc-6092647 .html