推箱子游戏报告书
推箱子问题的设计与实现
![推箱子问题的设计与实现](https://img.taocdn.com/s3/m/d67c798b83d049649b66587e.png)
《推箱子问题的设计与实现》实验报告班级:计本四班学号:2012020386 姓名:刘宝同一、问题描述码头仓库是划分为n×m个格子的矩形阵列。
有公共边的格子是相邻格子。
当前仓库中有的格子是空闲的;有的格子则已经堆放了沉重的货物。
由于堆放的货物很重,单凭仓库管理员的力量是无法移动的。
仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。
管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。
管理员站在与箱子相对的空闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。
推箱时只能向管理员的对面方向推。
由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。
二、问题求解分析对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置,设计一个解推箱子问题的分支限界法,计算出仓库管理员将箱子从开始位置推到目标位置所需的最少推动次数。
数据输入:由文件input.txt 提供输入数据。
输入文件第1行有2个正整数n 和m (1<=n,m<=100),表示仓库是n×m个格子的矩形阵列。
接下来有n 行,每行有m个字符,表示格子的状态。
S 表示格子上放了不可移动的沉重货物;w 表示格子空闲;M 表示仓库管理员的初始位置;P 表示箱子的初始位置;K 表示箱子的目标位置。
结果输出:将计算出的最少推动次数输出到文件output.txt。
如果仓库管理员无法将箱子从开始位置推到目标位置则输出“No solution!”。
三、源程序关键代码#include <stdio.h>#include <stdlib.h>#include <conio.h>int map1(int a[9][10]);char move(char t,int map[9][10]){int i,j,x,y;system("CLS"); //清屏for(i=0;i<9;i++) // 查找当前人位置{for(j=0;j<10;j++)if(map[i][j]==4 || map[i][j]==6){x=i,y=j;};}switch(t){case '8':{ if(map[x-1][y]==1)//如果人面前时路{map[x-1][y]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x-1][y]==3)//人面前是箱子{if(map[x-2][y]==2)// 人前箱子箱子前面是空位{map[x-1][y]=4;map[x-2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x-2][y]==0 || map[x-2][y]==3 || map[x-2][y]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}else if(map[x-2][y]==1)// 人前是箱子箱子前面是路{map[x-1][y]=4;map[x-2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x-1][y]==0) //人前是墙{printf("\a");}else if(map[x-1][y]==2){map[x-1][y]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x-1][y]==5)//人前是已在空位的箱子{if(map[x-2][y]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x-1][y]=6;map[x-2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x-2][y]==0 || map[x-2][y]==3 || map[x-2][y]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x-2][y]==1)//人前是已在空位上的箱子箱子前是路{map[x-1][y]=6;map[x-2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;case '6':{ if(map[x][y+1]==1)//如果人面前时路{map[x][y+1]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+1]==3)//人面前是箱子{if(map[x][y+2]==2)// 人前箱子箱子前面是空位{map[x][y+1]=4;map[x][y+2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+2]==0 || map[x][y+2]==3 || map[x][y+2]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y+2]==1)// 人前是箱子箱子前面是路{map[x][y+1]=4;map[x][y+2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x][y+1]==0) //人前是墙{printf("\a");}else if(map[x][y+1]==2){map[x][y+1]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+1]==5)//人前是已在空位的箱子{if(map[x][y+2]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x][y+1]=6;map[x][y+2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y+2]==0 || map[x][y+2]==3 || map[x][y+2]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y+2]==1)//人前是已在空位上的箱子箱子前是路{map[x][y+1]=6;map[x][y+2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;case '2':{ if(map[x+1][y]==1)//如果人面前时路{map[x+1][y]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+1][y]==3)//人面前是箱子{if(map[x+2][y]==2)// 人前箱子箱子前面是空位{map[x+1][y]=4;map[x+2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+2][y]==0 || map[x+2][y]==3 || map[x+2][y]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}else if(map[x+2][y]==1)// 人前是箱子箱子前面是路{map[x+1][y]=4;map[x+2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x+1][y]==0) //人前是墙{printf("\a");}else if(map[x+1][y]==2){map[x+1][y]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+1][y]==5)//人前是已在空位的箱子{if(map[x+2][y]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x+1][y]=6;map[x+2][y]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x+2][y]==0 || map[x+2][y]==3 || map[x+2][y]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x+2][y]==1)//人前是已在空位上的箱子箱子前是路{map[x+1][y]=6;map[x+2][y]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;case '4':{ if(map[x][y-1]==1)//如果人面前时路{map[x][y-1]=4;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y-1]==3)//人面前是箱子{if(map[x][y-2]==2)// 人前箱子箱子前面是空位{map[x][y-1]=4;map[x][y-2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y-2]==0 || map[x][y-2]==3 || map[x][y-2]==5)//人前是箱子箱子前面是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y-2]==1)// 人前是箱子箱子前面是路{map[x][y-1]=4;map[x][y-2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};}elseif(map[x][y-1]==0) //人前是墙{printf("\a");}else if(map[x][y-1]==2){map[x][y-1]=6;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}else if(map[x][y-1]==5)//人前是已在空位的箱子{if(map[x][y-2]==2)//人前是已在空位是的箱子箱子前是一个空位{map[x][y-1]=6;map[x][y-2]=5;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;}elseif(map[x][y-2]==0 || map[x][y-2]==3 || map[x][y-2]==5)//人前是已在空位是的箱子箱子前是墙箱子已在空位上的箱子{printf("\a");}elseif(map[x][y-2]==1)//人前是已在空位上的箱子箱子前是路{map[x][y-1]=6;map[x][y-2]=3;if(map[x][y]==4) map[x][y]=1;else map[x][y]=2;};};};break;}map1(map);return (map[9][10]);}int map1(int a[9][10]){int i,j;static int count=0;system("cls");printf("\n\n\t\t\t 欢迎选玩*【推箱子游戏】O(∩_∩)O~~~ \n\n\t\t\t\t\t 游戏规则:\n\t\t□:代表墙×:代表路○:代表空位\n\t\t ●:代表箱子♀:代表人※:代表箱子已在空位上\n\t\t\t\t\t 8:向上移动\n\t\t\t\t\t 2:向下移动\n\t\t\t\t\t 4:向左移动\n\t\t\t\t\t 6:向右移动\n\t\t\t\t\t") ;for(i=0;i<9;i++){printf("\n\t\t\t\t ");for(j=0;j<10;j++){switch(a[i][j]){case 0:printf("□");break;//"□"代表墙case 1:printf("×");break;//"×"代表路case 2:printf("○");break;//"○"代表空位case 3:printf("●");break;//"●"代表箱子case 4:printf("♀");break;//"♀"代表人case 5:printf("※");break;//"※"代表箱子已在空位上case 6:printf("♀");break;}}}printf("\n\t\t\t\t步数:%d",count++);printf("\n\t\t\t\t"); return (a[9][10]);}int main(){char c;int map[9][10]={{0,0,0,0,0,0,0,0,0,0},{0,0,0,1,1,2,1,0,0,0},{0,1,3,2,3,3,3,1,1,0},{0,1,0,1,0,2,1,0,1,0},{0,1,4,2,1,2,1,0,1,0},{0,0,0,0,1,3,1,1,1,0},{0,0,0,0,3,2,0,0,0,0},{0,0,0,0,1,1,0,0,0,0},{0,0,0,0,0,0,0,0,0,0}};system("color E9");map1(map);while(1){ c=getch();if(c=='8' || c=='6' || c=='2' || c=='4'){ move(c,map);}}}四、总结通过对推箱子游戏的编程和设计,进一步巩固了数据结构和算法设计与分析所学的知识,在查阅了有关推箱子游戏问题编程的相关知识的同时,也进一步了解了结构体之间的密切关系,并加深和巩固了函数调用的方法和技巧。
java推箱子实验报告
![java推箱子实验报告](https://img.taocdn.com/s3/m/b34df4c5f18583d04864594b.png)
Java设计报告1.1设计背景:经典的推箱子游戏是一个来自日本的古老游戏,目的是在训练逻辑思考能力。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
一想起这款小游戏,就想起了我的童年,它陪我们这一代度过了一段美好且愉快的时光。
所以想到自己也写一个推箱子游戏,既可以享受过去的美好回忆,又可以锻炼自己的Java设计能力。
1.2设计目的:综合运用在校期间所学到的理论知识和技能,并且结合课外参考资料,设计开发基于JA V A 的推箱子小游戏,让自己能够熟悉并熟练应用系统的开发过程,培养独立思考能力,检验学习成果和实际动手能力,以及提高工程实践能力,为今后的工作打下坚实的基础。
1.3游戏需求:玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。
如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。
游戏功能需求如下所示:游戏界面需求:简洁美观的用户界面,可以带给用户自然清晰的画面。
游戏内容需求::小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。
键盘处理事件:控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。
显示需求:当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。
可以由玩家喜欢选择关卡进行游戏。
2.1游戏设计分析从面向对象的观念出发,本程序可分为以下几个对象:地图文件的引用小人与箱子的移动程序运算逻辑绘图显示平台分析对象的技巧在于它的重复利用及维护效率。
如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。
C语言-推箱子实验报告
![C语言-推箱子实验报告](https://img.taocdn.com/s3/m/4dc9010e4a7302768e993944.png)
福建工程学院计算机与信息科学系实验报告2011 – 2012 学年第 1 学期任课老师:聂明星课程名称结构化程序设计班级1002 座号15 姓名林左权实验题目推箱子实验时间实验开始日期:9/15 报告提交日期:9/20实验目的、要求一、实验题目:设计一个简单实用推箱子游戏程序。
二、推箱子游戏介绍推箱子游戏1981年由日本人今林宏行首创,是在1982年12月由Thinking Rabbit 公司首次发行,名“仓库番”。
游戏规则:在设定的游戏地图里面,箱子只可以推, 不可以拉, 而且一次只能推动一个。
胜利条件:把所有的箱子都推到目的地。
1.图1-1 推箱子游戏截图三、程序设计要求:2.地图大小为20*20,‘#’表示墙,‘0’表示箱子,‘*’表示‘人’,‘X’表示空位置,可以放箱子。
初始地图如图2-1所示,光标显示在’*’下方。
图2-1 推箱子初始地图3.使用方向键↑↓←→进行移动,在前进方向上没有墙阻挡时,可以一次移动‘人’(‘*’表示)一格;当‘人’与箱子(‘0’表示)相连接,如果对应方向没有墙‘#’阻挡,按方向键,则可以将箱子推动一格。
4.当‘人’将箱子‘0’推入到空位置‘X’后,‘X’消失。
5.当所有的箱子‘0’被推入箱子,游戏结束,在屏幕输出“You Win!”。
6.游戏过程中按‘空格’键,游戏结束。
7.游戏过程中按‘ESC’键,游戏结束。
实验步骤与内容:1、主要设计思想;(1)用状态数组status[20][20]保存每个坐标的信息,用bioskey函数接受键盘上的按键,以获取信息。
算法思路(当人的四周都没有阻碍的情况下就可以自由行动;当人的相应某个方向上有墙壁的时候,人就不能往相应的方向上行走;当人的相应方向有箱子,箱子的对应方向是墙壁的话也不能推动箱子行走;当人或箱子就在目标地,退出来时候要回复原来目标地的标志X)2、主要数据结构及其解释(1)textcolor(10);/*给标识符的颜色换成浅绿色*/clrscr();/*清屏后才会显示出换色后的图案*/(2)/*保存原来status[20][20]的信息,因为status[20][20]的信息在人移动的时候会改变*/char status1[20][20];(3)/*loop是用来当用户按下空格键的时候从新开始*/loop:goto loop;(4)gotoxy(40,5);/*跳到(40.5)这个坐标*/printf("* stand for people.");/*输出一些控制信息*/。
推箱子项目实训报告
![推箱子项目实训报告](https://img.taocdn.com/s3/m/ada02cb4b9f67c1cfad6195f312b3169a451eaf6.png)
一、项目背景推箱子游戏是一款经典的益智游戏,起源于日本。
玩家需要在狭小的仓库中,通过移动人物,将箱子推到指定的位置。
这款游戏不仅考验玩家的逻辑思维和空间想象力,还锻炼玩家的耐心和策略。
为了提高自身的编程能力,我们选择推箱子游戏作为实训项目。
二、实训目的1. 学习和掌握Java编程语言的基本语法和常用库;2. 熟悉图形用户界面(GUI)编程;3. 提高逻辑思维和编程能力;4. 实现一个具有良好用户体验的推箱子游戏。
三、项目设计1. 系统架构推箱子游戏采用MVC(模型-视图-控制器)架构,将游戏逻辑、界面展示和用户交互分离,提高代码的可读性和可维护性。
2. 关卡设计游戏共包含10个关卡,每个关卡都有不同的地图和目标。
关卡难度逐渐增加,以满足不同玩家的需求。
3. 游戏功能(1)基本功能1)地图展示:游戏开始时,展示当前关卡的地图,包括人物、箱子、目的地和墙壁;2)人物移动:玩家可以通过键盘或鼠标控制人物上下左右移动;3)箱子移动:当人物站在箱子旁边时,按空格键将箱子推到目标位置;4)胜利判断:所有箱子都推到目标位置,游戏胜利;5)失败判断:人物无法移动或通道被堵住,游戏失败。
(2)扩展功能1)悔棋功能:玩家可以撤销上一步操作,回到之前的状态;2)重置关卡:玩家可以重新开始当前关卡;3)关卡选择:玩家可以选择不同的关卡进行游戏;4)音乐和音效:游戏过程中,播放背景音乐和音效,增强游戏氛围。
四、关键技术1. Java编程语言:使用Java编程语言实现游戏逻辑、界面展示和用户交互;2. Swing库:使用Swing库实现图形用户界面;3. 图像处理:使用ImageIO类加载和显示游戏地图、人物、箱子等图片;4. 事件监听:使用ActionListener、KeyListener等监听器处理用户操作。
五、项目实现1. 创建项目:使用Eclipse创建Java项目,导入Swing库和ImageIO类;2. 设计界面:创建JFrame作为主窗口,添加JPanel作为游戏区域,添加JButton作为按钮控件;3. 游戏逻辑:定义游戏地图、人物、箱子等数据结构,实现人物移动、箱子移动、胜利判断和失败判断等功能;4. 图像处理:加载游戏地图、人物、箱子等图片,使用ImageIO类进行显示;5. 事件监听:为按钮控件添加ActionListener和KeyListener,处理用户操作。
推箱子程序设计与报告.doc
![推箱子程序设计与报告.doc](https://img.taocdn.com/s3/m/f015fe09366baf1ffc4ffe4733687e21ae45ff5b.png)
推箱子程序设计与报告.doc推箱子是一款经典的益智游戏,我们本次设计的推箱子程序主要基于Java语言实现,通过使用IDEA开发环境以及JavaFX图形界面库,提供用户友好的交互界面,使得用户可以愉快地通过游戏锻炼自己的智力。
1. 总体设计推箱子需要先定义一些基本的数据结构,包括地图、箱子和人物。
对于地图而言,我们采用一个二维数组来表示,每个元素用数字来表示:0代表空位,1代表墙,2代表目的地。
对于箱子和人物的位置,我们同样采用二维数组表示。
其中0代表箱子或人物当前位置为空,1代表箱子或人物在该位置。
通过这三个数组,可以完整地表示游戏的基本状态。
2. 游戏规则游戏的基本规则如下:1)箱子、人物、目的地都是由矩形表示。
2)人物可以沿着地图上的通路走动,但不能与障碍物墙相交。
3)人物可以对着箱子推动箱子,但只能向前推,并且不能推到障碍物墙。
4)箱子只能单向推动,即只能向人物朝向的方向推动,并且只能顺着通路推动。
5)每一个箱子必须都推到一个目的地上,游戏才算成功过关。
3. 程序实现在代码实现上,我们采用Model-View-Controller架构,将游戏分为Model(模型)、View(视图)和Controller(控制器)三个部分。
Model主要处理游戏数据,包括游戏地图、箱子和人物的位置。
View则主要负责游戏界面的展示,包括游戏地图、箱子和人物的图形展示、以及用户交互界面的设计等。
Controller则主要负责调度Model和View之间的数据通信和相互交互。
4. 用户界面我们提供了以下用户交互界面:1)菜单:在菜单中,用户可以选择开始新游戏,或者退出程序。
2)选关界面:在选关界面中,用户可以选择所需的关卡。
3)游戏界面:在游戏界面中,实现了地图的显示、箱子和人物的移动、关卡完成情况的判断等功能。
5. 应用技术本次推箱子程序的开发采用了以下技术:1)Java语言编写2)JavaFX图形界面库3)MVC软件设计模式4)Git版本控制5)IntelliJ IDEA开发IDE6. 结论本次推箱子程序的开发成功实现了一款经典益智游戏的主要功能,同时也提供了用户友好的交互界面。
推箱子游戏-需求分析
![推箱子游戏-需求分析](https://img.taocdn.com/s3/m/1e6dcf9ed1f34693daef3eb2.png)
推箱子需求分析报告报告名称:推箱子需求分析报告组长座号:05组长姓名:林艺芬组员的座号及姓名:02-林丽萍19-陈飞滨一、引言1.1.项目名称推箱子游戏1.2.项目目标从推箱子游戏的需求及现有技术等方面研究该推箱子游戏项目的可行性,嵌入大型游戏中1.3.项目背景(1)开发软件的名称:JAVA(2)项目提出者:福建工程学院(3)项目开发者:福建工程学院开发小组(4)本游戏可作为大型游戏系统中的一部分1.4.参考资料清华大学出版社《软件工程》二、需求分析2.1.项目概述经典的推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。
在一个狭小的仓库中,要求把木箱放在指定的位置,稍不小心就会出现箱子无法移动或则通道被堵住的情况,所以需要巧妙地利用有限的空间和通道,合理安排移动的次序和未知,才能顺利地完成任务2.2.系统的功能描述2.2.1能够显示主菜单和功能游戏需要提供主菜单让玩家进行游戏设置,同时能能够把地图文件中的信息转换成为图像显示到祝游戏界面上能够接收到键盘输入的方向键信息,并根据不同的方向键把游戏任务移动到响应的位置,例如,当玩家单击方向键“上”时,如果向上的未知是可移动的,那么就当把游戏人物向上移动一个方格当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色。
这样就能明确地显示出该箱子已经放置到指定位置上玩家可以自己扩展原游戏地图文件,从而生成新的游戏地图在游戏中,当玩家把全部的箱子都推到箱子放置点时,玩家胜利通过当前游戏关口,进行下一关口的游戏,如果玩家无法将指定的箱子全部推到放置点时,玩家失败。
玩家可以选择重新进行当前关口的游戏,还是退出游戏玩家在哟西中可自行选择需要挑战的关口通过主菜单,在游戏开始后,可以选择播放或者禁止播放背景音乐。
默认为禁止播放在游戏菜单中,提供一个使用说明项,以方便对本游戏不了解的玩家对游戏进行操作和使用1)顶层数据流图2)0层数据流图3)1层数据流图2.5.系统状态转换图2.6.数据字典3.4.1 外部实体。
推箱子游戏设计报告书
![推箱子游戏设计报告书](https://img.taocdn.com/s3/m/aa9ee336f111f18583d05a2c.png)
推箱子游戏设计报告书需求介绍:推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带这种游戏。
它既能锻炼思维的严密性,又有很多乐趣。
本设计将用C语言实现一个简单的推箱子游戏,旨在阐述推箱子游戏的实现方法。
设计目的:本设计旨在训练开发者的基本编程技巧,其中涉及软中断、二维数组、键盘操作及图形化函数等方面的知识。
通过本设计的训练,开发者能基本掌握显示器中断寄存器的设置、二维数组及结构体的定义、键盘上键值的获取、图形方式下光标的显示和定位,以及部分图形函数的使用。
功能描述:本游戏共有4关,由易到难,每一关都有初始化、按键处理、重置及退出功能。
(1)初始化包括屏幕初始化和每一关关卡的初始化,屏幕被初始化宽80列,高25行。
(2)按键处理包括移动小人和移动箱子,通过移动上下左右键控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为通关。
(3)每一关都可以重置,按空格键可以重置当前关。
(4)按ESC键可以在任何时候退出游戏。
总体设计:1.功能模块设计(1)系统模块图本设计包括5个模块,分别是初始化模块、图画模块、移动箱子模块、移动小人模块和功能控制模块,如图1所示。
各个模块的功能描述如下。
1)初始化模块该模块包括屏幕初始化和游戏每一关的初始化。
屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。
2)图画模块。
该模块主要是被其他模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。
3)移动箱子模块该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。
4)移动小人模块该模块用于控制小人移动,从而推动箱子到目的地。
5)功能控制模块该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。
图1 系统模块图(2)任务执行流程图游戏从第一任务开始(第一关),按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。
推箱子实验报告
![推箱子实验报告](https://img.taocdn.com/s3/m/d7757a2f1fd9ad51f01dc281e53a580216fc50dd.png)
引言概述推箱子是一种常见的游戏,也是计算机算法和研究中的经典问题,它涉及的算法和方法有助于提高问题解决能力和逻辑思维能力。
本文将对推箱子实验进行详细分析和讨论,包括推箱子游戏的定义、规则和目标,以及解决推箱子难题的算法和策略。
正文内容1.推箱子游戏的定义、规则和目标1.1定义:推箱子是一种益智类游戏,玩家需要将箱子推到指定位置,才能过关。
1.2规则:玩家通过控制一个游戏角色,推动箱子向指定位置移动,但箱子无法直接移动至目标位置。
1.3目标:玩家需要以最少的移动步数将所有箱子推至目标位置,即完成关卡。
2.解决推箱子难题的算法和策略2.1盲目搜索算法2.1.1深度优先搜索算法:从初始状态开始,一直沿着一个方向推动箱子,直到遇到障碍物为止。
2.1.2广度优先搜索算法:在每一步中,尝试所有可能的移动方向,并记录每个状态的移动路径,直到找到解决方案。
2.1.3双向搜索算法:从初始位置和目标位置同时开始搜索,直到两个搜索路径相交为止。
2.2启发式搜索算法2.2.1A算法:根据启发函数估计当前状态到目标状态的距离,选择距离最小的下一步移动方向。
2.2.2剪枝算法:通过预判某些状态的不可行性,提前排除无需尝试的移动方向。
2.2.3贪心算法:每次选择距离目标位置最近的箱子进行推动,以减少总体移动步数。
2.3知识表示与推理2.3.1逻辑推理:使用逻辑规则和推理算法进行箱子和角色的位置推理。
2.3.2状态空间搜索:将推箱子问题转化为状态空间搜索问题,通过搜索解空间来获得解法。
2.3.3约束满足问题:将箱子移动约束转化为约束满足问题,使用约束满足算法找到解决方案。
2.4强化学习方法2.4.1Q学习:使用状态动作奖励状态的马尔可夫决策过程进行学习和决策的强化学习方法。
2.4.2深度强化学习:基于深度神经网络的强化学习方法,通过大量样本数据进行模型训练和优化。
2.4.3遗传算法:通过基因编码和演化算子的操作,寻找最优的解决方案。
C语言课程设计之推箱子游戏报告
![C语言课程设计之推箱子游戏报告](https://img.taocdn.com/s3/m/a9bc6961168884868762d6bb.png)
山东交通学院C语言课程设计推箱子游戏院(系)别信息科学与电气工程学院班级电气115学号1108152528姓名董雪指导教师王成时间2012-09-3—2012-09-7课程设计任务书题目推箱子系(部)信息科学与电气工程学院专业电气工程及其自动化班级电气115班学生姓名董雪学号11081252809月03日至09月07日共1周指导教师(签字)系主任(签字)年月日一、设计内容及要求:(1)箱子只能推动而不能拉动。
一次只能推动一个箱子。
(2)在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况。
(3)本游戏的目的就是把所有的箱子都推到目标位置上。
(4)此游戏目的是在训练你的逻辑思考能力。
二、设计原始资料:本游戏的目的就是把所有的箱子都推到目标位置上。
箱子只能推动而不能拉动。
一次只能推动一个箱子。
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道!三、设计完成后提交的文件1.计算说明书部分假设数字0代表墙壁,数字1代表路,数字2代表空位,可使地图看起来规则,数字3代表箱子,数字4代表人。
那么人移动到路上时数字值的变化为:4;人移到空位上时其位置的数值变化为:4+2=6;箱子移动到路上时数值的变化为:3;箱子移动到空位上时数值的变化为:3+2=5;再就是每一次的移动都必须根据实际情况,来改动原位置和移动位置的数值,还原出地图原样模型。
四、进程安排第一天:分析问题,找出大体的设计思路。
第二天:构造出程序大体框架,即各种功能模块的组合。
第三天:分别写出个功能模块程序的源代码。
第四天:讲个功能模块加入主程序中,并实现所有的程序基本功能。
第五天:优化程序中的不足之处,优化显示界面,添加辅助功能模块增加程序的趣味性。
使程序软件更加适宜用户的操作和娱乐需要,准备程序答辩。
推箱子游戏-详细设计
![推箱子游戏-详细设计](https://img.taocdn.com/s3/m/9bacd50916fc700abb68fca7.png)
详细设计报告报告名称:推箱子详细设计报告组长座号:3120306205组长姓名:林艺芬组员的座号及姓名:3120306202-林丽萍3120306219-陈飞滨目录一实验目的 (3)二实验步骤 (3)三实验报告内容 (3)1 概述 (3)1.1 修正之后的软件结构图、关系模型 (3)1.2 用程序流程图或盒图或PAD图详细描述每个功能 (4)1.3 详细设计数据库中的存储过程、触发器、视图等 (4)一实验目的–熟悉系统详细设计的相关内容–将结构图中的每个功能用程序流程图或盒图或PAD图描述详细设计二实验步骤- 修正软件结构图和关系模型- 对结构图中每一个模块进行详细设计,用合适图形工具表达三实验报告内容1 概述1.1 修正之后的软件结构图、关系模型软件结构图关系模型1.2 用程序流程图或盒图或PAD 图详细描述每个功能 初始化数据登录游戏推箱子过关成功更新分数过关失败游戏结束键盘操作移动到指定位置变色载入新地图1.3 详细设计数据库中的存储过程、触发器、视图等视图(游戏排行榜)create view rinksas select Username,Usercourse,dengjiname,rank() as 排名 from T_users,T_ranks order byUsercourse desc top 10触发器(更新用户分数)create trigger tr1 on T_userfor updateasif update(usercourse)beginupdate T_usersset usercourse=ercoursefrom T_users,Deleted d ,Inserted i where T_erID=erID end存储过程(排名)create proc courses@UserdengjiID char(20),@Usercourse char(20)asbeginif @usercourse/2500>=1 UserdengjiID=5if @usercourse/2000>=1 UserdengjiID=4if @usercourse/1500>=1 UserdengjiID=3if @usercourse/1000>=1 UserdengjiID=2if @usercourse/500>=1 UserdengjiID=1End。
推箱子程序设计与报告
![推箱子程序设计与报告](https://img.taocdn.com/s3/m/38ee64be59eef8c75ebfb335.png)
程序设计与实验报告设计内容:推箱子姓名:黄庭班级:电信1101学号:23目录一.引言二.需求分析与系统设计三.开发技术四.程序中的主要模块五. 心得体会六. 程序全文一.引言在实际编写程序的过程中,产生的一些疑惑与不解,在同学和老师的帮助下圆满解决,对于老师和同学们的帮助,在此我表示衷心的感谢。
因为一开始构架的问题造成了一些功能的不能实现。
经多方努力仍不能解决,留下遗憾,希望随着日后能力的提高能解决今天留下的问题。
二.需求分析与系统设计设计目的通过本学期对游戏程序的研究,我们掌握了运用win32来制作游戏的技术,虽然不娴熟还有待提高,但是一些技术含量较低的小游戏还是很容易让我们掌握的。
此次游戏程序设计的目的,主要是通过win32来制作游戏来更好的掌握编程语言。
通过win32这个平台,熟习在制作游戏方面所需要的技巧,将自己的游戏尽可能多的运用所学到的技术,并且将在课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。
每一次的课程设计,都是一次小小的软件工程,所以需要我们用百分百认真的态度来对待。
对于小一点的程序,我们一个人足以应付,但是这并不是说我们可以单独一个人为所欲为,其实质应该是通过课程设计来培养自己独立自主的能力。
而对于那些相对于麻烦的程序,便需要我们的协作,这样对我们以后进入企业公司发展打下了更多的基础。
设计要求这次课程设计的要求并不像以往那么紧,老师让给了我们充足的时间来制作游戏,虽然是计划做一款较为大众的经典游戏,并且能力有限,但还是对游戏做出了较高的期望,对于功能做出了较多的设想。
例如,背景音乐的播放,时间的显示,自动切换关卡,难度的选择等。
界面设计图进入后的主界面图素材图片集合这个程序是一个益智类的游戏,是一个单机游戏,人物通过推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家进行游戏。
图英雄榜图关于游戏图选择关卡截图游戏流程系统流程图:游戏开始选择关卡进行游戏完成游戏自动切换下一关结束游戏游戏开局出现如图1,然后进行难度的选择,再是关卡的选择,然后就可以游戏了,游戏完成之后会自动切换下一关,游戏者可手动选择结束游戏。
推箱子程序设计实训报告
![推箱子程序设计实训报告](https://img.taocdn.com/s3/m/9dd6c85678563c1ec5da50e2524de518964bd398.png)
一、实训背景与目的随着计算机技术的发展,程序设计已成为计算机科学与技术专业学生必须掌握的核心技能之一。
为了提高学生的编程能力、逻辑思维能力和团队协作能力,我们选择了“推箱子”游戏作为程序设计实训的项目。
推箱子游戏是一款经典的益智游戏,玩家需要通过控制角色将箱子推到指定位置,游戏中包含多种障碍和复杂路径,对玩家的策略思维和操作技巧提出了挑战。
本次实训旨在通过设计和实现推箱子游戏,让学生掌握以下技能:1. 熟悉C语言编程环境,掌握基本的语法和编程技巧。
2. 理解数据结构和算法在游戏设计中的应用。
3. 学会使用图形库进行游戏界面设计。
4. 提高团队协作能力和沟通能力。
二、实训内容本次实训分为以下几个阶段:1. 需求分析:明确游戏的目标、规则和功能,确定游戏界面和交互方式。
2. 系统设计:设计游戏的数据结构、算法和流程图。
3. 编码实现:使用C语言编写游戏代码,实现游戏功能。
4. 测试与调试:对游戏进行测试,修复bug,优化性能。
5. 文档编写:撰写实训报告,总结实训过程和经验。
三、系统设计1. 数据结构:游戏使用二维数组存储地图信息,包括墙壁、箱子、目标点、玩家位置等。
同时,使用结构体存储玩家的状态,包括位置、方向、速度等。
2. 算法:游戏采用穷举法寻找最短路径,将玩家的移动方向和箱子移动方向进行组合,遍历所有可能的移动方案,找到最短路径。
3. 流程图:游戏流程包括初始化、游戏循环、输入处理、移动计算、碰撞检测、界面绘制等。
四、编码实现1. 初始化:读取地图数据,初始化玩家、箱子、目标点等状态。
2. 游戏循环:不断检测玩家的输入,根据输入更新玩家的状态,计算箱子移动方向,进行碰撞检测和地图更新。
3. 输入处理:监听键盘输入,根据输入更新玩家的移动方向。
4. 移动计算:根据玩家的移动方向计算箱子移动方向,更新箱子和玩家的位置。
5. 碰撞检测:检测玩家和箱子是否与墙壁、其他箱子或目标点发生碰撞,根据碰撞结果调整移动方向或停止移动。
推箱子总体设计报告
![推箱子总体设计报告](https://img.taocdn.com/s3/m/6ed3519a250c844769eae009581b6bd97e19bc51.png)
推箱子总体设计报告1. 引言推箱子是一款经典的益智游戏,玩家需要将箱子推动到指定位置,完成关卡。
本报告旨在介绍推箱子游戏的总体设计方案,包括游戏的目标、规则、界面设计、关卡设计等内容,以及相关技术实现细节。
2. 游戏目标和规则2.1 游戏目标玩家需要将游戏中的箱子推动到指定的目标位置,完成关卡。
2.2 游戏规则玩家可以通过上、下、左、右四个方向键来移动人物角色,人物可以推动箱子,但只能推动未被阻挡的箱子。
箱子只能被推动,而不能被拉动或跳过。
当所有的箱子都被成功推到目标位置时,玩家即可通关。
2.3 关卡设计每个关卡都由地图、箱子、人物角色和目标位置组成。
地图由固定大小的方格组成,每个方格可以是墙壁(无法通过)、地面(可通行)或目标位置(箱子需要推到的位置)。
每个关卡的地图和目标位置安排都会有所不同,以增加游戏的难度和挑战性。
3. 游戏界面设计3.1 主界面游戏主界面包括开始游戏、选择关卡、查看帮助和退出游戏等功能按钮。
在选择关卡界面,玩家可以根据自己的游戏进度选择已通关的关卡或未解锁的关卡。
3.2 游戏界面游戏界面会显示当前关卡的地图、箱子、人物角色和目标位置。
玩家可以通过方向键来控制人物角色移动。
游戏界面还会显示当前关卡的时间计时器和步数计数器,以提供用户对游戏进度的实时反馈。
4. 技术实现细节4.1 程序架构推箱子游戏的程序可以采用面向对象的架构,将地图、人物、箱子等游戏元素抽象为对象。
同时,可以采用MVC(模型-视图-控制器)设计模式,将游戏逻辑和界面显示分离,提高代码的可维护性和可扩展性。
4.2 地图生成地图可以通过读取关卡配置文件进行生成。
配置文件可以使用文本格式,通过字符来表示地图的不同元素,例如墙壁用""表示,地面用"."表示,目标位置用"O"表示。
通过解析配置文件,程序可以动态生成关卡地图。
4.3 碰撞检测碰撞检测是实现人物和箱子移动的关键技术。
推箱子_Java课程设计报告书
![推箱子_Java课程设计报告书](https://img.taocdn.com/s3/m/43866f937f1922791688e8e2.png)
《面向对象程序设计》课程设计报告题目:经典推箱子趣味游戏设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生:程伟学号: 20121183011指导教师:吴奕20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (1)1.1需求分析 (1)1.2总体设计 (2)2详细设计 (4)2.1 mainFrame类 (4)2.2 mainpanel类 (5)2.3S o u n d类 (7)2.4 Readmap类 (7)3 编码实现 (9)3.1游戏源码 (9)4系统测试 (42)总结 (45)1需求与总体设计1.1需求分析1.1.1功能结构图推箱子游戏的功能结构图如图1.1所示。
在系统中,编写4个Java类:mainFrame,mainpanel,Sound,Readmap;分别对应初始化游戏界面,游戏操作,背景音乐,绘制地图。
图1.11.1.2 UML类图推箱子系统除了上述4个Java类外,还需要Java系统提供的一些重要的类。
这些类之间的UML图如图1.2所示。
图1.21.2总体设计1.2.1 mainFrame类mainFrame类负责创建系统的主窗口。
mainFrame类有多种重要类型的对象,这些对象构成了游戏界面的简明与美观,并且通过监听实现方法赋予了这些组件的相应功能。
MainFrame类通过调用Readmap类来实现将地图绘制在游戏主界面,通过调用Sound 类来实现对背景音乐的管理,实现音乐开关以及选择上一曲下一曲的操作。
设计中包括了所有你所能直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单,使得玩家能够很直观的见到所有游戏中的功能.界面中有菜单, 包括:"选项""设置音乐""帮助"。
按钮包括:"重来""悔一步""第一关""上一关""下一关""最终关""选关""音乐"等。
推箱子实验报告
![推箱子实验报告](https://img.taocdn.com/s3/m/70c20231f342336c1eb91a37f111f18582d00c7d.png)
推箱子实验报告推箱子实验报告引言:推箱子是一种经典的益智游戏,通过移动箱子将它们推到指定位置,是一项考验智力和策略的活动。
本次实验旨在通过推箱子游戏,探讨人类思维的规律和策略,并分析不同因素对游戏结果的影响。
实验方法:本次实验采用了电脑版推箱子游戏,共设置了10个关卡。
每个关卡都有不同的地图布局和箱子数量,参与者需要通过键盘控制人物移动,将所有箱子推到指定的目标位置。
实验过程中记录了每个参与者完成每个关卡所用时间,并进行了数据统计和分析。
实验结果:通过对实验数据的统计和分析,我们发现参与者在不同关卡中的表现存在明显差异。
在较简单的关卡中,参与者往往能够快速找到解决方案,并在较短的时间内完成任务。
然而,在难度较高的关卡中,参与者往往需要花费更多的时间来思考和尝试不同的策略。
这表明推箱子游戏的难度与参与者的思维能力和策略选择密切相关。
进一步分析发现,参与者在解决问题时往往会采用一定的规律和策略。
例如,他们倾向于先将箱子推向墙壁或角落,以便在后续的移动中有更多的空间和选择。
此外,参与者还会尝试不同的路径和移动顺序,以找到最佳的解决方案。
这些策略的使用表明了人类思维的灵活性和创造性。
讨论:推箱子游戏作为一种益智游戏,不仅能够锻炼参与者的思维能力和逻辑思维,还能够培养他们的耐心和坚持不懈的精神。
通过实验,我们不仅可以了解人类思维的规律和策略,还可以为教育和培训领域提供一些启示。
首先,推箱子游戏可以被应用于教育中,帮助学生培养解决问题的能力和创造性思维。
通过让学生参与推箱子游戏,他们可以在游戏中体验到思维的乐趣,学会分析问题、制定策略,并在尝试中不断提高自己的能力。
其次,推箱子游戏还可以被应用于团队建设和合作学习中。
在推箱子游戏中,参与者需要与其他队员密切合作,共同制定策略和解决问题。
这种合作学习的方式可以培养学生的团队合作精神和沟通能力,提高他们的协作能力。
结论:通过本次推箱子实验,我们深入了解了人类思维的规律和策略,并发现了推箱子游戏在教育和培训中的潜力。
【2018-2019】推箱子实验报告-精选word文档 (8页)
![【2018-2019】推箱子实验报告-精选word文档 (8页)](https://img.taocdn.com/s3/m/e9141319eefdc8d376ee3258.png)
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==推箱子实验报告篇一:推箱子实验报告青岛大学软件技术学院游戏制作实践实训题目名称推箱子游戏姓名丁帅帅专业数字媒体艺术班级 3班指导教师解新峰201X 年 1 月 16 日目录1 引言 .................................................................. . (3)1.1选题目的 (3)1.2项目目标 ............................................................. 3 2推箱子系统概述 (4)2.1系统总体设计 ......................................................... 4 2.2系统功能模块规划 .....................................................4 2.3系统功能结构图 ....................................................... 4 3推箱子系统的详细设计 ................. (5)3.1程序中自定义类说明 ................................................... 5 3.2程序中主要方法说明 (5)3.2.1界面框架与按钮设计 (5)3.2.2地图的绘制形成 .................................................5 3.2.3推箱子游戏的游戏性 ............................................. 6 3.2.4小人与箱子移动的算法 ........................................... 6 3.2.5栈的应用 (6)4 推箱子系统的实现和运行 (7)4.1运行结果 ............................................................. 7 小结 .................................................................. ..... 9 参考文献 .................................................................. .. 91 引言1.1选题目的随着科学技术的发展,人们的生活水平越来越繁忙,在充满竞争的社会条件下,压力往往带给人们很多烦恼,所以合理的解压方式称为现代人的共同心愿。
推箱子实验报告
![推箱子实验报告](https://img.taocdn.com/s3/m/f6ea64ba7e21af45b207a87a.png)
推箱子实验报告青岛大学软件技术学院游戏制作实践实训题目名称推箱子游戏姓名丁帅帅专业数字媒体艺术班级 3班指导教师解新峰1 引言1.1选题目的随着科学技术的发展,人们的生活水平越来越繁忙,在充满竞争的社会条件下,压力往往带给人们很多烦恼,所以合理的解压方式称为现代人的共同心愿。
为了给大家提供一个合理的解压平台, 我们在本次课程设计中为大家开发了一款适合休闲娱乐的小游戏, 本次课程设计是配合JAVA 程序设计课程,深入学习掌握JAVA 语言,熟练运用Java 工具对系统的编写。
通过课程设计各个项目的综合训练,培养学生实际分析问题,编程和动手能力,提高学生的综合素质。
1.2项目目标本设计要求采用java语言编程,java中的类和封装特性,实现游戏中控制游戏中的人物行走推移箱子,选关,选音乐等游戏的基本功能。
对该游戏系统功能模块进行详细分析,写出详细设计说明文档,编写程序代码。
调试程序使其能正确运行。
2推箱子系统概述2.1系统总体设计在此游戏中本着娱乐为目的,游戏者不仅可以在玩游戏还可以享受音乐,游戏界面简单,操作容易,在玩游戏的同时还可以锻炼大家的反应速度及灵敏程度,在游戏中设置关数,级别由低到高,一关比一关难,提高大家的兴趣,玩家可以自由的选关,并设置了分数的存储系统。
系统中又增加了音乐的设置可以让玩家享受音乐。
通过对小人移动箱子是否到达墙边进行判断决定胜负及是否可以进入下一关。
2.2系统功能模块规划在该系统中总共划分了五个模块(1)初始化模块,对游戏界面进行初始化操作,对各个按钮的功能进行操作使之当动作发生时有一定的反应及相应。
(2)画图模块,主要是对地图的绘制进行画图的操作,在此游戏中不同的数字代表不同的含义。
(3)移动箱子模块,在推箱子游戏中最主要的模块,用户可以移动箱子到界面中的各个地方,以完成游戏设定的任务。
(4)移动小人模块,同过对小人的操作使之小人能够操作木块到各个位置。
(5)功能控制模块,通过对此功能的设置,可以对游戏的功能进行设置,可以设置背景音乐,及通过的关数进行一些必要的设定。
推箱子游戏实践报告
![推箱子游戏实践报告](https://img.taocdn.com/s3/m/c7f9b10416fc700abb68fccf.png)
推箱子游戏设计实践报告一、游戏介绍在一定的范围里,要求人把木箱从开始位置推放到指定的位置。
由于箱子只能推不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
该游戏一共有三道关卡,按下F1和F2可以切换关卡,并且通过移动上下左右键来控制小人的移动,从而推动箱子。
当人把箱子全部推到指定的目的地时过关。
附图:二、设计思想程序关键的地方有两部分,一是加载地图,二是用方向键控人的移动。
画地图主要由两个函数来实现,首先用加载位图函数来画出单个图片,然后再用调用加载位图的函数来画出整体的地图。
用方向键控制人的移动时,要注意全面地考虑到各方面的问题,需要详细的分析各种情况。
三、游戏的部分实现(1)加载地图部分程序void drawmap(HWND hWnd,int map[][8])//画地图函数{ HDC hdc;hdc = GetDC(hWnd);RECT rt;GetClientRect(hWnd, &rt);for(int y=0; y<8; y++){ for(int x=0; x<8; x++){switch(mapIndex[y][x]){case 2:drawImage(hdc, "aim.bmp", x * 48,y* 48,48,48);break;case 1:drawImage(hdc,"ground.bmp", x * 48,y* 48,48,48);break;case 0:drawImage(hdc, "wall.bmp", x* 48,y* 48,48,48);break;case 4:drawImage(hdc, "man.bmp", x* 48,y* 48,48,48);break;case 6:case 3:drawImage(hdc, "box.bmp", x* 48,y* 48,48,48);break;}}}ReleaseDC(hWnd, hdc)}voiddrawImage( HDC hdc, char * fileName, int x, int y , int w, int h){HDC srcdc = CreateCompatibleDC(hdc);HBITMAP hbmp = (HBITMAP)LoadImage(NULL, fileName,IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);SelectObject(srcdc, hbmp);BitBlt(hdc, x,y, w,h, srcdc, 0,0, SRCCOPY );DeleteObject(hbmp);DeleteDC(srcdc);}(2)方向键移动部分程序voidkeydown_down(HWND hWnd){switch (mapIndex[humans.y+1][humans.x]){case 0:break;case 1:case 2:humans.y+=1;break;case 3://人的下面为箱子switch (mapIndex[humans.y+2][humans.x]){case 0:case 6:case 3:break;case 1:MoveResult();mapIndex[humans.y+2][humans.x]=3;mapIndex[humans.y+1][humans.x]=1;humans.y+=1;break;case 2:MoveResult();mapIndex[humans.y+2][humans.x]=6;mapIndex[humans.y+1][humans.x]=1;humans.y+=1;break;}break;case 6://箱子在目标上switch (mapIndex[humans.y+2][humans.x]){case 0:break;case 6:break;case 3:break;case 1:MoveResult();mapIndex[humans.y+2][humans.x]=3;mapIndex[humans.y+1][humans.x]=2;humans.y+=1;break;case 2:MoveResult();mapIndex[humans.y+2][humans.x]=6;mapIndex[humans.y+1][humans.x]=2;humans.y+=1;break;}break;}}voidMoveResult(){if(mapIndex[humans.y][humans.x]!=2) {mapIndex[humans.y][humans.x]=1;}else if(mapIndex[humans.y][humans.x]==2){mapIndex[humans.y][humans.x]=2;} }四、测试结果五、设计心得体会在设计这个程序中我主要学会了如何运用以下有关C语言的知识1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
推箱子游戏设计报告书一、项目背景本实训要求对“推箱子游戏”进行分析、设计。
本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使专业技能得到综合训练,让我们了解软件开发基本技术和工作过程。
同时,本实训中了解图形界面设计基本技术。
通过本系统的开发,要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。
二、设计目的本课程的课程设计实际是重在提升学生对程序的理解力和游戏界面的设计能力,进行的一次全面的综合训练,其目的在于加深动手能力以及对游戏设计思想的理解,掌握运用VB 开发应用程序的基本方法及基本技巧。
三、游戏介绍本游戏设计了关卡设计器对有难度进行设计,同时用方向键↑↓←→控制小人的移动,空格重新开始,回车选择下一关,page up 上一关,page down 下一关,Esc 退回。
小人移动来推箱子使箱子到达指定位置,如果箱子全部到达指定位置就表示过关3.1界面设计3.1.1界面设计原则:1用户帮助2向导3快捷键4鼠标与键盘对应5布局合理化6显示信息一致性7界面一致性8美观与协调性9合理性10规范性11易用性12一般交互13数据输入本游戏是一个简单游戏所以只涉及一些简单的界面设计原则.3.2用户界面又称人机界面,实现用户与计算机之间的通信,以控制计算机或进行用户与计算机之间的数据传送的系统部件。
GUI:即图形用户界面,一种可视化的用户界面,它使用图形界面代替正文界面。
本系统坚持图形用户界面(GUI)设计原则,界面直观、对用户透明。
用户接触软件后对界面上对应的功能一目了然、不需要多少培训就可以方便地使用本应用系统。
下面解释说明即为本游戏的简单标签设计3.3系统编码3.3.0编程设计原则:1、排版2、注释3、标识符命名4、可读性5、变量与结构6、函数与过程7、可测性8、程序效率9、质量保证10、代码编辑、编译与审查11、代码测试与维护由于本游戏是小游戏所以只需注重1、排版2、注释3、标识符命名4、可读性5、变量与结构6、函数与过程等方面就可以其余原则可忽略.3.3.1 API函数声明Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, _ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, _ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long3.3.2 全局常量Private Const MAXX As Integer = 20Private Const MAXY As Integer = 15Private Const SIZE As Integer = 302Private Const D_LEFT As Integer = 1Private Const D_RIGHT As Integer = 0Private Const D_UP As Integer = 2Private Const D_DOWN As Integer = 3Private Const B_GROUND As Integer = &H0Private Const B_DEST As Integer = &H1Private Const B_BOX As Integer = &H2Private Const B_WALL As Integer = &H4Private Const B_BACK As Integer = &H83.3.3全局变量Private Map(MAXX, MAXY) As IntegerPrivate ScenesCount As Integer, CurrScene As IntegerPrivate BoxCount As Integer, Completed As IntegerPrivate X As Integer, Y As Integer, Dir As IntegerPrivate FileNum As IntegerPrivate MapLoading As BooleanPrivate Playing As Boolean3.3.4 游戏开始//定义子函数,载入游戏.Private Sub Form_Load()Playing = FalseMapLoading = FalseInitGameEnd Sub3.3.5游戏初始化//FileNum代表工作区号,用FreeFile函数返回,载入游戏. 返回工作区文件尾号除以size Private Sub InitGame()FileNum = FreeFileOpen "Map.dat" For Binary Access Read As FileNumScenesCount = LOF(FileNum) / SIZEIf ScenesCount = 0 ThenMsgBox "没有可用的地图文件或文件格式出错," & vbCrLf & _ "请把可用的 Map.dat 文件和游戏放在同一目录。
", _vbOKOnly Or vbExclamation, "文件读取错误"EndEnd IfLoadMap 1Playing = TrueEnd Sub3.3.6读取关卡数据//调用函数定义坐标,对空间位置操作读出Data数据Private Function LoadMap(Scene As Integer) As BooleanIf MapLoading Then Exit FunctionIf Scene < 1 Or Scene > ScenesCount ThenLoadMap = FalseExit FunctionEnd IfMapLoading = TrueCurrScene = SceneCaption = "推箱子第" & CurrScene & "关"BoxCount = 0: Completed = 0Dir = 0Dim Data As ByteGet FileNum, (CurrScene - 1) * SIZE + 1, DataX = DataGet FileNum, , DataY = DataDim i As Long, j As LongFor i = 0 To MAXY - 1For j = 0 To MAXX - 1Get FileNum, , DataMap(j, i) = DataIf Map(j, i) And B_DEST Then BoxCount = BoxCount + 1NextNextDrawMapLoadMap = TrueMapLoading = FalseEnd Function3.3.7选择关卡//LoadMap调用子过程函数Private Sub SelectMap()Dim Temp As IntegerTemp = Val(InputBox("请输入关数(1~" & Trim(ScenesCount) & ")", "选择一关", 1))If Temp >= 1 And Temp <= ScenesCount Then CurrScene = TempLoadMap TempEnd Sub3.3.8显示整个游戏画面//画出游戏界面利用坐标Private Sub DrawMap()Dim i As Long, j As LongFor i = 0 To MAXY - 1For j = 0 To MAXX - 1DrawBox j, i, Map(j, i)NextNextDrawMan X, YpicMain.RefreshEnd Sub3.3.9显示背景块(包括地面、墙、箱子等)//多分支语句显示背景Private Sub DrawBox(ByVal X As Integer, ByVal Y As Integer, ByVal BoxType As Integer) Dim Offset As IntegerSelect Case BoxTypeCase B_BACKOffset = 0Case B_GROUNDOffset = 1Case B_DESTOffset = 2Case B_BOXOffset = 3Case B_WALLOffset = 4End SelectBitBlt picMain.hDC, X * 32, Y * 32, 32, 32, picBoxs.hDC, Offset * 32, 0, vbSrcCopy End Sub3.3.10显示小人Private Sub DrawMan(ByVal X As Integer, ByVal Y As Integer)BitBlt picMain.hDC, X * 32, Y * 32, 32, 32, picMan.hDC, Dir * 32, 32, vbSrcAnd BitBlt picMain.hDC, X * 32, Y * 32, 32, 32, picMan.hDC, Dir * 32, 0, vbSrcPaint End Sub3.3.11游戏操作(按键处理)Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If Not Playing Then Exit SubSelect Case KeyCodeCase 37ManMove -1, 0Case 38ManMove 0, -1Case 39ManMove 1, 0Case 40ManMove 0, 1Case 32LoadMap CurrSceneCase 33LoadMap CurrScene - 1Case 34LoadMap CurrScene + 1Case 13SelectMapCase 27Unload MeEnd SelectEnd Sub3.3.12游戏结束Private Sub Form_Unload(Cancel As Integer)CloseEndEnd Sub3.3.13小人移动Private Sub ManMove(OffsetX As Integer, OffsetY As Integer)Dim DestX As Integer, DestY As IntegerIf OffsetY = -1 ThenDir = D_UPElseIf OffsetY = 1 ThenDir = D_DOWNElseIf OffsetX = -1 ThenDir = D_LEFTElseDir = D_RIGHTEnd IfDestX = X + OffsetX: DestY = Y + OffsetYIf DestX < 0 Or DestX >= MAXX Or DestY < 0 Or DestY >= MAXY Then Exit Sub If Map(DestX, DestY) And B_WALL Or Map(DestX, DestY) And B_BACK Then Exit Sub If Map(DestX, DestY) And B_BOX ThenPush DestX, DestY, OffsetX, OffsetYElseDrawMan DestX, DestYDrawBox X, Y, Map(X, Y)X = DestX: Y = DestYpicMain.RefreshEnd IfEnd Sub3.3.14推动箱子Private Sub Push(SourceX As Integer, SourceY As Integer, OffsetX As Integer, OffsetY As Integer)Dim DestX As Integer, DestY As IntegerDestX = SourceX + OffsetX: DestY = SourceY + OffsetYIf DestX < 0 Or DestX >= MAXX Or DestY < 0 Or DestY >= MAXY Then Exit Sub If Map(DestX, DestY) And B_WALL Or Map(DestX, DestY) And B_BACK Or _Map(DestX, DestY) And B_BOX Then Exit SubMap(SourceX, SourceY) = Map(SourceX, SourceY) - B_BOXMap(DestX, DestY) = Map(DestX, DestY) + B_BOXDrawBox DestX, DestY, B_BOXDrawBox SourceX, SourceY, Map(SourceX, SourceY)DrawMan SourceX, SourceYDrawBox X, Y, Map(X, Y)X = SourceX: Y = SourceYpicMain.RefreshIf Map(SourceX, SourceY) And B_DEST Then Completed = Completed - 1If Map(DestX, DestY) And B_DEST Then Completed = Completed + 1If Completed = BoxCount Then WinEnd Sub3.3.15过关处理Private Sub Win()If MsgBox("你太聪明了!要继续玩下一关吗?", vbYesNo, "过关!") = vbNo Then Unload MeEnd IfIf Not LoadMap(CurrScene + 1) ThenIf MsgBox("你已经过了最后一关!还要继续吗?", vbYesNo, "真厉害!") = vbYesThenLoadMap CurrSceneElseUnload MeEnd IfEnd IfEnd Sub四、实训总结经过这两星期的培训是我获益良多,我的实训内容是理解游戏——推箱子。