推箱子游戏详细设计报告
推箱子问题的设计与实现
《推箱子问题的设计与实现》实验报告班级:计本四班学号: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);}}}四、总结通过对推箱子游戏的编程和设计,进一步巩固了数据结构和算法设计与分析所学的知识,在查阅了有关推箱子游戏问题编程的相关知识的同时,也进一步了解了结构体之间的密切关系,并加深和巩固了函数调用的方法和技巧。
推箱子C语言程序报告
推箱子C语言程序报告推箱子是一种极富智慧和策略性的游戏,是著名的益智游戏之一、它不仅可以锻炼人们的逻辑思维能力和创造力,而且还能提高人们的解决问题的能力和耐心。
本篇报告将介绍一个基于C语言开发的推箱子游戏,包括游戏规则、程序设计思路和实现效果等方面的内容。
一、游戏规则推箱子游戏的规则十分简单,玩家需要操作一个小人将该场景中的木箱全部推到指定位置。
在游戏开始时,场景中会放置一定数量的木箱和一个小人。
玩家可以通过键盘输入上下左右四个方向键来移动小人,小人可以推动场景中的木箱,但不能直接拉动或推动多个箱子。
当所有的木箱都被推到指定位置时,游戏胜利,反之则失败。
二、程序设计思路推箱子游戏的实现涉及到场景的渲染、小人和木箱的移动、游戏的逻辑判断等多个方面。
下面将分别介绍这些方面的程序设计思路。
1.场景渲染2.小人和木箱的移动玩家操作小人的移动,可以通过监听键盘输入的方向键来实现。
根据输入的方向,判断小人与目标位置的关系,如果目标位置是空地或者指定位置,则小人可以移动到目标位置,否则不能移动。
当小人移动后,如果目标位置是木箱,则需要判断木箱与目标位置的关系,如果目标位置是空地或者指定位置,则木箱可以被推动到目标位置,否则不能推动。
3.游戏逻辑判断在每一次小人移动后,需要判断游戏是否胜利或失败。
胜利的条件是所有的木箱都被推到指定位置,判断的方法是在遍历整个场景时,检查是否存在未推到指定位置的木箱。
失败的条件是小人无法再移动,判断的方法是在判断小人是否能够移动时,如果没有可移动的方向,则游戏失败。
三、实现效果通过以上的程序设计思路,可以开发出一个基于C语言的推箱子游戏。
该游戏可以提供丰富的关卡和难度选择,让玩家能够不断挑战和提高自己的智力。
游戏的界面简洁明了,操作方便快捷,给玩家带来舒适的游戏体验。
总结:推箱子是一种极富智慧的益智游戏,本篇报告介绍了一个基于C语言开发的推箱子游戏。
通过对游戏规则、程序设计思路和实现效果的阐述,可以看出该游戏具有多样化的场景和难度选择,能够锻炼玩家的智力和思维能力。
推箱子项目实训报告
一、项目背景推箱子游戏是一款经典的益智游戏,起源于日本。
玩家需要在狭小的仓库中,通过移动人物,将箱子推到指定的位置。
这款游戏不仅考验玩家的逻辑思维和空间想象力,还锻炼玩家的耐心和策略。
为了提高自身的编程能力,我们选择推箱子游戏作为实训项目。
二、实训目的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推箱子是一款经典的益智游戏,我们本次设计的推箱子程序主要基于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. 结论本次推箱子程序的开发成功实现了一款经典益智游戏的主要功能,同时也提供了用户友好的交互界面。
推箱子游戏设计报告书
推箱子游戏设计报告书需求介绍:推箱子游戏是目前比较流行的游戏之一,很多操作系统或者流行软件都会带这种游戏。
它既能锻炼思维的严密性,又有很多乐趣。
本设计将用C语言实现一个简单的推箱子游戏,旨在阐述推箱子游戏的实现方法。
设计目的:本设计旨在训练开发者的基本编程技巧,其中涉及软中断、二维数组、键盘操作及图形化函数等方面的知识。
通过本设计的训练,开发者能基本掌握显示器中断寄存器的设置、二维数组及结构体的定义、键盘上键值的获取、图形方式下光标的显示和定位,以及部分图形函数的使用。
功能描述:本游戏共有4关,由易到难,每一关都有初始化、按键处理、重置及退出功能。
(1)初始化包括屏幕初始化和每一关关卡的初始化,屏幕被初始化宽80列,高25行。
(2)按键处理包括移动小人和移动箱子,通过移动上下左右键控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为通关。
(3)每一关都可以重置,按空格键可以重置当前关。
(4)按ESC键可以在任何时候退出游戏。
总体设计:1.功能模块设计(1)系统模块图本设计包括5个模块,分别是初始化模块、图画模块、移动箱子模块、移动小人模块和功能控制模块,如图1所示。
各个模块的功能描述如下。
1)初始化模块该模块包括屏幕初始化和游戏每一关的初始化。
屏幕初始化用于输出欢迎信息和操作提示,游戏每一关的初始化是构建每一关的关卡。
2)图画模块。
该模块主要是被其他模块调用,用于画墙、在空地画箱子、在目的地画箱子、画小人和画目的地。
3)移动箱子模块该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。
4)移动小人模块该模块用于控制小人移动,从而推动箱子到目的地。
5)功能控制模块该模块是几个功能函数的集合,包括屏幕输出功能、指定位置状态判断功能和关卡重置功能。
图1 系统模块图(2)任务执行流程图游戏从第一任务开始(第一关),按上下左右方向键控制小人移动来推动箱子,可以在游戏中的任何时候按Esc键退出。
推箱子实验报告
推箱子实验报告青岛大学软件技术学院游戏制作实践实训题目名称推箱子游戏姓名丁帅帅专业数字媒体艺术班级 3班指导教师解新峰1 引言1.1选题目的随着科学技术的发展,人们的生活水平越来越繁忙,在充满竞争的社会条件下,压力往往带给人们很多烦恼,所以合理的解压方式称为现代人的共同心愿。
为了给大家提供一个合理的解压平台, 我们在本次课程设计中为大家开发了一款适合休闲娱乐的小游戏, 本次课程设计是配合JAVA 程序设计课程,深入学习掌握JAVA 语言,熟练运用Java 工具对系统的编写。
通过课程设计各个项目的综合训练,培养学生实际分析问题,编程和动手能力,提高学生的综合素质。
1.2项目目标本设计要求采用java语言编程,java中的类和封装特性,实现游戏中控制游戏中的人物行走推移箱子,选关,选音乐等游戏的基本功能。
对该游戏系统功能模块进行详细分析,写出详细设计说明文档,编写程序代码。
调试程序使其能正确运行。
2推箱子系统概述2.1系统总体设计在此游戏中本着娱乐为目的,游戏者不仅可以在玩游戏还可以享受音乐,游戏界面简单,操作容易,在玩游戏的同时还可以锻炼大家的反应速度及灵敏程度,在游戏中设置关数,级别由低到高,一关比一关难,提高大家的兴趣,玩家可以自由的选关,并设置了分数的存储系统。
系统中又增加了音乐的设置可以让玩家享受音乐。
通过对小人移动箱子是否到达墙边进行判断决定胜负及是否可以进入下一关。
2.2系统功能模块规划在该系统中总共划分了五个模块(1)初始化模块,对游戏界面进行初始化操作,对各个按钮的功能进行操作使之当动作发生时有一定的反应及相应。
(2)画图模块,主要是对地图的绘制进行画图的操作,在此游戏中不同的数字代表不同的含义。
(3)移动箱子模块,在推箱子游戏中最主要的模块,用户可以移动箱子到界面中的各个地方,以完成游戏设定的任务。
(4)移动小人模块,同过对小人的操作使之小人能够操作木块到各个位置。
(5)功能控制模块,通过对此功能的设置,可以对游戏的功能进行设置,可以设置背景音乐,及通过的关数进行一些必要的设定。
推箱子实验报告
引言概述推箱子是一种常见的游戏,也是计算机算法和研究中的经典问题,它涉及的算法和方法有助于提高问题解决能力和逻辑思维能力。
本文将对推箱子实验进行详细分析和讨论,包括推箱子游戏的定义、规则和目标,以及解决推箱子难题的算法和策略。
正文内容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语言课程设计推箱子游戏院(系)别信息科学与电气工程学院班级电气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;再就是每一次的移动都必须根据实际情况,来改动原位置和移动位置的数值,还原出地图原样模型。
四、进程安排第一天:分析问题,找出大体的设计思路。
第二天:构造出程序大体框架,即各种功能模块的组合。
第三天:分别写出个功能模块程序的源代码。
第四天:讲个功能模块加入主程序中,并实现所有的程序基本功能。
第五天:优化程序中的不足之处,优化显示界面,添加辅助功能模块增加程序的趣味性。
使程序软件更加适宜用户的操作和娱乐需要,准备程序答辩。
推箱子项目设计报告
推箱子项目设计报告1. 项目背景推箱子游戏是一种经典的益智游戏,玩家需要通过移动箱子将它们推到指定的位置,完成关卡。
这种游戏既能够开发玩家的空间思维和逻辑思维能力,又能够提升他们的耐心和毅力。
本项目旨在开发一款推箱子游戏,提供给用户进行娱乐。
2. 项目目标本项目的目标是设计并实现一款推箱子游戏,具体目标包括:1. 实现基本的推箱子游戏功能,包括角色移动、箱子推动、关卡设计等;2. 设计多个不同难度的关卡,供玩家挑战;3. 提供游戏分数计算和排行榜功能,让玩家可以比较自己在每个关卡的成绩。
3. 项目设计3.1 游戏界面设计游戏界面将采用图形化的方式呈现,使用2D画面。
界面主要由以下几部分组成:1. 游戏地图:用来展示当前关卡的地图布局。
2. 角色:用来表示玩家在地图上的位置。
3. 箱子:用来表示玩家需要推到指定位置的箱子。
4. 目标位置:用来表示箱子需要推到的目标位置。
3.2 关卡设计关卡将由固定的地图布局、起始位置、目标位置以及箱子位置组成。
地图布局采用二维数组的形式表示,每个元素表示一个地图块的类型,如墙、地板等。
通过设计多个不同的地图布局,可以实现多个不同难度的关卡。
3.3 角色移动玩家可以通过键盘或鼠标控制角色的移动。
在每个关卡中,玩家可以向上、下、左、右四个方向移动角色,并且判断是否能够移动。
如果角色前方有箱子,并且箱子的前方是可移动的地板,则玩家可以将角色和箱子一起移动。
3.4 箱子推动玩家可以将箱子向上、下、左、右四个方向推动。
在推动箱子之前,需要判断箱子前方是否是可移动的地板,以及是否有其他箱子或墙阻挡。
如果箱子的前方是可移动的地板,则可以进行推动。
3.5 游戏分数和排行榜每个关卡都会记录玩家完成关卡所用的时间和步数,根据时间和步数计算玩家的得分。
玩家可以查看自己在每个关卡的得分,并与其他玩家进行比较,以达到竞争和娱乐的目的。
4. 开发计划4.1 需求分析和设计阶段(1周)在这个阶段,我们将进行游戏需求分析,并进行游戏界面和核心功能的设计。
推箱子游戏-详细设计
详细设计报告报告名称:推箱子详细设计报告组长座号: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。
推箱子地图设计报告
推箱子地图设计报告1. 引言推箱子(Sokoban)是一款经典的益智游戏,具有简单的规则和有趣的挑战。
玩家需要在规定的移动次数内将所有的箱子推到目标位置,而不得堵住关键通道。
本报告旨在介绍推箱子地图设计的过程和实现。
2. 地图设计方法推箱子地图设计的目标是创建具有合理难度和挑战性的关卡。
以下是设计地图的一般步骤:2.1 确定地图尺寸和目标数首先确定地图的尺寸,通常以格子为单位。
然后根据游戏难度确定需要推到目标位置的箱子数量。
这个步骤可以根据实际情况进行调整。
2.2 设计地图背景地图背景包括墙壁、地板和目标位置。
墙壁的设置需要考虑通路和难度,不得过多或过少。
地板是箱子和角色可以移动的区域。
目标位置是箱子需要推到的目标格子。
2.3 箱子和角色的位置确定箱子和角色的初始位置。
这个过程需要考虑到地图的平衡性和挑战性。
箱子和角色的位置必须能够形成一个合理的初始状态,使得箱子能够推动到目标位置,但不得过于简单或过于复杂。
2.4 路径规划和优化确保地图中没有死路和无法达到目标位置的区域。
对于复杂的地图,路径规划和优化算法可以用来检查地图的合理性并提供最佳推箱子路径。
3. 推箱子地图设计实例以下是一个推箱子地图设计实例的步骤:3.1 地图尺寸和目标数假设我们选择一个10x10的地图,并设置3个目标位置。
3.2 地图背景我们在地图的四周设置墙壁,并将其余区域设为地板。
然后在地图中间随机设置3个目标位置。
............................................................................3.3 箱子和角色的位置我们将箱子和角色的位置设为以下初始状态:.....................................................@......XXX.........符号"@" 表示角色的初始位置,符号"X" 表示箱子的初始位置。
推箱子程序设计与报告
程序设计与实验报告设计内容:推箱子姓名:黄庭班级:电信1101学号:23目录一.引言二.需求分析与系统设计三.开发技术四.程序中的主要模块五. 心得体会六. 程序全文一.引言在实际编写程序的过程中,产生的一些疑惑与不解,在同学和老师的帮助下圆满解决,对于老师和同学们的帮助,在此我表示衷心的感谢。
因为一开始构架的问题造成了一些功能的不能实现。
经多方努力仍不能解决,留下遗憾,希望随着日后能力的提高能解决今天留下的问题。
二.需求分析与系统设计设计目的通过本学期对游戏程序的研究,我们掌握了运用win32来制作游戏的技术,虽然不娴熟还有待提高,但是一些技术含量较低的小游戏还是很容易让我们掌握的。
此次游戏程序设计的目的,主要是通过win32来制作游戏来更好的掌握编程语言。
通过win32这个平台,熟习在制作游戏方面所需要的技巧,将自己的游戏尽可能多的运用所学到的技术,并且将在课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。
每一次的课程设计,都是一次小小的软件工程,所以需要我们用百分百认真的态度来对待。
对于小一点的程序,我们一个人足以应付,但是这并不是说我们可以单独一个人为所欲为,其实质应该是通过课程设计来培养自己独立自主的能力。
而对于那些相对于麻烦的程序,便需要我们的协作,这样对我们以后进入企业公司发展打下了更多的基础。
设计要求这次课程设计的要求并不像以往那么紧,老师让给了我们充足的时间来制作游戏,虽然是计划做一款较为大众的经典游戏,并且能力有限,但还是对游戏做出了较高的期望,对于功能做出了较多的设想。
例如,背景音乐的播放,时间的显示,自动切换关卡,难度的选择等。
界面设计图进入后的主界面图素材图片集合这个程序是一个益智类的游戏,是一个单机游戏,人物通过推动箱子到达目的地以在游戏中取胜,同一时刻只能有一位玩家进行游戏。
图英雄榜图关于游戏图选择关卡截图游戏流程系统流程图:游戏开始选择关卡进行游戏完成游戏自动切换下一关结束游戏游戏开局出现如图1,然后进行难度的选择,再是关卡的选择,然后就可以游戏了,游戏完成之后会自动切换下一关,游戏者可手动选择结束游戏。
推箱子程序设计实训报告
一、实训背景与目的随着计算机技术的发展,程序设计已成为计算机科学与技术专业学生必须掌握的核心技能之一。
为了提高学生的编程能力、逻辑思维能力和团队协作能力,我们选择了“推箱子”游戏作为程序设计实训的项目。
推箱子游戏是一款经典的益智游戏,玩家需要通过控制角色将箱子推到指定位置,游戏中包含多种障碍和复杂路径,对玩家的策略思维和操作技巧提出了挑战。
本次实训旨在通过设计和实现推箱子游戏,让学生掌握以下技能:1. 熟悉C语言编程环境,掌握基本的语法和编程技巧。
2. 理解数据结构和算法在游戏设计中的应用。
3. 学会使用图形库进行游戏界面设计。
4. 提高团队协作能力和沟通能力。
二、实训内容本次实训分为以下几个阶段:1. 需求分析:明确游戏的目标、规则和功能,确定游戏界面和交互方式。
2. 系统设计:设计游戏的数据结构、算法和流程图。
3. 编码实现:使用C语言编写游戏代码,实现游戏功能。
4. 测试与调试:对游戏进行测试,修复bug,优化性能。
5. 文档编写:撰写实训报告,总结实训过程和经验。
三、系统设计1. 数据结构:游戏使用二维数组存储地图信息,包括墙壁、箱子、目标点、玩家位置等。
同时,使用结构体存储玩家的状态,包括位置、方向、速度等。
2. 算法:游戏采用穷举法寻找最短路径,将玩家的移动方向和箱子移动方向进行组合,遍历所有可能的移动方案,找到最短路径。
3. 流程图:游戏流程包括初始化、游戏循环、输入处理、移动计算、碰撞检测、界面绘制等。
四、编码实现1. 初始化:读取地图数据,初始化玩家、箱子、目标点等状态。
2. 游戏循环:不断检测玩家的输入,根据输入更新玩家的状态,计算箱子移动方向,进行碰撞检测和地图更新。
3. 输入处理:监听键盘输入,根据输入更新玩家的移动方向。
4. 移动计算:根据玩家的移动方向计算箱子移动方向,更新箱子和玩家的位置。
5. 碰撞检测:检测玩家和箱子是否与墙壁、其他箱子或目标点发生碰撞,根据碰撞结果调整移动方向或停止移动。
推箱子总体设计报告
推箱子总体设计报告1. 引言推箱子是一款经典的益智游戏,玩家需要将箱子推动到指定位置,完成关卡。
本报告旨在介绍推箱子游戏的总体设计方案,包括游戏的目标、规则、界面设计、关卡设计等内容,以及相关技术实现细节。
2. 游戏目标和规则2.1 游戏目标玩家需要将游戏中的箱子推动到指定的目标位置,完成关卡。
2.2 游戏规则玩家可以通过上、下、左、右四个方向键来移动人物角色,人物可以推动箱子,但只能推动未被阻挡的箱子。
箱子只能被推动,而不能被拉动或跳过。
当所有的箱子都被成功推到目标位置时,玩家即可通关。
2.3 关卡设计每个关卡都由地图、箱子、人物角色和目标位置组成。
地图由固定大小的方格组成,每个方格可以是墙壁(无法通过)、地面(可通行)或目标位置(箱子需要推到的位置)。
每个关卡的地图和目标位置安排都会有所不同,以增加游戏的难度和挑战性。
3. 游戏界面设计3.1 主界面游戏主界面包括开始游戏、选择关卡、查看帮助和退出游戏等功能按钮。
在选择关卡界面,玩家可以根据自己的游戏进度选择已通关的关卡或未解锁的关卡。
3.2 游戏界面游戏界面会显示当前关卡的地图、箱子、人物角色和目标位置。
玩家可以通过方向键来控制人物角色移动。
游戏界面还会显示当前关卡的时间计时器和步数计数器,以提供用户对游戏进度的实时反馈。
4. 技术实现细节4.1 程序架构推箱子游戏的程序可以采用面向对象的架构,将地图、人物、箱子等游戏元素抽象为对象。
同时,可以采用MVC(模型-视图-控制器)设计模式,将游戏逻辑和界面显示分离,提高代码的可维护性和可扩展性。
4.2 地图生成地图可以通过读取关卡配置文件进行生成。
配置文件可以使用文本格式,通过字符来表示地图的不同元素,例如墙壁用""表示,地面用"."表示,目标位置用"O"表示。
通过解析配置文件,程序可以动态生成关卡地图。
4.3 碰撞检测碰撞检测是实现人物和箱子移动的关键技术。
推箱子_Java课程设计报告书
《面向对象程序设计》课程设计报告题目:经典推箱子趣味游戏设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术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 类来实现对背景音乐的管理,实现音乐开关以及选择上一曲下一曲的操作。
设计中包括了所有你所能直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单,使得玩家能够很直观的见到所有游戏中的功能.界面中有菜单, 包括:"选项""设置音乐""帮助"。
按钮包括:"重来""悔一步""第一关""上一关""下一关""最终关""选关""音乐"等。
推箱子实验报告
推箱子实验报告推箱子实验报告引言:推箱子是一种经典的益智游戏,通过移动箱子将它们推到指定位置,是一项考验智力和策略的活动。
本次实验旨在通过推箱子游戏,探讨人类思维的规律和策略,并分析不同因素对游戏结果的影响。
实验方法:本次实验采用了电脑版推箱子游戏,共设置了10个关卡。
每个关卡都有不同的地图布局和箱子数量,参与者需要通过键盘控制人物移动,将所有箱子推到指定的目标位置。
实验过程中记录了每个参与者完成每个关卡所用时间,并进行了数据统计和分析。
实验结果:通过对实验数据的统计和分析,我们发现参与者在不同关卡中的表现存在明显差异。
在较简单的关卡中,参与者往往能够快速找到解决方案,并在较短的时间内完成任务。
然而,在难度较高的关卡中,参与者往往需要花费更多的时间来思考和尝试不同的策略。
这表明推箱子游戏的难度与参与者的思维能力和策略选择密切相关。
进一步分析发现,参与者在解决问题时往往会采用一定的规律和策略。
例如,他们倾向于先将箱子推向墙壁或角落,以便在后续的移动中有更多的空间和选择。
此外,参与者还会尝试不同的路径和移动顺序,以找到最佳的解决方案。
这些策略的使用表明了人类思维的灵活性和创造性。
讨论:推箱子游戏作为一种益智游戏,不仅能够锻炼参与者的思维能力和逻辑思维,还能够培养他们的耐心和坚持不懈的精神。
通过实验,我们不仅可以了解人类思维的规律和策略,还可以为教育和培训领域提供一些启示。
首先,推箱子游戏可以被应用于教育中,帮助学生培养解决问题的能力和创造性思维。
通过让学生参与推箱子游戏,他们可以在游戏中体验到思维的乐趣,学会分析问题、制定策略,并在尝试中不断提高自己的能力。
其次,推箱子游戏还可以被应用于团队建设和合作学习中。
在推箱子游戏中,参与者需要与其他队员密切合作,共同制定策略和解决问题。
这种合作学习的方式可以培养学生的团队合作精神和沟通能力,提高他们的协作能力。
结论:通过本次推箱子实验,我们深入了解了人类思维的规律和策略,并发现了推箱子游戏在教育和培训中的潜力。
推箱子游戏报告书
推箱子游戏设计报告书一、项目背景本实训要求对“推箱子游戏”进行分析、设计。
本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使专业技能得到综合训练,让我们了解软件开发基本技术和工作过程。
同时,本实训中了解图形界面设计基本技术。
通过本系统的开发,要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。
二、设计目的本课程的课程设计实际是重在提升学生对程序的理解力和游戏界面的设计能力,进行的一次全面的综合训练,其目的在于加深动手能力以及对游戏设计思想的理解,掌握运用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 AsLong, _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 文件和游戏放在同一目录。
推箱子游戏-需求分析
推箱⼦游戏-需求分析推箱⼦需求分析报告报告名称:推箱⼦需求分析报告组长座号:3120306205组长姓名:林艺芬组员的座号及姓名:3120306202-林丽萍3120306219-陈飞滨⼀、引⾔1.1.项⽬名称推箱⼦游戏1.2.项⽬⽬标从推箱⼦游戏的需求及现有技术等⽅⾯研究该推箱⼦游戏项⽬的可⾏性,嵌⼊⼤型游戏中1.3.项⽬背景(1)开发软件的名称:JAVA(2)项⽬提出者:福建⼯程学院(3)项⽬开发者:福建⼯程学院开发⼩组(4)本游戏可作为⼤型游戏系统中的⼀部分1.4.参考资料清华⼤学出版社《软件⼯程》⼆、需求分析2.1.项⽬概述经典的推箱⼦是⼀个来⾃⽇本的古⽼游戏,⽬的是在训练玩家的逻辑思考能⼒。
在⼀个狭⼩的仓库中,要求把⽊箱放在指定的位置,稍不⼩⼼就会出现箱⼦⽆法移动或则通道被堵住的情况,所以需要巧妙地利⽤有限的空间和通道,合理安排移动的次序和未知,才能顺利地完成任务2.2.系统的功能描述2.2.1能够显⽰主菜单和功能游戏需要提供主菜单让玩家进⾏游戏设置,同时能能够把地图⽂件中的信息转换成为图像显⽰到祝游戏界⾯上2.2.2能够实现键盘操作功能能够接收到键盘输⼊的⽅向键信息,并根据不同的⽅向键把游戏任务移动到响应的位置,例如,当玩家单击⽅向键“上”时,如果向上的未知是可移动的,那么就当把游戏⼈物向上移动⼀个⽅格2.2.3能够把放置到位置上的箱⼦进⾏变⾊显⽰当玩家把箱⼦推到指定位置的格⼦时,需要把这个箱⼦进⾏变⾊。
这样就能明确地显⽰出该箱⼦已经放置到指定位置上2.2.4⽀持游戏扩展功能玩家可以⾃⼰扩展原游戏地图⽂件,从⽽⽣成新的游戏地图2.2.5游戏胜负判断功能在游戏中,当玩家把全部的箱⼦都推到箱⼦放置点时,玩家胜利通过当前游戏关⼝,进⾏下⼀关⼝的游戏,如果玩家⽆法将指定的箱⼦全部推到放置点时,玩家失败。
玩家可以选择重新进⾏当前关⼝的游戏,还是退出游戏2.2.6⽀持关⼝选择功能玩家在哟西中可⾃⾏选择需要挑战的关⼝2.2.7游戏提供⽀持背景⾳乐功能通过主菜单,在游戏开始后,可以选择播放或者禁⽌播放背景⾳乐。
推箱子游戏实践报告
推箱子游戏设计实践报告一、游戏介绍在一定的范围里,要求人把木箱从开始位置推放到指定的位置。
由于箱子只能推不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
该游戏一共有三道关卡,按下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)。
推箱子游戏详细设计报告
一、 引言
在前一阶段(概要设计)中,已解决了实现该游戏需求的程序模块设计问题。
包括游戏模块间的关系设计,以及数据结构和模块结构的设计等。
在以下的详细设计报告中将对在本阶段中对游戏所做的所有详细设计进行说明。
本阶段依据概要设计的要求,确定应该如何具体地实现所要求的游戏,从而在编码阶段可以把这个描述直接翻译成用具体的 程序语言书写的程序。
具体包括各功能模块信息的录入和修改以及删除等。
1.2目的
目的是在训练你的逻辑思考能力。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出
现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
可以开发青少年学生的智力,又可以防止老年痴呆症。
1.3参考资料
《C 程序设计(第三版)》,谭浩强编,清华大学出版社
《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社 《C 语言趣味程序百例精解》,陈朔鹰 陈英主编,北京理工大学出版社 《C 游戏编程从入门到精通》,浦滨著, 北京希望电子出版社 《C 函数实用手册》,张曜 郭立山 吴天著, 冶金工业出版社 二、总体设计
2.1需求概要
用户在进入游戏后,可以根据自己的想法自由移动箱子,游戏提供自由选关的功能模块,凭借这些模块,玩家可以实现对游戏快速通关! 2.2软件各模块结构 1、
初始化模块:该模块包括和游戏。
屏幕初始化用于输出游戏的操作提示,游戏的每一关的初始化
是
初始化模块
每一关的初始化
2、 图画模块:该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、和画目的地。
画墙
画箱子
画图模块 画小人
画目的地
目的地画箱子
3、
移动箱子模块:
空地之间箱子的移动
移动箱子模块 目的地之间箱子的移动 目的地与空地之间的箱子移动
4、
移动小人模块:
小人移动
移动小人
推动箱子到目的地
5、功能控制模块:
屏幕输出功能
功能控制模块 指定位置状态判断功能
关卡重置功能
三、程序描述
1初始化模块
○1:开始主要的初始化就是屏幕初始化,用于输出游戏的操作提示,使玩家能知道游戏怎么玩!
○2:每一个关卡的初始化,在游戏不能通关时,按空格键回到刚开始玩这个关卡的初始状态以实现玩家能快速通关!
○3:进行下一关的初始化,就是这一关已经通关,要进入下一关的游戏,使游戏显示下一关的初始状态!
2图画模块
这个模块的功能不是很多,也比较简单,主要就是:
○1:画墙:用方块表示,画出墙的形状和大小,以确定该关卡的难度。
○2:画箱子:用正方块表示,这个又分为在目的地的箱子和空地的箱子,这二种箱子不同之
处就是颜色不同。
另外还要在开始时把箱子放在哪个位置以确定难度!
○3:画小人物:这个有点难度,主要是确定它的形状和大小,最主要的就是画出来的小人物要有人样!
○4:画目的地:在没有箱子的情况下用小圆点表示,有箱子就显示箱子的形状!并把目的地放的位置选好,要确定能过关!
3移动箱子模块
该模块用于移动箱子,包括目的地之间、空地之间和目的地与空地之间的箱子移动。
本模块的主要功能就是记忆和判断,要玩家每走一步都记住,从中判断小人物和箱子还能怎样移动,是否有通关的可能!
4移动小人模块
该模块所要应用的功能就是判断和记忆,在每走一步就要画出新的小人物和箱子,执行之前还要经过复杂的判断,在不同的状态下,判断的结果不同。
当判断出撞墙就不执行,要在没有任何的阻拦的情况下才执行!主要判断有:判断小人旁边有没墙和箱子,要是是撞墙就不执行,不是就执行。
要是是箱子就判断箱子会不会撞墙要是撞墙就不执行,不是就小人物跟箱子一起移动!
5功能控制模块
○1:提示和每个键所执行的功能只是为了让玩家能快速了解游戏的玩法和怎样才能通关,以
达到玩家觉得不会无从下手不知游戏怎么玩!
○2:设计背景颜色和字体颜色只是为了减轻视觉疲劳,看上去不会太刺眼,也看美观游戏的画面!
○3:设计字母表示墙、箱子、箱子在目的地和目的地只是为了简便程序,不要让程序太复杂!○4:记忆功能和判断功能是同时存在的,记忆功能要时刻记住画面上每种东西的位置以实现
判断玩家还能怎样移动箱子、小人物是否靠墙,还能怎样走动,并判断玩家按了什么键,以实现小人物和箱子的移动!
○5:主要是在玩家不能通关的情况下,判断玩家有没按空格键,让本关重置到开始状态重新玩本关卡!当玩家不玩游戏时按Esc键可以退出游戏!。