C语言-推箱子实验报告

合集下载

推箱子问题的设计与实现

推箱子问题的设计与实现

《推箱子问题的设计与实现》实验报告班级:计本四班学号: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语言程序报告推箱子是一种极富智慧和策略性的游戏,是著名的益智游戏之一、它不仅可以锻炼人们的逻辑思维能力和创造力,而且还能提高人们的解决问题的能力和耐心。

本篇报告将介绍一个基于C语言开发的推箱子游戏,包括游戏规则、程序设计思路和实现效果等方面的内容。

一、游戏规则推箱子游戏的规则十分简单,玩家需要操作一个小人将该场景中的木箱全部推到指定位置。

在游戏开始时,场景中会放置一定数量的木箱和一个小人。

玩家可以通过键盘输入上下左右四个方向键来移动小人,小人可以推动场景中的木箱,但不能直接拉动或推动多个箱子。

当所有的木箱都被推到指定位置时,游戏胜利,反之则失败。

二、程序设计思路推箱子游戏的实现涉及到场景的渲染、小人和木箱的移动、游戏的逻辑判断等多个方面。

下面将分别介绍这些方面的程序设计思路。

1.场景渲染2.小人和木箱的移动玩家操作小人的移动,可以通过监听键盘输入的方向键来实现。

根据输入的方向,判断小人与目标位置的关系,如果目标位置是空地或者指定位置,则小人可以移动到目标位置,否则不能移动。

当小人移动后,如果目标位置是木箱,则需要判断木箱与目标位置的关系,如果目标位置是空地或者指定位置,则木箱可以被推动到目标位置,否则不能推动。

3.游戏逻辑判断在每一次小人移动后,需要判断游戏是否胜利或失败。

胜利的条件是所有的木箱都被推到指定位置,判断的方法是在遍历整个场景时,检查是否存在未推到指定位置的木箱。

失败的条件是小人无法再移动,判断的方法是在判断小人是否能够移动时,如果没有可移动的方向,则游戏失败。

三、实现效果通过以上的程序设计思路,可以开发出一个基于C语言的推箱子游戏。

该游戏可以提供丰富的关卡和难度选择,让玩家能够不断挑战和提高自己的智力。

游戏的界面简洁明了,操作方便快捷,给玩家带来舒适的游戏体验。

总结:推箱子是一种极富智慧的益智游戏,本篇报告介绍了一个基于C语言开发的推箱子游戏。

通过对游戏规则、程序设计思路和实现效果的阐述,可以看出该游戏具有多样化的场景和难度选择,能够锻炼玩家的智力和思维能力。

C语言-推箱子实验报告

C语言-推箱子实验报告

福建工程学院计算机与信息科学系实验报告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.");/*输出一些控制信息*/。

C语言 推箱子课程设计报告

C语言 推箱子课程设计报告

计算机科学与技术专业2019级《程序设计基础课程设计》报告一、课设目标《程序设计基础课程设计》(以下简称本课程设计)是计算机科学与技术专业集中实践性环节之一,是计算机学科基础的第一门重要的实践教学必修课程;是学习完程序设计课程后进行的一次全面的综合练习,其目的是开发一个基于C语言的小型软件项目。

通过本课程设计,使学生加深对程序设计理论和基本知识的理解,了解使用计算机语言进行软件设计与实现的基本方法,提高运用计算机语言解决工程实际问题的能力,探索高校计算机专业人才培养“做中学”新模式、分层次培养、团队合作,以及师傅(学长)带徒弟等现代职业教育的新方法。

同时,通过本课程设计,对于学生进一步学习计算机专业知识、掌握专业实践技能,以及就业将有极其重要的意义。

二、课设要求1.熟练掌握数据类型、控制结构、数组、结构体、函数、文件等知识及其应用。

2.对程序设计基础较好的学生实现分层次培养,本课程设计分为三个层次,一是全体学生都要掌握数组、结构体和文件知识及运用;二是部分学生理解并掌握指针的概念、链表、文件内容3.能够使用熟悉的技术(数组/指针与链表)开发一个小型的应用软件(如,推箱子游戏软件、学生管理软件等)。

4.养成良好的表达、沟通和团队协作那能力,了解软件开发过程(问题描述、分析、设计、软件制作、测试、运行及维护)5.教师和学长积极参与,学生自己选题、自己组队、自我管理,通过书写文档和PPT答辩,实行过程化考核管理。

三、开发环境、开发方法及软件功能描述1.开发工具本实习采用基于Windows或Linux操作系统的C语言编译器(Dev-CPP、VC6.0、Visual StudioCode::Blocks、MinGW、C-Free、GCC等);JDK8.0, Ecliipse2.主要内容本课程设计可选内容有小游戏程序开发和小型信息管理软件开发两种类型,例如双人象棋游戏、学生信息管理、银行信用卡信息管理程序开发等。

推箱子C课程设计报告

推箱子C课程设计报告

程序设计课程设计报告书学生:孟祥煜指导老师: 曾宇容课程设计名称:推箱子小游戏班级: 软件11401一、设计任务介绍推箱子游戏得实现方法,并逐步介绍C语言图形编程得方法与技巧。

在C语言编写软件WIN-TC上,涉及软中断、二维数组、键盘操作及图形化函数等方法,显示器中断寄存器得设置、二维数组得定义、键盘上键值得获取、图形方式下光标得显示与定位,以及部分图形函数得使用实现了一个完整得推箱子游戏界面,界面清晰可见。

二、设计目得训练学生掌握C得数据结构与综合编程能力与游戏开发技巧等应用能力。

初步设想推箱子就是一款经典得益智小游戏,目得就是在训练人得逻辑思考能力。

在一个狭小得空间中,要求把木箱从起始位置处推放到指定位置。

在空间中有地方限制,稍不小心就会出现箱子无法移动或者通道被堵住得情况,而且箱子只能推不能拉,所以需要玩家巧妙得利用有限得空间与通道,合理得移动次序与位置,才能完成任务。

本游戏一共分14关,由易到难,每一关都随着关数得增加来增加难度,从而达到吸引游戏玩家得目得。

三功能1、菜单功能,玩家通过瞧目录按对应得键可以进入对应得功能菜单,其中1进入游戏,2选择游戏关卡,3游戏帮助指南 ,4退出游戏。

2 游戏功能: 玩家可以通过操纵键盘中得上下左右键进入游戏进行各种操作来完成游戏。

3 循环功能:当玩家正在游戏得时候如果某一步走错了,导致游戏无法完成,可以随时重新开始游戏来完成关卡,游戏过程中可以随时按Ctrl+V退出游戏。

4 顺序功能:当玩家完成了某一关之后,随着进入下一关门可以按顺序进入下一关,继续开始更有挑战得关卡,如果该关就是最后一关,则显示通关完成。

三、总体设计1、功能模块设计函数功能描述本程序包括5个模块,分别就是初始化模块、画图模块、移动箱子模块、移动小人模块与功能控制模块。

各个模块功能得功能描述如下:(1)初始化模块。

该模块包括屏幕初始化与游戏第一关到第最后一关得初始化。

屏幕初始化用于输出欢迎信息与操作提示,游戏每一关得初始化就是构建每一关得关卡。

C语言推箱子课程设计(附报告)

C语言推箱子课程设计(附报告)

(注:VC运行时,分别新建两个文件BotIt.cpp和Maps.h,再在同一目录下运行其中cpp)代码部分文件“BoxIt.cpp”如下:#include <stdio.h>#include <conio.h>#include <stdlib.h>#include "Maps.h"#define AISLE "" //走廊#define N_AISLE 0#define W ALL "■" //墙壁#define N_W ALL 1#define AIM "※" //未放箱子的目标#define N_AIM 2#define BOX "□" //未在目标位置的箱子#define N_BOX 3#define MAN "♀" //人#define N_MAN 4#define BOX_OK "▢" //■已经在目标位置的箱子[即已放箱子的目标]#define N_BOX_OK 5#define MAN_IN "* "#define N_MAN_IN 6#define ESC 0x1B#define UP 'w'#define DOWN 's'#define LEFT 'a'#define RIGHT 'd'#define RESTART 'r'#define SA VE 'x'#define PF(a) printf("%s",a)struct Point{int x;int y;}man_p;/*小人坐标*///struct Filename{int num;char name[20];}filename[10];//int N;/*存档总人数*/int M;/*关数*/int step;/*步数*/char x;void welcome();void ingame();void playgame(int map[14][16]);/*玩游戏*/void displaymap(int map[14][16]);/*展示当前游戏界面*/void findman(int &a,int &b,int map[14][16]);/*找到小人坐标位置*/unsigned char getKey();/*获得有效按键返回按键值*/int getmap(Point p,int map[14][16]);/*获得点p的地图值*/void moveman(Point man_p,Point manf_p,int X,int Y,int map[14][16]);/*人移动*/ void movebox(Point box_p,Point boxf_p,int map[14][16]);/*移箱子*/int win(int map[14][16]);/*判断当无※时赢*/void choosemap(int map[14][16],int i);/*选关*/void changemap(int map[14][16],int mapx[14][16]);/*换地图*/void save();/*保存当前*/int read();/*读取存档*/int a=0,b=0,c=0,d=0;//system("color a");int main(){x='0';while(x!='4'){welcome();if(x=='3'&&read()==0) continue;if(x!='4') ingame();}return 0;}void displaymap(int map[14][16]){int i,j;system("cls");printf("\t\t\tMisson %d\n\n",M);for(i=0;i<14;i++){for(j=0;j<16;j++){ switch(map[i][j]){case N_AISLE:PF(" ");break;case N_W ALL:PF(W ALL);break;case N_AIM:PF(AIM);break;case N_BOX:PF(BOX);break;case N_MAN:PF(MAN);break;case N_BOX_OK:PF(BOX_OK);break;case N_MAN_IN:PF(MAN_IN);default:;}}if(i==2) printf("Press the key:");if(i==3) printf("'w'、'a'、's'、'd' to control ♀");if(i==5) printf("'r' to replay");if(i==7) printf("'x' to save");if(i==9) printf("'ESC' back to the menu");if(i==12) printf("Step:%d",step);PF("\n");}}void playgame(int map[14][16]){ int X,Y;Point manf_p,manff_p;//findman(man_p.x,man_p.y,map);displaymap(map);step=0;while(win(map)==0){findman(man_p.x,man_p.y,map);//printf("输入:");switch(getKey()){case DOWN://printf("\n下\n");manf_p.x=man_p.x;manff_p.x=man_p.x;manf_p.y=man_p.y+1,manff_p.y=man_p.y+2;X=0,Y=1;break;case UP://printf("\n上\n");manf_p.x=man_p.x;manff_p.x=man_p.x;manf_p.y=man_p.y-1,manff_p.y=man_p.y-2;X=0,Y=-1;break;case LEFT://printf("\n左\n");manf_p.x=man_p.x-1;manff_p.x=man_p.x-2;manf_p.y=man_p.y;manff_p.y=man_p.y;X=-1,Y=0;break;case RIGHT://printf("\n右\n");manf_p.x=man_p.x+1;manff_p.x=man_p.x+2;manf_p.y=man_p.y;manff_p.y=man_p.y;X=1,Y=0;break;case SA VE:save();continue;case RESTART:changemap(map,map0);M--;continue;case ESC:system("cls");changemap(map,map0);M=44;continue;default:;}//printf("\n人位置[%d %d]\n",man_p.y,man_p.x);//printf("\n人前方[%d %d]人前前方[%d %d]\n",manf_p.y,manf_p.x,manff_p.y,manff_p.x);switch(getmap(manf_p,map)){case N_AISLE://0case N_AIM://2moveman(man_p,manf_p,X,Y,map);break;case N_BOX://3case N_BOX_OK://5if(getmap(manff_p,map)==N_AISLE||getmap(manff_p,map)==N_AIM){movebox(manf_p,manff_p,map);moveman(man_p,manf_p,X,Y,map);}break;default:;}displaymap(map);}if(M==42) printf("\n\tCongratulation! Pass All!!!\n\n\n\t");}void findman(int &a,int &b,int map[14][16]){int i,j;for(i=0;i<14;i++)for(j=0;j<16;j++)if(map[i][j]==N_MAN||map[i][j]==N_MAN_IN)a=j,b=i;}unsigned char getKey(){unsigned char key;do{key = getch();}while(key != RESTART && key != ESC && key != LEFT && key != RIGHT && key != UP && key != DOWN && key!='x'&& key!=0x1B &&key!='r');return key;}int getmap(Point p,int map[14][16]){//printf("\n前方值%d\n",map[p.y][p.x]);return map[p.y][p.x];}void moveman(Point man_p,Point manf_p,int X,int Y,int map[14][16]){map[manf_p.y][manf_p.x]=(map[manf_p.y][manf_p.x]==N_AIM||map[manf_p.y][manf_p.x]==N_BOX _OK)?N_MAN_IN:N_MAN;map[man_p.y][man_p.x]=map[man_p.y][man_p.x]==N_MAN_IN?N_AIM:N_AISLE; //printf("\n移动后—小人位置值%d\n",map[manf_p.y][manf_p.x]);//printf("\n移动后—原小人位置值%d\n",map[man_p.y][man_p.x]);man_p.x+=X,man_p.y+=Y;step++;}void movebox(Point box_p,Point boxf_p,int map[14][16]){map[boxf_p.y][boxf_p.x]=map[boxf_p.y][boxf_p.x]==N_AISLE?N_BOX:N_BOX_OK; map[box_p.y][box_p.x]=map[box_p.y][box_p.x]==N_BOX?N_AISLE:N_AIM;}int win(int map[14][16]){int i,j;for(i=0;i<14;i++)for(j=0;j<16;j++)if(map[i][j]==2||map[i][j]==6)return 0;return 1;}void choosemap(int map[14][16],int i){switch(i){case 1:changemap(map,map1);break;case 2:changemap(map,map2);break;case 3:changemap(map,map3);break;case 4:changemap(map,map4);break;case 5:changemap(map,map5);break;case 6:changemap(map,map6);break;case 7:changemap(map,map7);break;case 8:changemap(map,map8);break;case 9:changemap(map,map9);break;case 10:changemap(map,map10);break;case 11:changemap(map,map11);break;case 12:changemap(map,map12);break;case 13:changemap(map,map13);break;case 14:changemap(map,map14);break;case 15:changemap(map,map15);break;case 16:changemap(map,map16);break;case 17:changemap(map,map17);break;case 18:changemap(map,map18);break;case 19:changemap(map,map19);break;case 20:changemap(map,map20);break;case 21:changemap(map,map21);break;case 22:changemap(map,map22);break;case 23:changemap(map,map23);break;case 24:changemap(map,map24);break;case 25:changemap(map,map25);break;case 26:changemap(map,map26);break;case 27:changemap(map,map27);break;case 28:changemap(map,map28);break;case 29:changemap(map,map29);break;case 30:changemap(map,map30);break;case 31:changemap(map,map31);break;case 32:changemap(map,map32);break;case 33:changemap(map,map33);break;case 34:changemap(map,map34);break;case 35:changemap(map,map35);break;case 36:changemap(map,map36);break;case 37:changemap(map,map37);break;case 38:changemap(map,map38);break;case 39:changemap(map,map39);break;case 40:changemap(map,map40);break;case 41:changemap(map,map41);break;case 42:changemap(map,map42);break;default:;}}void changemap(int map[14][16],int mapx[14][16]) {int i,j;for(i=0;i<14;i++)for(j=0;j<16;j++)map[i][j]=mapx[i][j];}void save(){int i,j;FILE *in;/*char filename[10][20];printf("put in the filename:");scanf("%s",filename);*/if((in=fopen("save game","w"))==NULL){printf("cannot open this file\n");exit(0);}for(i=0;i<14;i++)for(j=0;j<16;j++)fwrite(&map[i][j],sizeof(int),1,in);fwrite(&M,sizeof(int),1,in);fwrite(&step,sizeof(int),1,in);printf("\nGame Misson %d saved!\n",M);system("pause");fclose(in);}int read(){int i,j;FILE *out;/*char filename[10][20];printf("put in the filename:");scanf("%s",filename);*/if((out=fopen("save game","r"))==NULL){printf("\ncannot open this file\n");return 0;}else{for(i=0;i<14;i++)for(j=0;j<16;j++)fread(&map[i][j],sizeof(int),1,out);fread(&M,sizeof(int),1,out);fread(&step,sizeof(int),1,out);printf("\nM=%d\n",M);printf("Game read!\n");fclose(out);return 1;}}void welcome(){printf("\t\t ♀Box It \n");printf("\t\t1:New Game.\n\t\t2:Select Misson.\n\t\t3:Read Record.\n\t\t4:Exit Game.\n Choose-- ");switch(x=getch()){case '1':printf("1:");M=1;choosemap(map,M);break;case '2':printf("2:");printf("1-42 Misson to Choose:");scanf("%d",&M);choosemap(map,M);break;case '3':printf("3:");if(read()==1) printf("\n%d misson opened\n",M);break;case '4':printf("4:Exit Game.\n\n"); break;default:printf("Not 1-4\n");}}void ingame(){while(M<43){playgame(map);step=0;M++;choosemap(map,M);}}文件“Maps.h”如下:int map[14][16];int map0[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map1[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,2,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,0}, {0,0,0,1,1,1,3,0,3,2,1,0,0,0,0,0}, {0,0,0,1,2,0,3,4,1,1,1,0,0,0,0,0}, {0,0,0,1,1,1,1,3,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,2,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map2[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,1,4,0,0,1,0,0,0,0,0,0,0,0}, {0,0,0,1,0,3,3,1,0,1,1,1,0,0,0,0}, {0,0,0,1,0,3,0,1,0,1,2,1,0,0,0,0}, {0,0,0,1,1,1,0,1,1,1,2,1,0,0,0,0}, {0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0}, {0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0}, {0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0}, {0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map3[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,0}, {0,0,0,1,1,3,1,1,1,0,0,0,1,0,0,0},{0,0,0,1,0,2,2,1,0,3,0,1,1,0,0,0}, {0,0,0,1,1,2,2,1,0,0,0,1,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map4[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0}, {0,0,0,1,4,3,0,1,0,0,0,0,0,0,0,0}, {0,0,0,1,1,3,0,1,1,0,0,0,0,0,0,0}, {0,0,0,1,1,0,3,0,1,0,0,0,0,0,0,0}, {0,0,0,1,2,3,0,0,1,0,0,0,0,0,0,0}, {0,0,0,1,2,2,5,2,1,0,0,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map5[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0}, {0,0,0,0,1,4,0,1,1,1,0,0,0,0,0,0}, {0,0,0,0,1,0,3,0,0,1,0,0,0,0,0,0}, {0,0,0,1,1,1,0,1,0,1,1,0,0,0,0,0}, {0,0,0,1,2,1,0,1,0,0,1,0,0,0,0,0}, {0,0,0,1,2,3,0,0,1,0,1,0,0,0,0,0}, {0,0,0,1,2,0,0,0,3,0,1,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map6[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0},{0,1,0,0,0,2,1,1,1,0,1,0,0,0,0,0}, {0,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0}, {0,1,0,1,0,3,0,3,1,2,0,1,0,0,0,0}, {0,1,0,1,0,0,5,0,0,1,0,1,0,0,0,0}, {0,1,0,2,1,3,0,3,0,1,0,1,0,0,0,0}, {0,1,1,0,0,0,0,1,0,1,0,1,1,1,0,0}, {0,0,1,0,1,1,1,2,0,0,0,0,4,1,0,0}, {0,0,1,0,0,0,0,0,1,1,0,0,0,1,0,0}, {0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map7[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0}, {0,0,0,0,0,0,1,1,0,0,1,0,4,1,0,0}, {0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0}, {0,0,0,0,0,0,1,3,0,3,0,3,0,1,0,0}, {0,0,0,0,0,0,1,0,3,1,1,0,0,1,0,0},{0,0,0,0,1,2,2,2,2,2,0,0,1,1,0,0}, {0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map8[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,1,1,1,0,0,0,0,1,0,0,0,0}, {0,0,0,1,1,2,0,3,1,1,0,1,1,0,0,0}, {0,0,0,1,2,2,3,0,3,0,0,4,1,0,0,0}, {0,0,0,1,2,2,0,3,0,3,0,1,1,0,0,0}, {0,0,0,1,1,1,1,1,1,0,0,1,0,0,0,0}, {0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},};int map9[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0}, {0,0,0,1,0,0,1,1,0,0,0,1,0,0,0,0}, {0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,0}, {0,0,0,1,3,0,1,1,1,0,3,1,0,0,0,0}, {0,0,0,1,0,1,2,2,2,1,0,1,0,0,0,0}, {0,0,1,1,0,1,2,2,2,1,0,1,1,0,0,0}, {0,0,1,0,3,0,0,3,0,0,3,0,1,0,0,0}, {0,0,1,0,0,0,0,0,1,0,4,0,1,0,0,0}, {0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map10[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0}, {0,0,0,0,1,1,1,3,3,3,0,1,0,0,0,0}, {0,0,0,0,1,4,0,3,2,2,0,1,0,0,0,0}, {0,0,0,0,1,0,3,2,2,2,1,1,0,0,0,0}, {0,0,0,0,1,1,1,1,0,0,1,0,0,0,0,0}, {0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map11[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,1,1,1,1,0,0,1,1,1,1,1,0,0}, {0,0,1,1,0,0,1,0,0,1,0,0,0,1,0,0}, {0,0,1,0,3,0,1,1,1,1,3,0,0,1,0,0}, {0,0,1,0,0,3,2,2,2,2,0,3,0,1,0,0}, {0,0,1,1,0,0,0,0,1,0,4,0,1,1,0,0}, {0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map12[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,1,1,1,0,0,4,1,0,0,0,0,0}, {0,0,0,0,1,0,0,3,2,0,1,1,0,0,0,0}, {0,0,0,0,1,0,0,2,3,2,0,1,0,0,0,0}, {0,0,0,0,1,1,1,0,5,3,0,1,0,0,0,0}, {0,0,0,0,0,0,1,0,0,0,1,1,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map13[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,1,2,2,1,0,0,0,0,0,0,0}, {0,0,0,0,1,1,0,2,1,1,0,0,0,0,0,0}, {0,0,0,0,1,0,0,3,2,1,0,0,0,0,0,0}, {0,0,0,1,1,0,3,0,0,1,1,0,0,0,0,0}, {0,0,0,1,0,0,1,3,3,0,1,0,0,0,0,0}, {0,0,0,1,0,0,4,0,0,0,1,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map14[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0}, {0,0,0,1,0,3,2,2,3,0,1,0,0,0,0,0},{0,0,0,1,0,3,2,2,3,0,1,0,0,0,0,0}, {0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map15[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0}, {0,0,0,0,1,0,3,0,3,3,0,1,0,0,0,0}, {0,0,0,0,1,2,2,2,2,2,2,1,0,0,0,0}, {0,0,0,0,1,0,3,3,0,3,0,1,0,0,0,0}, {0,0,0,0,1,1,1,0,4,1,1,1,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map16[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,0,0,1,0,0,0,0,1,1,1,0,0}, {0,0,0,0,0,0,1,0,3,0,0,0,0,1,0,0}, {0,0,0,0,1,1,1,0,3,0,1,1,0,1,0,0}, {0,0,0,0,1,2,2,2,0,3,0,0,0,1,0,0}, {0,0,0,0,1,2,2,2,3,1,3,0,1,1,0,0}, {0,0,0,0,1,1,1,1,0,1,0,3,0,1,0,0}, {0,0,0,0,0,0,0,1,0,0,4,0,0,1,0,0}, {0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map17[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},{0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0}, {0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0}, {0,0,0,0,1,0,3,3,3,1,1,0,0,0,0,0}, {0,0,0,0,1,0,0,1,2,2,1,1,1,0,0,0}, {0,0,0,0,1,1,0,0,2,2,3,0,1,0,0,0}, {0,0,0,0,0,1,0,4,0,0,0,0,1,0,0,0}, {0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map18[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0}, {0,0,0,0,0,1,0,0,0,1,2,0,1,0,0,0}, {0,0,0,0,1,1,0,0,3,2,2,2,1,0,0,0}, {0,0,0,0,1,0,0,3,0,1,5,2,1,0,0,0}, {0,0,0,1,1,0,1,1,3,1,0,1,1,0,0,0}, {0,0,0,1,0,0,0,3,0,0,3,0,1,0,0,0},{0,0,0,1,1,1,1,1,1,1,4,0,1,0,0,0}, {0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map19[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,1,2,2,2,2,0,1,0,0,0,0,0}, {0,0,0,1,1,1,2,2,2,3,1,1,1,0,0,0}, {0,0,0,1,0,0,3,1,3,0,3,0,1,0,0,0}, {0,0,0,1,0,3,3,0,0,1,3,0,1,0,0,0}, {0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0}, {0,0,0,1,1,1,1,0,4,0,1,1,1,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},};int map20[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,1,2,2,3,2,2,1,0,0,0,0,0}, {0,0,0,0,1,2,2,1,2,2,1,0,0,0,0,0}, {0,0,0,0,1,0,3,3,3,0,1,0,0,0,0,0}, {0,0,0,0,1,0,0,3,0,0,1,0,0,0,0,0}, {0,0,0,0,1,0,3,3,3,0,1,0,0,0,0,0}, {0,0,0,0,1,0,0,1,4,0,1,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map21[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,1,0,2,2,2,1,0,0,0,0,0}, {0,0,1,1,1,1,2,2,2,2,1,0,0,0,0,0},{0,0,1,0,3,0,3,0,0,3,3,0,1,0,0,0}, {0,0,1,0,0,3,0,3,0,0,0,0,1,0,0,0}, {0,0,1,4,0,0,1,1,1,0,0,0,1,0,0,0}, {0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map22[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0}, {0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0}, {0,0,1,0,1,3,3,0,0,1,0,0,0,0,0,0}, {0,0,1,0,2,2,2,1,0,1,0,0,0,0,0,0}, {0,0,1,1,2,2,2,3,0,1,1,0,0,0,0,0}, {0,0,0,1,0,1,1,0,3,0,1,0,0,0,0,0}, {0,0,0,1,3,0,0,3,0,0,1,0,0,0,0,0}, {0,0,0,1,0,0,1,4,0,0,1,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map23[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,1,1,1,0,0,0,1,1,1,1,0,0}, {0,0,0,0,1,0,0,0,3,0,3,0,0,1,0,0}, {0,0,0,0,1,0,3,0,0,0,3,0,4,1,0,0}, {0,0,0,0,1,1,1,3,3,1,1,1,1,1,0,0}, {0,0,0,0,0,0,1,0,0,2,2,1,0,0,0,0}, {0,0,0,0,0,0,1,2,2,2,2,1,0,0,0,0}, {0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map24[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0}, {1,0,0,0,0,1,1,1,0,1,0,0,2,1,0,0}, {1,0,0,3,0,3,0,1,0,1,2,2,2,1,0,0}, {1,0,1,0,0,3,0,1,1,1,0,0,2,1,0,0}, {1,0,0,3,3,3,0,0,0,3,0,4,2,1,0,0}, {1,1,1,0,0,3,0,0,3,1,0,0,2,1,0,0}, {0,0,1,0,0,3,1,3,0,1,2,2,2,1,0,0}, {0,0,1,1,0,0,0,0,0,1,0,0,2,1,0,0}, {0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map25[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0}, {0,0,0,1,1,1,1,1,2,0,0,0,1,0,0,0}, {0,0,0,1,0,0,1,2,2,1,1,0,1,0,0,0}, {0,0,0,1,0,0,3,2,2,0,0,0,1,0,0,0}, {0,0,0,1,0,0,1,0,2,1,0,1,1,0,0,0},{0,0,1,0,3,0,0,0,0,3,3,0,1,0,0,0}, {0,0,1,0,1,3,1,0,0,1,0,0,1,0,0,0}, {0,0,1,4,0,0,1,1,1,1,1,1,1,0,0,0}, {0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map26[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0}, {0,0,1,0,0,0,1,1,0,0,1,1,1,1,0,0}, {0,0,1,0,3,0,0,0,0,0,0,0,0,1,0,0}, {0,0,1,1,3,1,1,1,0,1,1,0,0,1,0,0}, {0,0,1,0,0,1,1,0,5,0,1,0,1,1,0,0}, {0,0,1,0,3,2,2,2,2,2,2,0,1,0,0,0}, {0,1,1,0,1,1,1,0,2,0,1,0,1,0,0,0}, {0,1,0,0,0,0,0,3,1,1,1,3,1,0,0,0}, {0,1,0,0,0,1,0,0,0,0,3,4,1,0,0,0}, {0,1,1,1,1,1,3,1,0,1,1,1,1,0,0,0}, {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0},{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map27[14][16]={{0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0}, {0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0}, {0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0}, {0,0,0,0,0,0,1,0,0,3,0,3,1,0,1,0}, {1,1,1,1,1,1,1,0,0,0,3,0,0,0,1,0}, {1,2,2,1,0,0,1,1,0,3,0,3,1,0,1,0}, {1,2,2,0,0,0,1,1,0,3,0,3,0,0,1,0}, {1,2,2,1,0,0,1,1,0,1,1,1,1,1,1,0}, {1,2,2,1,0,1,0,3,0,3,0,1,0,0,0,0}, {1,2,2,0,0,0,0,0,3,0,0,1,0,0,0,0}, {1,0,0,1,1,1,0,4,0,1,1,1,0,0,0,0}, {1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map28[14][16]={{0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}, {1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0},{1,0,0,0,3,0,0,1,0,1,5,2,5,2,5,1}, {1,1,0,3,0,3,0,1,1,1,2,5,2,5,2,1}, {1,1,3,0,3,0,0,1,0,0,5,2,5,2,5,1}, {1,1,4,3,0,3,0,0,0,0,2,5,2,5,1,1}, {1,1,3,0,3,0,0,1,0,0,5,2,5,2,5,1}, {1,1,0,3,0,3,0,1,1,1,2,5,2,5,2,1}, {1,0,0,0,3,0,0,1,0,1,5,2,5,2,5,1}, {1,0,0,3,0,3,0,1,0,1,1,1,1,1,1,1}, {1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map29[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,1,2,2,2,2,2,2,1,0,0,0,0}, {0,0,0,0,1,0,0,3,0,1,0,1,1,0,0,0}, {0,0,0,0,1,0,3,0,1,0,3,0,1,0,0,0},{0,0,0,0,1,1,3,0,3,0,3,0,1,0,0,0}, {0,0,0,0,0,1,0,0,4,0,0,0,1,0,0,0}, {0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map30[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0}, {0,0,0,1,1,1,0,0,0,2,0,0,0,0,1,0}, {0,0,0,1,0,0,0,1,1,3,1,1,0,0,1,0}, {0,0,0,1,0,4,3,2,0,2,0,2,3,1,1,0}, {0,0,0,1,1,0,3,1,1,3,1,1,0,1,0,0}, {0,0,0,0,1,0,0,0,0,2,0,0,0,1,0,0}, {0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},};int map31[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0}, {0,0,0,0,1,1,1,1,2,0,0,4,1,0,0,0}, {0,0,0,0,1,0,0,3,3,3,0,0,1,0,0,0}, {0,0,0,0,1,2,1,1,2,1,1,2,1,0,0,0}, {0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0}, {0,0,0,0,1,0,0,3,2,1,0,1,1,0,0,0}, {0,0,0,0,1,1,1,1,0,0,0,1,0,0,0,0}, {0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map32[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0},{0,0,0,0,0,1,2,0,3,2,1,0,0,0,0,0}, {0,0,0,0,1,1,1,0,0,3,1,1,0,0,0,0}, {0,0,0,0,1,0,3,0,0,3,0,1,0,0,0,0}, {0,0,0,0,1,0,1,3,1,1,0,1,0,0,0,0}, {0,0,0,0,1,0,0,0,4,0,0,1,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map33[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0}, {0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0}, {0,0,1,0,0,0,1,3,0,0,0,1,1,1,0,0}, {0,0,1,0,0,0,3,0,0,0,3,3,0,1,0,0}, {0,0,1,0,3,3,0,1,3,0,0,0,0,1,0,0}, {0,0,1,1,0,0,0,3,0,0,0,3,0,1,0,0}, {1,1,1,1,1,1,0,1,3,1,1,1,1,1,0,0}, {1,2,2,4,0,1,3,0,0,1,0,0,0,0,0,0}, {1,2,1,2,2,0,0,3,1,1,0,0,0,0,0,0},{1,2,2,2,2,0,0,0,1,0,0,0,0,0,0,0}, {1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map34[14][16]={{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}, {1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0}, {1,0,3,0,1,3,0,1,0,3,1,1,3,0,1,0}, {1,0,1,0,0,3,0,1,0,0,0,0,0,0,1,0}, {1,0,0,0,1,1,3,1,3,1,1,3,3,0,1,0}, {1,0,1,0,1,0,2,2,2,0,1,0,0,0,1,0}, {1,0,3,0,0,2,0,1,0,2,3,0,1,0,1,0}, {1,0,3,1,4,3,2,2,2,1,0,1,0,0,1,0}, {1,0,0,0,0,2,0,1,0,2,0,0,3,0,1,0}, {1,0,1,1,2,3,1,1,1,3,2,0,1,0,1,0}, {1,0,1,0,3,2,2,2,2,2,0,1,1,0,1,0}, {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map35[14][16]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0}, {0,0,0,1,0,0,0,1,1,0,0,1,0,0,0,0}, {0,0,0,1,0,1,0,3,0,3,0,1,0,0,0,0}, {0,0,0,1,0,0,5,2,1,0,0,1,0,0,0,0}, {0,0,0,1,1,0,1,2,4,2,1,1,0,0,0,0}, {0,0,0,1,1,3,1,1,1,5,1,1,1,0,0,0}, {0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0}, {0,0,0,1,0,0,0,1,1,0,1,0,1,0,0,0}, {0,0,0,1,1,1,1,1,1,0,0,0,1,0,0,0}, {0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map36[14][16]={{1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0}, {1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0}, {1,0,3,3,0,0,0,1,1,1,0,0,0,0,0,0}, {1,0,0,3,0,3,3,3,0,1,1,1,1,1,0,0}, {1,1,0,1,1,0,2,2,2,0,0,0,0,1,1,0}, {0,1,0,1,4,1,2,2,2,1,1,1,3,0,1,0},{1,1,0,1,0,3,2,2,2,3,0,1,0,1,1,0}, {1,0,0,1,1,1,1,1,0,1,1,1,0,1,0,0}, {1,0,0,0,0,0,0,3,0,0,0,3,0,1,0,0}, {1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0}, {0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, };int map37[14][16]={{0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0}, {0,1,2,2,1,0,0,0,0,0,0,1,2,2,1,0}, {0,1,2,2,1,1,1,1,1,1,1,1,2,2,1,0}, {0,1,0,3,0,2,2,2,2,2,2,3,2,3,1,0}, {0,1,3,0,3,0,3,0,3,0,3,0,3,0,1,0}, {0,1,0,3,0,3,0,3,4,3,0,3,0,3,1,0}, {0,1,3,0,3,0,3,0,3,0,3,0,3,0,1,0}, {0,1,0,3,0,3,0,3,0,3,0,3,0,3,1,0}, {0,1,3,2,3,2,2,2,2,2,2,0,3,0,1,0}, {0,1,2,2,1,1,1,1,1,1,1,1,2,2,1,0}, {0,1,2,2,1,0,0,0,0,0,0,1,2,2,1,0}, {0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0},。

C语言推箱子,猜数字

C语言推箱子,猜数字

一实验题目1.3.猜数游戏2.4.利用数组和字符显示实现推箱子游戏;二实验内容1,编写一个猜数字游戏,游戏规则:a,一个四位数,各位上的数字不重复,从1到9。

b,按以下提示猜出这个四位数。

c,每次猜测输入的数据给出本次共猜对了多少个数字。

e,给出本次猜对的数字并且位置正确的个数。

2.推箱子游戏用二维数组实现三设计思想1猜数字游戏(1)随即数字和输入数字之间实现每一位的比较,需要把其每一位都独立出来才可,这就需要数组来实现存储。

要输出的数据是记录性数据,可以用全局变量实现。

(2)产生四位不同的随机数字,不知道方法。

可以用一次产生一个,然后判断是否合法,再把这一个和其他几个比较如果一样就一直产生。

这样可以产生四个不同的随机数字。

输入的数字为四位不同的数字,为了实现和随机数逐位的比较需要把它拆分为4个数字。

(3)把独立出来的数字比较,对的就把相应的全局变量+1,(4)输出函数要实现输入一次就刷新一次,就需要处理函数循环调用输出函数,这样不是输出间断。

(5)细节。

可以在相应函数设置判断项实现。

游戏中输入错误了,输出函数要输出提示;过关了要提示。

若玩游戏途中要重新开始了,就重新开始函数。

2 推箱子游戏(1)要求用二唯数组实现推箱子游戏(2)总体设置的思路规划。

A代表人,*箱子,O代表箱子要到的位置,@表位箱子到达了位置.1上2下3左4右.5初始化...w 表示墙壁游戏规则,推箱子进入正确位子。

1.数据初始化:屏幕初始化.用2伟数组实现.2.判断是否胜利.3.输出:胜利输出,一般输出4.实现移动5.输出....循环调用实现自动刷新(3)设置初始函数给各数赋值。

(4)输出函数,把数据全部输出。

判断怎么输出,还要循环来实现一步一刷新实现走动。

(5)设置走动函数。

什么情况下可以走动,什么情况下可以推动,可移动就通过字母的赋值实现走动(6)优化细节。

输入错误提示,重玩提示,过关提示,(7)关数的添加。

输出函数,初始函数由于调用的都是比较集中部分数据,可以把不同的输出和初始集成,再调用实现关数的增加。

C推箱子课程设计报告

C推箱子课程设计报告

C推箱子课程设计报告The document was prepared on January 2, 2021目:基于学武汉理工大学华夏学院课程设计报告书课程名称: 软件综合系 名:信息工程系专业班级: 姓 名:指导教师:2013年元月18 H 课程设计任务书学生姓名: ________________ 专业班级: 软件2101指导教师: ________ 工作单位:信息系计算机教研室设计题目:基于VC++的“推箱子”游戏软件的开发与测试初始条件:1. 已完成c 语言程序设计、软件工程、数据库概论或数据库技术等课程的学习2. 系统环境:Intel 奔腾4以上处理器,1G 以上内存,40G 以上硬盘,Windows 编程环境,Visual O+编程工具要求完成白勺主要任务:(在规定的时间内完成下列任务)(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 主要任务:系统完成用户登录及管理员增加、删除、修改、查询功能1. 按系统功能进行游戏背景区域(移动区域、围墙)的设计•与绘制:2. 根据系统实现的功能,绘出功能图、系统流程图3. 模块调试,运行结果正确,并经教师检查及答辩;设计报告撰写格式要求:(课程设计报告按统一通用格式书写)具体内容如下:① 设计任务与要求② 总体方案与说明③程序主要模块的流程图④问题分析与解决方案的设计思想和改进设想⑤系统的调试记录、调试报告(即在调试中遇到的主要问题、解决方法及改进设想)⑥小结与体会附录:①使用说明②参考资料时间安排:2012年12月29日一-2013年元18日(共三周)指导教师签字:2012年12月28日系主任签字:年月日1引言最经典的推箱子游戏,类似的游戏你一定早就玩过。

要控制搬运工上下左右移动,来将箱子推到指定地点记得儿年前,《推箱子》在机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对《推箱子》赞不绝口,可见有深度的益智类游戏是非常受大家欢迎的。

推箱子游戏实习报告书

推箱子游戏实习报告书

信息工程学院数据结构与C语言综合训练报告(2012~2013学年第二学期)报告题目:____推箱子的最短路径_ __姓名:_ __ 程榜____专业:软件工程年级班级:___2012级2班___指导教师:刘全中完成日期: 2013年7月21号一、综合训练目的和要求本综合训练是计算机科学与技术、信息管理与信息系统、软件工程、电子商务专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》、《数据结构》课程后进行的一次全面的综合练习。

本课综合训练的目的和任务:1. 巩固和加深学生对C语言、数据结构课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言、数据结构解决实际问题的能力二、综合训练任务内容1.题目要求:推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个5×5的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个角上那么箱子就不能再被移动了,如果箱子被推到一面墙上,那么箱子只能沿着墙移动.同时,房间里头还有若干障碍物(用阴影部分表示)。

现在给定房间的结构,箱子的位置,搬运工的位置和箱子要被推去的位置,请你计算出搬运工至少要推动箱子多少格.2.扩展实现的内容:绘制图形界面,通过按钮实现推箱子的整个过程,整个过程中可以动态的看到箱子的移动。

游戏界面如下图:游戏动态移动的过程图如下:三、总体设计所用算法主要是根据广度优先搜索,纪录路径,然后利用回溯法实现最短路径的查找并纪录保存下来。

所用的数据结构主要为顺序结构。

四、详细设计说明1、推箱子游戏具有的功能(1)能够显示主菜单和界面游戏需要提供主菜单进行选择,同时能够把地图文件中的信息转换成为图像显示到游戏界面上。

(2)能够实现键盘操作功能能够接收到空格键信息,按照软件内部实现的箱子移动到相应的位置。

c语言实验报告

c语言实验报告

武汉大学2012级C语言及程序设计基础上机实验大作业报告推箱子参与人员[姓名:郑燕青] [学号:2012301500014] [分工:move及show函数] [姓名:王瑶] [学号:2012301500014] [分工:主函数]一、【实验内容】:1.设计一个简单实用推箱子游戏程序。

2. 【开发工具】:Dev-C++ 4.9.9.2二、【推箱子游戏介绍】经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。

在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。

记得几年前,《推箱子》在PC机上刮起了一股不小的益智类游戏的旋风,现在许多资深玩家也都对《推箱子》赞不绝口,可见有深度的益智类游戏是非常受大家欢迎的。

推箱子游戏1981年由日本人今林宏行首创,是在1982年12月由Thinking Rabbit 公司首次发行,名“仓库番”。

箱子只可以推, 不可以拉, 而且一次只能推动一个,胜利条件就是把所有的箱子都推到目的地。

游戏规则:在设定的游戏地图里面,箱子只可以推, 不可以拉, 而且一次只能推动一个。

胜利条件:把所有的箱子都推到目的地。

三、【程序设计要求】:1.地图大小为9*9,,,,。

初始地图如图所示,光标显示在地图下方。

2.使用方向键w,s,a,d代表上,下,左,右方向进行移动,在前进方向上没有墙阻挡时,可以一次移动一格;当与相连接,如果对应方向没有阻挡,按方向键,则可以将箱子推动一格。

3.当将推入到空位置后,消失,被代替。

4.当所有的被推入,游戏结束,屏幕将输出代表胜利的语段。

5.游戏过程中按p键,结束本关,重新选关。

6.游戏过程中按k键,退出程序。

四.【实验步骤与内容】1.用状态数组map[9][9]保存每个坐标的信息,算法思路(当人的四周都没有阻碍的情况下就可以自由行动;当人的相应某个方向上有墙壁的时候,人就不能往相应的方向上行走;当人的相应方向有箱子,箱子的对应方向是墙壁的话也不能推动箱子行走;当人或箱子就在目标地,退出来时候要回复原来目标地的标志)2.主要数据结构及其解释1)头文件及宏定义#include<stdio.h>#include<stdlib.h>#define X 6#define Y 1#define XX 2#define YY 6#define XXX 7#define YYY 42)几个副函数/*输出函数*/void show(char map1[9][9],int level)/*移动函数*/int move(char map2[9][9],int *x,int *y)3)/*判断输入的数据类型是否正确*/while(scanf("%d",&level)!=1){while(getchar()!='\n');system("cls");printf("\n\n 输入数据类型有误,请重新输入\n");printf("\n 本游戏分3关,请选择关卡(0--结束程序退出,1--第一关,2--第二关,3--第三关):");}4)/*移动循环*/for(choice=2;choice=2;){choice=move(map,&x,&y);if(choice==0) break;/*判断是否放弃当前游戏,重新选关*/else if(choice==1) return 0;/*判断是否结束程序,退出*/else if(choice==2)/*判断是否继续游戏*/show(map,level);if(map[X][Y]==5)/*判断是否闯关成功*/{printf("\n\n 亲,恭喜闯过第一关!!!你真聪明!!!继续加油哦!!!!\n\n\n\n");system("PAUSE”);break;/*跳出移动循环,重新选关*/}}5)/*输出地图*/for(i=0;i<9;i++){printf("\n ");for(k=0;k<9;k++){printf(" %c ",map1[i][k]);}}6)/*a--左移*/if(inputdata=='a'){if(map2[*x][*y-1]=='#')/*1、人遇到墙*/{}else{if(map2[*x][*y-1]==5&&map2[*x][*y-2]==0)/*2、推箱子进空地*/{map2[*x][*y]=0;*y-=1;map2[*x][*y]=1;map2[*x][*y-1]=5;}else if(map2[*x][*y-1]==5&&map2[*x][*y-2]==3)/*3、推箱子进目的地*/{map2[*x][*y]=0;*y-=1;map2[*x][*y]=1;map2[*x][*y-1]=5;}else{if(map2[*x][*y-1]==5&&map2[*x][*y-2]=='#')/*4、推箱子遇到墙,推不动*/{}else{if(map2[*x][*y-1]==3)/*5、人进到目的地*/{map2[*x][*y]=0;*y-=1;map2[*x][*y]=1;}else{if(map2[*x][*y]==map2[X][Y]||map2[*x][*y]==map2[XX][YY]||map2[*x][*y]==map2[XXX][YYY])/*6、人退出目的地*/{map2[*x][*y]=3;*y-=1;map2[*x][*y]=1;}else /*7、人进入空地*/{map2[*x][*y]=0;*y-=1;map2[*x][*y]=1;}}}}}}7)/*s--下移*/if(inputdata=='s'){if(map2[*x+1][*y]=='#')/*1、人遇到墙*/{}else{if(map2[*x+1][*y]==5&&map2[*x+2][*y]==0)/*2、推箱子进空地*/{map2[*x][*y]=0;*x+=1;map2[*x][*y]=1;map2[*x+1][*y]=5;}else if(map2[*x+1][*y]==5&&map2[*x+2][*y]==3)/*3、推箱子进目的地*/{map2[*x][*y]=0;*x+=1;map2[*x][*y]=1;map2[*x+1][*y]=5;}else{if(map2[*x+1][*y]==5&&map2[*x+2][*y]=='#')/*4、推箱子遇到墙,推不动*/{}else{if(map2[*x+1][*y]==3)/*5、人进到目的地*/{map2[*x][*y]=0;*x+=1;map2[*x][*y]=1;}else{if(map2[*x][*y]==map2[X][Y]||map2[*x][*y]==map2[XX][YY]||map2[*x][*y]==map2[XXX][YYY])/*6、人退出目的地*/{map2[*x][*y]=3;*x+=1;map2[*x][*y]=1;}else /*7、人进入空地*/{map2[*x][*y]=0;*x+=1;map2[*x][*y]=1;}}}}}}8)/*w--上移*/if(inputdata=='w'){if(map2[*x-1][*y]=='#')/*1、人遇到墙*/{}else{if(map2[*x-1][*y]==5&&map2[*x-2][*y]==0)/*2、推箱子进空地*/{map2[*x][*y]=0;*x-=1;map2[*x][*y]=1;map2[*x-1][*y]=5;}else if(map2[*x-1][*y]==5&&map2[*x-2][*y]==3)/*3、推箱子进目的地*/{map2[*x][*y]=0;*x-=1;map2[*x][*y]=1;map2[*x-1][*y]=5;}else{if(map2[*x-1][*y]==5&&map2[*x-2][*y]=='#')/*4、推箱子遇到墙,推不动*/{}else{if(map2[*x-1][*y]==3)/*5、人进到目的地*/{map2[*x][*y]=0;*x-=1;map2[*x][*y]=1;}else{if(map2[*x][*y]==map2[X][Y]||map2[*x][*y]==map2[XX][YY]||map2[*x][*y]==map2[XXX][YYY])/*6、人退出目的地*/{map2[*x][*y]=3;*x-=1;map2[*x][*y]=1;}else /*7、人进入空地*/{map2[*x][*y]=0;*x-=1;map2[*x][*y]=1;}}}}}}9)/*d--右移*/if(inputdata=='d'){if(map2[*x][*y+1]=='#')/*1、人遇到墙*/{}else{if(map2[*x][*y+1]==5&&map2[*x][*y+2]==0)/*2、推箱子进空地*/{map2[*x][*y]=0;*y+=1;map2[*x][*y]=1;map2[*x][*y+1]=5;}else if(map2[*x][*y+1]==5&&map2[*x][*y+2]==3)/*3、推箱子进目的地*/{map2[*x][*y]=0;*y+=1;map2[*x][*y]=1;map2[*x][*y+1]=5;}else{if(map2[*x][*y+1]==5&&map2[*x][*y+2]=='#')/*4、推箱子遇到墙,推不动*/{}else{if(map2[*x][*y+1]==3)/*5、人进到目的地*/{map2[*x][*y]=0;*y+=1;map2[*x][*y]=1;}else{if(map2[*x][*y]==map2[X][Y]||map2[*x][*y]==map2[XX][YY]||map2[*x][*y]==map2[XXX][YYY])/*6、人退出目的地*/{map2[*x][*y]=3;*y+=1;map2[*x][*y]=1;}else /*7、人进入空地*/{map2[*x][*y]=0;*y+=1;map2[*x][*y]=1;}}}}}}}}}}10)system("cls");/*清屏:清除上一个回车的内容*/11)按下p键,退出本关,重新选关。

C语言课程设计之推箱子游戏报告

C语言课程设计之推箱子游戏报告

山东交通学院C语言课程设计推箱子游戏院(系)别信息科学与电气工程学院班级电气115学号**********姓名董雪指导教师王成时间2012-09-3—2012-09-7课程设计任务书题目推箱子系 (部) 信息科学与电气工程学院专业电气工程及其自动化班级电气115班学生姓名董雪学号 11081252809 月 03 日至 09 月 07 日共 1 周指导教师(签字)系主任(签字)年月日成绩评定表目录前言................................................. 错误!未定义书签。

1 课程设计概述 (9)1.1推箱子游戏软件功能概述 (9)1.2Visual C++6.0概述 (9)2推箱子游戏软件总体设计 (9)2.1推箱子游戏软件总体设计思想 (9)2.2总体设计流程图 (11)3推箱子游戏软件详细设计 (12)3.1两个主要问题 (12)3.1.1 地图的生成 (12)3.1.2 人或人和箱子的移动 (12)4 程序测试 (6)5 课程设计总结 (14)致谢 (15)参考文献............................................... 错误!未定义书签。

6附录(程序源代码) (16)前言随着计算机技术的发展,可视编程技术占有了越来越重要的作用。

Visual C++6.0 是一种功能强大行之有效的可视化编程工具。

因此此软件是在Visual C++6.0环境下编写的。

对于我们,随着学习的深入,已经大体掌握了Visual C++6.0环境下的程序开发。

为了将我们的编程能力提升到一个更高的水平,深化面向对象的编程思维和解决问题的能力,值此课程设计周期间,进行基于Visual C++6.0环境的软件开发,先以推箱子游戏作为开始,对Visual C++6.0环境和C语言的模块编程设计进行回忆和熟悉,有利于促进面向对象程序设计思想的理解,使得在此基础上的下一个软件的开发进行的更加顺利。

c语言课程设计推箱子

c语言课程设计推箱子

c语言课程设计 推箱子一、课程目标知识目标:1. 让学生掌握C语言的基本语法和编程结构,特别是数组、循环和条件语句的应用。

2. 使学生理解程序逻辑和算法设计的基本原理,并能将其应用于推箱子游戏的实现中。

3. 帮助学生理解坐标系统和二维数组在表示游戏地图中的应用。

技能目标:1. 培养学生运用C语言编写程序解决实际问题的能力,特别是在逻辑推理和算法实现方面。

2. 提高学生调试程序和解决问题的技巧,通过推箱子游戏的开发,学会逐步测试和优化代码。

3. 增进学生对编程工具的使用,如编译器和调试器,以及版本控制的基本操作。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,通过完成具有挑战性的推箱子游戏,增强学习C语言的信心和动力。

2. 培养学生的团队合作精神,分组合作完成项目,学会在团队中交流和协作。

3. 增强学生的创新意识和实践能力,鼓励学生尝试不同的解决方案,培养独立思考和问题解决的能力。

课程性质:本课程设计为实践性强的综合课题,结合了C语言编程和游戏设计,旨在通过解决实际问题,提高学生的编程能力和逻辑思维。

学生特点:考虑到学生处于高年级,具备一定的C语言基础,有较强的逻辑思维能力,对编程有较高的兴趣。

教学要求:课程设计需注重理论与实践相结合,强调学生的主动参与和动手实践,注重培养学生的自主学习和问题解决能力。

通过推箱子游戏的实现,将目标分解为具体的学习成果,为教学设计和评估提供明确的方向。

二、教学内容本课程教学内容紧密结合课程目标,确保学生能够系统地掌握C语言编程及相关游戏设计知识。

1. C语言基础语法回顾:包括变量定义、数据类型、运算符、控制结构(如if 语句、循环等)。

- 相关教材章节:第1章至第3章2. 数组和字符串的使用:重点介绍二维数组在表示游戏地图中的应用。

- 相关教材章节:第4章3. 函数的定义与调用:强调模块化编程思想,介绍如何将游戏逻辑分解为多个函数。

- 相关教材章节:第5章4. 算法设计与逻辑推理:介绍推箱子游戏中的算法设计,如深度优先搜索、广度优先搜索等。

推箱子游戏实践报告

推箱子游戏实践报告

推箱子游戏设计实践报告一、游戏介绍在一定的范围里,要求人把木箱从开始位置推放到指定的位置。

由于箱子只能推不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。

该游戏一共有三道关卡,按下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)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。

C语言课程设计报告

C语言课程设计报告

江南大学人文学院课程设计报告2011— 2012学年第 2 学期课程名称《C程序设计基础》设计题目推箱子游戏学生姓名专业班级指导教师2012 年5 月29 日目录1 设计任务书.1.1题目与要求.1.2本程序涉及的知识点.2 设计方案.2.1设计方案思路2.2设计方案结构图.3 算法描述4 源程序代码设计5 总结1设计任务书1.1题目与要求设计一个推箱子游戏。

在设计时必须注意:①必须有一个存放箱子和搬运工的地图,且地图上有墙壁和通道②搬运工应当可以在通道上自由行走③墙壁能够搬运工和箱子,并且它们互不重合④在没有墙壁挡住时,搬运工可以推动箱子行走。

⑤可以手动结束游戏⑥在游戏结束时显示失败或胜利的信息1.2本程序涉及的知识点C语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算逻辑运算自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构)大程序的功能分解方法(即函数的使用)等。

进一步掌握各种函数的应用,包括时间函数、绘图函数等。

2 设计方案2.1设计方案思路①考虑到本程序是一个推箱子游戏程序,因此就要有一个或多个适合本游戏的地图,于是就使的最简洁的二维数组这种方式来表示地图。

②在二维数组地图中使用一些简单的图形来表示搬运工、箱子和目标位置。

③在游戏中会使用到键盘上的方向键,因此还必须定义一读取键盘码的数。

④在主函数里面实现循环求搬运工和箱子的位移坐标。

⑤最后在屏幕上显示游戏的最后结果。

2.2设计方案结构图3 算法描述功能实现的算法,下面是一些游戏步骤的具体操作和功能实现的算法的N-S流程图3.1在主函数外分别定义了箱子结构体、读取键盘码的共用体、读取键盘码的函数,从而来实现在游戏中,能够读取到键盘码,以箱子的坐标属性。

其中,箱子结构体包含坐标属性int x和int y,键盘码共用体包含unsigned intiKeyInfo和char chKeyBit[2],N-S流程图如下定义箱子结构体struct Boxss定义键盘码共用体union keyboard定义读取键盘码的函数int fnGetKey(void)union keyboard uniKey1;bioskey(1)==0;uniKey1.iKeyInfo=bioskey(0);uniKey.chKeyBit[0]==0是否return(uniKey1.chKeyBit[1]) return(uniKey.chKeyBit[0])3.2在主函数里,定义了游戏所需的一些变量、地图、箱子以及实现游戏中的各个环节中所需的变量。

推箱子游戏设计实习报告

推箱子游戏设计实习报告

程序设计实习报告推箱子游戏设计院系:计算机与通信工程学院专业班级:计算机与科学技术1301班学生姓名:刘华龙(1307010112)小组其他成员:管亚南(1307010102)张钰林(1307010122)目录Ⅰ需求分析Ⅱ总体设计一、功能模块设计二、数据结构设计三、函数功能描述四、代码实现Ⅲ详细设计Ⅳ编码Ⅴ综合测试Ⅵ参考文献Ⅰ需求分析1、编写目的:本软件是基于C++语言的一款小型益智小游戏——推箱子。

经典的推箱子是一个来自日本的古老游戏,目的是在训练人的逻辑思考能力。

在一个狭小的仓库中,要求把木箱从开始位置推放到指定的位置。

在仓库有障碍物,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推,不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。

本游戏一共3关,由易到难,每一关都有初化、按键处理、重置及退出功能。

2 产品描述:《推箱子》是单机游戏软件。

游戏的界面是由一些不同的格子绘成了迷宫地图。

当游戏开始时,根据不同的地图,我们需要箱子推放到规定的摆放区域,进入下一关卡。

3 产品功能:《推箱子》软件中,玩家通过移动地图中的小人,进而推上面的箱子,目标将地图中的每个一个箱子都推放到规定摆放的区域,算是完成本关卡,可以进入下一关。

4 按键指令:(1)按键处理包括移动小人和移动箱子,通过移动上下左右键来控制小人的移动,从而推动箱子,以把箱子推到指定的目的地为过关。

(2)每一关都可以重置,按空格键可以重置当前关。

(3)按Esc键可以在任何时候退出游戏。

5 详细功能说明:(1)小人物每次只能推动一个箱子,并且只能使用推的方法来进行游戏。

(2)顺利的将所有的箱子都推到坑当中去,及为顺利通过本关卡,由于本软件中没有设置撤消操作,所以玩家在进行每一步操作的时候,都必须谨慎的走好每一步,并计算好下一步甚至下N步,否则将会一步错则满盘皆输的情况。

Ⅱ总体设计一、软件系统结构设计1、系统模块图本程序包括6个模块,分别是初始化模块、画图模块、移动箱子模块、移动小人模块和功能控制模块,如图(一)所示。

C语言实现简单推箱子游戏

C语言实现简单推箱子游戏

C语⾔实现简单推箱⼦游戏使⽤C语⾔实现超简单的推箱⼦游戏,供⼤家参考,具体内容如下感谢您打开了这篇⽂章,下⾯我将讲述⼀下推箱⼦是如何实现的。

另外附赠适配该程序简单好⽤专属推箱⼦地图编辑器让您在16 * 16⼤地图的条件下也能轻松编辑地图。

链接:本程序在没有检测到地图⽂件的情况下也能独⾃运⾏!代码中储存了推箱⼦游戏第⼀关的标准地图,让您在没有地图⽂件的情况下也能熟悉整个程序的流程!当然,拥有地图⽂件会也会获得更好的游戏体验,请⾃⾏编辑。

废话不多说!下⾯进⼊技术环节:C语⾔版多功能推箱⼦编译环境: Windows VS2019其他编译器,可通过查看下⽂的“注意事项”将代码更正为其他平台可正常版本需求:控制⼈物将箱⼦推⾄⽬标中,⽬标全部完成进⼊下⼀关。

思路:使⽤⼆维数组储存不同数字,数字包括了地图中所有的元素,通过按键控制⼈物完成推箱⼦的操作,达成关卡内的所有⽬标后,⾃动进⼊下⼀关。

做法:主要逻辑移动推箱⼦部分:按下⽅向键后,双重循环找到⼈物,根据移动⽅向储存⼈物、⼈物前⾯、箱⼦、箱⼦前⾯四⼤基础信息,并通过判断前⽅数组值是否是墙壁、⽬标等,进⾏⼈物移动和箱⼦移动操作。

具体详细做法我已经整理到了代码注释当中,以便⼀⼀对应查看。

使⽤到知识点:循环、⼆维数组、读取⽂件难点:在⼈物和箱⼦移动的同时,有需要注意当⼈物移动到了未完成⽬标或已完成⽬标、箱⼦移动到了已完成⽬标的情况,这种情况需要判断在⼈物/箱⼦离开之后,原地⼜再次变为原元素。

说明:程序前部分有较多代码⽤于写出未检测到⽂件的情况逻辑和关卡选择逻辑,如果要直接查看核⼼代码请移动到operation();操作⼈物函数和gbszszhs(char ch);修改⼆维数组函数。

注意:由于编译器原因,程序中_kbhit()和_getch()函数可能在其他编译器上编译会出现错误,解决办法是去掉函数前⾯的“_”。

同时,要将⽂件打开函数fopen_s(&fp, FLPA, “r”);更改为fp = fopen(FLPA, “r”);fcanf_s更改为fcanf scanf_s()更改为scanf运⾏效果:菜单选择:游戏进⾏:代码实现:#include <stdio.h>#include <windows.h>#include <conio.h>//0代表空地,1代表墙,2代表未达成的⽬标,3代表箱⼦,4代表玩家,5代表已放箱⼦的⽬标,//6代表⼈暂时所在的未达成的⽬标,7代表⼈暂时所在的已达成的⽬标,8代表箱⼦暂时所在的已达成的⽬标#define WH 16 //地图的宽⾼#define BYT 529 //⼀关需要跳过的字数因为⽂件指针定位函数的原因,有时定位可能会不准确,可以通过修改BYT进⾏适配#define FLPA "C:\\Users\\ASUS\\Desktop\\推箱⼦地图.txt" //需要读取地图⽂件的路径游戏之前需进⾏设置!!//找不到路径将只能进⾏第⼀关游戏//注意:游戏地图边界不可以当做墙壁使⽤!#define INITMAP \int mapch_init[WH][WH] = { \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0}, \{0, 0, 0, 0, 1, 1, 1, 3, 0, 3, 2, 1, 0, 0, 0, 0}, \{0, 0, 0, 0, 1, 2, 0, 3, 4, 1, 1, 1, 0, 0, 0, 0}, \{0, 0, 0, 0, 1, 1, 1, 1, 3, 1, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, \};int mapch[WH][WH];//所有函数之间不是独⽴和顺序的,会互相调⽤void HideCursor(); //隐藏光标void gotoxy(int x, int y);//光标定位void scmbxyhs(); //输出地图下⽅⽂字信息函数void wjzdwjzjjrqk(); //未找到⽂件直接进⼊第⼀关情况int gkxzhs(); //关卡选择函数void cwjzjrwkdhs(); //从⽂件中进⼊关卡的函数void gnxzjm(); //主菜单选择void cshhs(); //初始化函数void tranmap(); //翻译并画出地图void detection(); //寻找所有该地图中未完成的⽬标void gktgszxhs(); //判断关卡是否通过,是进⾏下⼀关卡void operation(); //操作⼈物主要函数***void gbszszhs(char ch); //改变数组数值函数int updatetime(); //获取⼀次电脑现在的时间void process(); //主要流程int main(){cshhs(); //初始化函数process(); //主要流程return 0;}//游戏开始初始化部分void scmbxyhs() //输出地图提⽰信息函数{gotoxy(34, 17);printf("本关剩余⽬标数:");gotoxy(34, 19);printf("本关已⾛步数:");gotoxy(32, 21);printf("您使⽤秒完成了本关!");gotoxy(49, 19);printf("0"); //输出初始的步数0}void wjzdwjzjjrqk() //未找到⽂件直接进⼊第⼀关情况{system("cls");printf("地图⽂件不存在,\n直接进⼊第⼀关");INITMAP //初始地图数组for (int i = 0; i < WH; i ) //如果地图⽂件不存在则将初始地图数组的值赋给需要使⽤的地图for (int j = 0; j < WH; j ) //将初始地图数组的值复制给当前地图数组mapch[i][j] = mapch_init[i][j];Sleep(2000); //等待两秒进⼊第⼀关system("cls"); //清屏tranmap(); //画出初始地图detection(); //⽬标信息scmbxyhs(); //输出地图下⽅⽂字信息}int n = 1; //输⼊关卡变量**int maxn = 0; //最⼤关数int dczdgshs() //最⼤关数{FILE* fp = NULL; //因为⽤于提⽰和限制输⼊情况,所以需要得到最⼤关卡数maxnfopen_s(&fp, FLPA, "r");if (fp == NULL){wjzdwjzjjrqk(); //未找到⽂件直接进⼊第⼀关情况return 0;}int temp = 0; //临时变量⽤来统计地图⽂件全字节数rewind(fp); //⽂件指针移动到⽂件⾸部while (!feof(fp)) //⽂件指针还没有到⽂件尾进⼊循环{fgetc(fp); //读字符函数从⽂件开头读,向后移动⽂件指针temp ; //每读⼀个字符则临时变量⾃增,统计出全⽂件有⼏个字符}fclose(fp); //⽂件使⽤完成关闭⽂件maxn = temp / BYT 1; //最⼤关数就是所有字符的数量除以⼀关的字符数return 1;}int gkxzhs() //选择关卡函数{system("cls"); //输出关卡选择提⽰gotoxy(26, 8);printf("请输⼊想要挑战的关卡:(回车确认)");if (!dczdgshs()) //得出最⼤关数函数,返回值为0代表未找到地图⽂件,直接进⼊流程return 0;gotoxy(36, 10);printf("请输⼊1- %d ", maxn);//输出提⽰最⼤关数信息srgk: //重新选择关卡gotoxy(41, 12);scanf_s("%d", &n);if (n<1 || n>maxn) //对输⼊的错误关卡信息加以限制{gotoxy(36, 12);printf(" ");gotoxy(33, 11);printf("请输⼊正确的关数");goto srgk; //如果输⼊错误的关卡输出提⽰信息并返回到输⼊的地⽅重新输⼊}return 1; //如果找到了⽂件就返回1}void cwjzjrwkdhs() //从⽂件中进⼊关卡,适⽤于可以找到地图⽂件的情况{//关数变量n的默认初始化值为1FILE* fp = NULL;fopen_s(&fp, FLPA, "rb");if (fp == NULL){wjzdwjzjjrqk(); //直接进⼊第⼀关函数return; //地图⽂件不存在则直接进⼊第⼀关}//读⽂件进⼊关卡的代码,从第⼀关进⼊和选择特定关从n关进⼊两种情况都会执⾏//流程如果⽤到该函数,检测已达成的⽬标和未达成⽬标的个数⼀直则调⽤函数,n关数⾃增1 int skip = (n - 1) * BYT; //到n关需要跳过的字数跳过⼀关需要的字数为512fseek(fp, skip, 0); //定位到地图⽂件第skip个字节处开始读取int i, j;for (i = 0; i < WH; i ) //读取512个字符{for (j = 0; j < WH; j ){fscanf_s(fp, "%d ", &mapch[i][j]);//格式读函数,直接以整数格式读取数值存⼊地图数组mapch中printf("%d ", mapch[i][j]);}printf("\n");}fclose(fp); //读取⽂件完毕,将⽂件关闭system("cls");}void gnxzjm() //主菜单页⾯选择{system("cls");gotoxy(39, 8);printf("推箱⼦");gotoxy(34, 10);printf("输⼊1 开始新游戏");gotoxy(34, 12);printf("输⼊2 选择关卡");gotoxy(34, 14);printf("输⼊3 退出游戏");Head: //⽤于返回的标签gotoxy(34, 17);char chn=_getch(); //选择游戏模式if (chn == '3'){system("cls"); //退出游戏则输出提⽰信息gotoxy(34, 12);printf("欢迎下次光临");Sleep(2000);gotoxy(0, 24);exit(0); //退出游戏}else if (chn == '2'){if (!gkxzhs()) //进⼊关卡选择return; //如果关卡选择函数返回值为0则代表未找到⽂件,直接跳出初始化函数//如果返回1找到⽂件则继续执⾏该函数下⾯的内容}else if (chn == '1')n = 1; //如果选择新游戏,直接从第⼀关开始else{gotoxy(34, 16);printf("请输⼊正确的选择:");goto Head; //选择错误的菜单,则重新返回选择菜单的地⽅}//选择1的情况:cwjzjrwkdhs(); //从⽂件读取关卡的函数detection(); //统计当前关卡的⽬标数tranmap(); //画出地图scmbxyhs(); //输出地图下⽅⽂字信息}int detunf;//检测未完成⽬标的变量,初始为⼀个关卡中未完成⽬标的个数,箱⼦碰到未完成⽬标时,⾃减void detection() //检测当前关中有多少个⽬标{//detunfdetunf = 0; //从0开始统计int i, j;for (i = 0; i < WH; i )for (j = 0; j < WH; j )if (mapch[i][j] == 2)detunf ;gotoxy(50,17); //在提⽰信息的位置输出剩余⽬标信息printf("%d", detunf);}void cshhs() //总初始化函数{system("title 推箱⼦");//控制台标题system("mode con cols=84 lines=26");//设置控制台⼤⼩,第⼀个参数为横轴,地图参数32 16gnxzjm(); //主菜单页⾯选择HideCursor(); //隐藏光标函数dczdgshs(); //找到地图⽂件的情况下得出最⼤关数}//游戏流程部分void tranmap() //翻译地图{gotoxy(26, 1); //输出地图时在控制台中间输出,地图最上⽅空⼀⾏int i, j;for (i = 0; i < WH; i ){for (j = 0; j < WH; j ){if (mapch[i][j] == 1)printf("■");else if (mapch[i][j] == 2)printf("★");else if (mapch[i][j] == 3 || mapch[i][j] == 8)printf("●");else if (mapch[i][j] == 4 || mapch[i][j] == 6 || mapch[i][j] == 7)printf("♀");else if (mapch[i][j] == 5)printf("--");elseprintf(" ");}gotoxy(26, i 1); //根据数组的y轴更改地图输出的y轴,地图最上⽅空⼀⾏}}int opnum; //每⼀关⾏⾛的步数int time;int time_2;void gktgszxhs() //判断当前关卡是否通过,是进⼊下⼀关{if (detunf == 0) //当前关卡⽬标为0时{n ; //关卡变量⾃增if (n > maxn) //如果关数n⼤于了最⼤关卡数则返回主菜单{tranmap(); //画出地图gotoxy(26, 22);printf("您已通关所有关卡,3秒后返回主菜单!");Sleep(3000); //等待三秒opnum = 0, time = updatetime(),time_2 = 0;//⾏⾛的步数,本关时间清0,重新获取当前时间,\因为需要输出的time_2是⽤当前时间-刚开始的时间gnxzjm(); //主菜单页⾯选择函数}else{tranmap(); //画出地图Sleep(2000); //等候两秒cwjzjrwkdhs(); //当前关卡⽬标为0时,从⽂件中向地图数组中读⼊下⼀关卡的信息detection(); //统计当前关卡⽬标个数scmbxyhs(); //输出地图下⽅的信息opnum = 0, time = updatetime(),time_2 = 0;//注释见297⾏//按键结束之后操控函数会调⽤画出地图函数}}}int i, j; //找到后的⼈的坐标int box_x, box_y; //箱⼦的坐标int boxnext_x, boxnext_y; //箱⼦前⾯的坐标int peonext_x, peonext_y; //⼈前⾯的坐标void gbszszhs(char ch) //修改地图数组值主要函数**{for (i = 0; i < WH; i ) //遍历 i是y轴,j是x轴{for (j = 0; j < WH; j ){if (mapch[i][j] == 4 || mapch[i][j] == 6 || mapch[i][j] == 7) //找到⼈的位置{if (ch == 'w') // ⽤于确定不同⽅向上箱⼦、箱⼦前⾯、⼈前⾯的坐标{box_y = i - 1; box_x = j; //箱⼦当前boxnext_y = i - 2; boxnext_x = j; //箱⼦前⾯peonext_y = i - 1; peonext_x = j; //⼈前⾯}else if (ch == 'a'){box_y = i; box_x = j - 1;boxnext_y = i; boxnext_x = j - 2;peonext_y = i; peonext_x = j - 1;}else if (ch == 's'){box_y = i 1; box_x = j;boxnext_y = i 2; boxnext_x = j;peonext_y = i 1; peonext_x = j;}else if (ch == 'd'){box_y = i; box_x = j 1;boxnext_y = i; boxnext_x = j 2;peonext_y = i; peonext_x = j 1;}//排除⼤的错误if (mapch[box_y][box_x] == 3 || mapch[box_y][box_x] == 8) //如果⼈的前边是箱⼦if (mapch[boxnext_y][boxnext_x] == 1 || mapch[boxnext_y][boxnext_x] == 3 || mapch[boxnext_y][boxnext_x] == 8) return; //如果箱⼦前边是墙或者是箱⼦直接结束修改函数if (mapch[box_y][box_x] == 1) //⼈的前边不能是墙return; //如果⼈的前边是墙直接结束修改opnum ; //每次有效操作步数⾃增⼀次,并输出gotoxy(49, 19);printf("%d", opnum);//步数//箱⼦改变if (mapch[box_y][box_x] == 3 || mapch[box_y][box_x] == 8) //如果⼈的前边是箱⼦{//箱⼦原地改变:if (mapch[box_y][box_x] == 3) //如果箱⼦所在的位置是⼀般箱⼦mapch[box_y][box_x] = 0; //改变为空地else if (mapch[box_y][box_x] == 8) //如果箱⼦所在的位置是箱⼦暂时所在已达成的⽬标mapch[box_y][box_x] = 5; //改变为已达成的⽬标//箱⼦的下⼀步改变:if (mapch[boxnext_y][boxnext_x] == 2) //如果箱⼦前⾯的格⼦是未放箱⼦的⽬标{mapch[boxnext_y][boxnext_x] = 5; //则该格⼦变为已放箱⼦的⽬标detunf--; //本关⽬标减1gotoxy(50, 17); //输出本关剩余⽬标个数printf("%d", detunf);}else if (mapch[boxnext_y][boxnext_x] == 0) //如果箱⼦前⾯是空地mapch[boxnext_y][boxnext_x] = 3; //则变为普通箱⼦else if (mapch[boxnext_y][boxnext_x] == 5) //如果箱⼦前⾯是已经放过箱⼦的⽬标mapch[boxnext_y][boxnext_x] = 8; //则变为箱⼦暂时所在已达成的⽬标}//原地改变if (mapch[i][j] == 6)mapch[i][j] = 2; //⾛出去之后原地⼜变回2 未达成的⽬标else if (mapch[i][j] == 7)mapch[i][j] = 5; //⾛出去之后原地⼜变回5 已达成的⽬标else if (mapch[i][j] == 4)mapch[i][j] = 0; //⾛出去之后原地变回4 ⼈的原型//⼈下⼀步改变if (mapch[peonext_y][peonext_x] == 0 || mapch[peonext_y][peonext_y] == 3)//如果他的下⼀步是普通箱⼦或者空地 mapch[peonext_y][peonext_x] = 4; //⼈是普通的⼈if (mapch[peonext_y][peonext_x] == 2) //如果他的下⼀步还是未达成的⽬标mapch[peonext_y][peonext_x] = 6; //⼈是⼈暂时所在未达成的⽬标if (mapch[peonext_y][peonext_x] == 5) //如果⼈的下⼀步是已经达成的⽬标mapch[peonext_y][peonext_x] = 7; //⼈是⼈暂时所在已经达成的⽬标if (mapch[peonext_y][peonext_x] == 8) //如果⼈的下⼀步是箱⼦暂时所在已达成的⽬标mapch[peonext_y][peonext_x] = 7; //⼈还是暂时所在已达成的⽬标goto L1; //修改完成后不需要遍历后⾯的数组,直接跳出所有循环}}}L1: //⽤于跳出的标签gktgszxhs(); //关卡通过则进⼊下⼀关}void operation() //操作⼈物函数{char ch = _getch(); //接收输⼊的⽅向 _getch()即使接收switch (ch){case 'w': //向不同⽅向移动gbszszhs(ch); //传递参数,修改⼆维数组break;case 'a':gbszszhs(ch);break;case 's':gbszszhs(ch);break;case 'd':gbszszhs(ch);break;}tranmap(); //重新画出地图}int updatetime() //获取⼀次电脑现在的时间{int now;SYSTEMTIME system_time;GetLocalTime(&system_time);now = system_time.wMinute * 60 system_time.wSecond;return now;}void process() //主要流程{time = updatetime(); //初始时间while (1){time_2 = updatetime() - time; //每关的时间time_2,值为当前时间减去当前关卡开始的时间gotoxy(39, 21);printf("%d s", time_2); //输出if(_kbhit())operation(); //操作⼈物、修改数值主要函数Sleep(20); //游戏帧率和⼿感休眠时间}}void gotoxy(int x, int y) //光标定位{COORD pos = { x,y };SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);}void HideCursor() //光标隐藏{CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);}主要函数:gbszszhs()⾥⾯的逻辑是⽐较复杂的,我当时写这段代码的时候也是反反复复修改好多次甚⾄推翻重做才理通顺这些逻辑的。

推箱子程序设计实训报告

推箱子程序设计实训报告

一、实训背景与目的随着计算机技术的发展,程序设计已成为计算机科学与技术专业学生必须掌握的核心技能之一。

为了提高学生的编程能力、逻辑思维能力和团队协作能力,我们选择了“推箱子”游戏作为程序设计实训的项目。

推箱子游戏是一款经典的益智游戏,玩家需要通过控制角色将箱子推到指定位置,游戏中包含多种障碍和复杂路径,对玩家的策略思维和操作技巧提出了挑战。

本次实训旨在通过设计和实现推箱子游戏,让学生掌握以下技能:1. 熟悉C语言编程环境,掌握基本的语法和编程技巧。

2. 理解数据结构和算法在游戏设计中的应用。

3. 学会使用图形库进行游戏界面设计。

4. 提高团队协作能力和沟通能力。

二、实训内容本次实训分为以下几个阶段:1. 需求分析:明确游戏的目标、规则和功能,确定游戏界面和交互方式。

2. 系统设计:设计游戏的数据结构、算法和流程图。

3. 编码实现:使用C语言编写游戏代码,实现游戏功能。

4. 测试与调试:对游戏进行测试,修复bug,优化性能。

5. 文档编写:撰写实训报告,总结实训过程和经验。

三、系统设计1. 数据结构:游戏使用二维数组存储地图信息,包括墙壁、箱子、目标点、玩家位置等。

同时,使用结构体存储玩家的状态,包括位置、方向、速度等。

2. 算法:游戏采用穷举法寻找最短路径,将玩家的移动方向和箱子移动方向进行组合,遍历所有可能的移动方案,找到最短路径。

3. 流程图:游戏流程包括初始化、游戏循环、输入处理、移动计算、碰撞检测、界面绘制等。

四、编码实现1. 初始化:读取地图数据,初始化玩家、箱子、目标点等状态。

2. 游戏循环:不断检测玩家的输入,根据输入更新玩家的状态,计算箱子移动方向,进行碰撞检测和地图更新。

3. 输入处理:监听键盘输入,根据输入更新玩家的移动方向。

4. 移动计算:根据玩家的移动方向计算箱子移动方向,更新箱子和玩家的位置。

5. 碰撞检测:检测玩家和箱子是否与墙壁、其他箱子或目标点发生碰撞,根据碰撞结果调整移动方向或停止移动。

推箱子C语言课程设计

推箱子C语言课程设计

需要的话,加QQ:42701618《C语言课程设计》报告C Program Experiment Designing一、C语言课程设计目的及要求目的:根据课堂讲授内容,学生做相应的自主练习,消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题,逐渐培养学生的编程能力、用计算机解决实际问题的能力。

要求:1.熟悉Turbo C 的编程环境、主要菜单功能。

2.通过上机验证运算符、表达式、运算规则、函数使用。

3.熟练使用C语言的典型语句编写简单程序。

4.调试典型例题或习题。

5.提高上机编程能力二、实验类型设计类型三、实验学时40学时四、实验设备微型计算机、WINDOWS98以上版本的操作系统、Turbo C2.0 软件一套五、C语言课程参考教材:1. C语言程序设计清华大学出版社马靖善主编2 谭浩强.C语言程序设计(第三版).北京:高等教育出版社,2002题目:推箱子1.基本功能介绍:本程序为游戏推箱子,该程序的基本功能有:推箱子游戏的求解难度比其他游戏高很多。

有一些游戏有固定的解法,比如魔方。

Windows经典小游戏扫雷可以总结出通用推理规则(请参见作者的“自动扫雷”中的说明)。

一些游戏的搜索空间很小,可以用电脑蛮力求解,比如华容道,每一步只有两三种可能性。

有一些游戏虽然搜索空间比较大,但是可以给电脑制定启发式搜索规则,让电脑比较“智能”地进行搜索,比如空当接龙,作者的空当接龙工具就是让电脑向着理顺牌的次序的方向前进。

推箱子游戏的搜索空间极大,又没有合适的一般方法。

人可以总结出一些模糊的规则,但是这些规则非常难以用程序语言描述。

推箱子问题已经被证明是一种“NP-难的问题”,“NP-难的问题”是计算机领域中至今没有找到有效算法的一类著名难题。

目前,根本不存在对所有推箱子问题都能有效求解的方法。

网上现有的程序一般只能有效地解决10×10大小之内的题目。

我的程序也不例外。

c语言推箱子源代码及实验报告

c语言推箱子源代码及实验报告

《C语言推箱子源代码及实验报告》一、概述随着计算机科学技术的迅速发展,编程语言成为了计算机科学领域的重要组成部分。

C语言作为一种通用的编程语言,被广泛应用于系统软件,应用软件,驱动程序等领域。

本次实验将用C语言实现一个推箱子的小游戏,并编写实验报告。

二、实验目的1. 掌握C语言的基本语法和编程技巧;2. 学习如何利用C语言实现简单的游戏功能;3. 提高对C语言的理解和运用能力。

三、实验内容1. 设计并编写一个推箱子的小游戏;2. 实现游戏中的推箱子逻辑,包括箱子的移动、目标检测等功能;3. 编写实验报告,记录游戏设计思路、源代码分析和遇到的问题及解决方法。

四、实验步骤1. 设计游戏地图- 定义地图大小和布局- 设计箱子、目标点和玩家的初始位置2. 确定游戏规则- 确定箱子和玩家的移动规则- 确定胜利条件和失败条件3. 编写C语言代码- 定义地图的数据结构- 实现游戏初始化和终止的函数- 实现玩家和箱子的移动函数- 实现胜利和失败条件的检测函数4. 调试和测试- 对代码进行调试,确保游戏逻辑正确 - 测试不同情况下的游戏表现五、源代码展示以下展示部分游戏源代码:```#include <stdio.h>#include <stdlib.h>#include <conio.h>int m本人n() {// 游戏初始化initMap();drawMap();while(1) {// 监听玩家输入char input = getch();// 根据玩家输入移动玩家或者箱子 // 绘制移动后的地图// 判断胜利或失败条件// 提示玩家胜利或失败}return 0;}```六、实验结果分析通过本次实验,我们成功实现了一个简单的推箱子游戏。

在编写代码的过程中,我们熟练掌握了C语言的各种语法和逻辑结构,同时也加深了对C语言的理解和应用。

七、实验总结本次实验不仅让我们掌握了C语言的编程技巧,还提高了我们的逻辑思维能力和问题解决能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

福建工程学院计算机与信息科学系
实验报告
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.");/*输出一些控制信息*/。

相关文档
最新文档