推箱子C语言课程设计
c课程设计推箱子

c 课程设计推箱子一、教学目标本课程的教学目标是使学生掌握推箱子游戏的算法和编程技巧,培养学生的逻辑思维能力和问题解决能力。
具体目标如下:知识目标:使学生了解推箱子游戏的基本概念和算法,理解游戏编程的基本原理。
技能目标:培养学生能够独立完成推箱子游戏的编程和调试,提高学生的编程实践能力。
情感态度价值观目标:培养学生对计算机科学的兴趣和热情,培养学生的创新精神和团队合作意识。
二、教学内容本课程的教学内容主要包括推箱子游戏的基本概念、算法和编程技巧。
具体安排如下:第一章:推箱子游戏概述,介绍推箱子游戏的基本概念和特点。
第二章:推箱子游戏的算法,讲解推箱子游戏的解决方法和算法实现。
第三章:推箱子游戏的编程,介绍推箱子游戏的编程语言和编程技巧。
第四章:推箱子游戏的调试和优化,讲解如何对推箱子游戏进行调试和优化。
三、教学方法本课程的教学方法主要包括讲授法、案例分析法和实验法。
具体使用如下:讲授法:用于讲解推箱子游戏的基本概念、算法和编程技巧。
案例分析法:通过分析具体的推箱子游戏案例,使学生更好地理解和掌握相关知识。
实验法:让学生通过实际编程和调试推箱子游戏,提高学生的实践能力。
四、教学资源本课程的教学资源主要包括教材、参考书、多媒体资料和实验设备。
具体使用如下:教材和参考书:为学生提供推箱子游戏的基本概念、算法和编程技巧的学习资料。
多媒体资料:通过视频、动画等形式,为学生提供更为直观的学习资源。
实验设备:为学生提供实际编程和调试推箱子游戏的硬件支持。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以保证评估的客观性和公正性。
平时表现评估:通过观察学生在课堂上的参与程度、提问回答和小组讨论表现,评估学生的学习态度和理解能力。
作业评估:通过布置相关的编程练习和推箱子游戏设计任务,评估学生的实践能力和问题解决能力。
考试评估:通过期末考试,评估学生对推箱子游戏算法和编程技巧的掌握程度。
六、教学安排本课程的教学安排将按照推箱子游戏的基本概念、算法和编程技巧的顺序进行,确保学生在有限的时间内掌握课程内容。
推箱子c语言课程设计

推箱子c语言课程设计一、教学目标本课程的教学目标是使学生掌握C语言的基本语法和编程技巧,通过推箱子游戏的项目实践,培养学生的实际编程能力和问题解决能力。
知识目标包括C语言的基本数据类型、控制结构、函数等,技能目标涵盖程序设计的基本步骤,如需求分析、设计算法、编写代码和调试程序。
情感态度价值观目标则在于培养学生对计算机科学的兴趣,增强创新意识和团队协作精神。
二、教学内容教学内容围绕C语言的核心知识点展开,包括:变量和数据类型、运算符和表达式、条件语句和循环语句、函数和数组、指针、结构体和文件操作。
结合推箱子游戏项目,讲解如何实现游戏逻辑、图形界面显示和用户交互。
具体到教材章节,覆盖第1-7章内容,重点讲解第4章函数和第6章指针。
三、教学方法教学中采用讲授法讲解理论知识,案例分析法分析游戏编程实例,实验法进行编程实践。
通过小组讨论和互助合作,激发学生的学习兴趣和主动性,培养分析问题和解决问题的能力。
结合课堂讲解和课后实践,让学生在实践中巩固知识,提高编程技能。
四、教学资源教学资源包括《C程序设计语言》教材、相关参考书籍、在线编程教程和视频资源,以及实验室的计算机和编程环境。
此外,利用网络资源搜集推箱子游戏的源代码和案例分析,供学生参考学习。
教学资源的选择和准备旨在支持教学内容的实施,丰富学生的学习体验,提高学习效果。
五、教学评估本课程的评估方式包括平时表现、作业、考试三个部分,各占总分比的30%、30%、40%。
平时表现主要评估学生的课堂参与度、提问和回答问题的积极性,以及小组合作表现。
作业分为课后练习和小项目,旨在巩固课堂知识和培养编程技能。
考试包括笔试和上机操作,全面测试学生的C语言掌握程度和游戏项目实践能力。
评估方式客观、公正,能全面反映学生的学习成果。
六、教学安排本课程共32课时,安排在学期内的每周二、四晚7点至9点进行,共计16周完成。
教学地点选在学校的计算机实验室,以便学生随时进行实践操作。
推箱子游戏课程设计c

推箱子游戏课程设计c一、课程目标知识目标:1. 学生能够理解推箱子游戏中的程序设计基本概念,掌握游戏规则逻辑表达方法。
2. 学生能够运用所学编程知识,设计并实现具有基本功能的推箱子游戏。
3. 学生理解并掌握游戏中坐标系统、角色移动算法和碰撞检测的相关知识。
技能目标:1. 学生通过实践操作,提高逻辑思维和问题解决能力,能够将复杂问题分解为简单步骤。
2. 学生培养独立编程能力,学会使用合适的编程语句和结构来实现游戏逻辑。
3. 学生通过小组合作,锻炼团队协作和沟通技巧,共同完成游戏设计任务。
情感态度价值观目标:1. 学生培养对计算机编程的兴趣,激发创造力和探究精神,形成积极的学习态度。
2. 学生在游戏设计过程中,学会面对挑战,培养坚持不懈和解决问题的耐心。
3. 学生通过推箱子游戏,理解编程在生活中的应用,认识到科技与日常生活紧密相关,增强社会责任感。
课程性质:本课程为信息技术课程,以实践操作为主,理论讲解为辅,注重培养学生的动手能力和实际应用能力。
学生特点:考虑到学生所在年级,课程内容设计将结合学生好奇心强、动手欲望高、团队协作意识逐步形成等特点。
教学要求:课程要求学生在掌握编程基础知识上,通过实践加深理解,鼓励创新思维和团队合作,实现游戏设计的目标。
教学过程将目标分解,确保每个学生都能达到具体的学习成果,为后续学习奠定基础。
二、教学内容1. 理论知识:- 游戏设计基本概念:游戏规则、游戏流程、角色与道具。
- 编程语言基础:变量、数据类型、运算符、控制结构(条件语句、循环语句)。
- 坐标系统与图形用户界面:理解坐标系在游戏中的应用,掌握简单图形界面的构建。
2. 实践操作:- 推箱子游戏规则设计:学习如何将游戏规则转化为程序逻辑。
- 角色移动算法:掌握角色在不同方向上的移动算法实现。
- 碰撞检测:学习如何检测角色与箱子、墙壁之间的碰撞。
3. 教学大纲:- 第一阶段:游戏设计基本概念学习,介绍推箱子游戏,引导学生分析游戏规则。
C语言课程设计 推箱子

本文档从概要设计,详细设计,参考源程序代码以及显示程序运行的截屏等方 面详尽的介绍了软件开发过程。
此次推箱子游戏软件的开发目的是使我们用最基础的 C 语言程序设计的方式来 思考和解决问题的能力,并且可以掌握二维数组的使用、循环控制的使用、地图的 设计和使用以及 C 语言语法。
通过此游戏可以锻炼一个人的逻辑思维能力。
1.2Visual C++6.0 概述
Visual C++是微软公司的重要产品之一, 是一种功能强大行之有效的可视化编 程工具。它提供了 MFC 类库,使用户可以方便的开发自己想实现的功能。Visual C++6.0 的主要特点:
2.图纸部分: 程序流程图
是
开始
输入 1 或 2 或 3 或 q
否
输入 1
是
输出地图 1
输入 2
否 是
输出地图 2
输入按键
输入按键
input=q
否
推箱子移动
Input=q
是
否
推箱子移动
箱子都到
否
目的地
是
第一关结束 在输入按键
否
箱子都到 目的地
是
游戏通关
是
Input=y
结束
否
四、进程安排
第一天:分析问题,找出大体的设计思路。 第二天:构造出程序大体框架,即各种功能模块的组合。 第三天:分别写出个功能模块程序的源代码。 第四天:讲个功能模块加入主程序中,并实现所有的程序基本功能。 第五天:优化程序中的不足之处,优化显示界面,添加辅助功能模块增加程序
推箱子C课程设计报告

程序设计课程设计报告书学生:孟祥煜指导老师: 曾宇容课程设计名称:推箱子小游戏班级: 软件11401一、设计任务介绍推箱子游戏得实现方法,并逐步介绍C语言图形编程得方法与技巧。
在C语言编写软件WIN-TC上,涉及软中断、二维数组、键盘操作及图形化函数等方法,显示器中断寄存器得设置、二维数组得定义、键盘上键值得获取、图形方式下光标得显示与定位,以及部分图形函数得使用实现了一个完整得推箱子游戏界面,界面清晰可见。
二、设计目得训练学生掌握C得数据结构与综合编程能力与游戏开发技巧等应用能力。
初步设想推箱子就是一款经典得益智小游戏,目得就是在训练人得逻辑思考能力。
在一个狭小得空间中,要求把木箱从起始位置处推放到指定位置。
在空间中有地方限制,稍不小心就会出现箱子无法移动或者通道被堵住得情况,而且箱子只能推不能拉,所以需要玩家巧妙得利用有限得空间与通道,合理得移动次序与位置,才能完成任务。
本游戏一共分14关,由易到难,每一关都随着关数得增加来增加难度,从而达到吸引游戏玩家得目得。
三功能1、菜单功能,玩家通过瞧目录按对应得键可以进入对应得功能菜单,其中1进入游戏,2选择游戏关卡,3游戏帮助指南 ,4退出游戏。
2 游戏功能: 玩家可以通过操纵键盘中得上下左右键进入游戏进行各种操作来完成游戏。
3 循环功能:当玩家正在游戏得时候如果某一步走错了,导致游戏无法完成,可以随时重新开始游戏来完成关卡,游戏过程中可以随时按Ctrl+V退出游戏。
4 顺序功能:当玩家完成了某一关之后,随着进入下一关门可以按顺序进入下一关,继续开始更有挑战得关卡,如果该关就是最后一关,则显示通关完成。
三、总体设计1、功能模块设计函数功能描述本程序包括5个模块,分别就是初始化模块、画图模块、移动箱子模块、移动小人模块与功能控制模块。
各个模块功能得功能描述如下:(1)初始化模块。
该模块包括屏幕初始化与游戏第一关到第最后一关得初始化。
屏幕初始化用于输出欢迎信息与操作提示,游戏每一关得初始化就是构建每一关得关卡。
c语音课程设计推箱子

c语音课程设计推箱子一、教学目标本课程的教学目标是使学生掌握C语音的基本语法和编程技巧,能够运用C语言进行简单的程序设计。
具体分为以下三个方面的目标:1.知识目标:使学生了解C语言的基本语法、数据类型、运算符、控制结构、函数等基本概念,掌握基本的编程技巧。
2.技能目标:通过课堂学习和上机实践,使学生能够熟练使用C语言进行编程,具备一定的程序设计能力。
3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生的问题解决能力和创新意识,培养学生的团队协作精神。
二、教学内容本课程的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等,具体包括以下几个方面的内容:1.C语言的基本语法和编程规范。
2.数据类型、运算符和表达式。
3.控制结构:条件语句、循环语句。
4.函数:函数的定义、调用和返回值。
5.数组、字符串和指针。
6.结构体、联合体和枚举类型。
7.文件操作。
三、教学方法为了达到本课程的教学目标,我们将采用以下几种教学方法:1.讲授法:通过讲解C语言的基本概念和语法,使学生掌握C语言的基本知识。
2.案例分析法:通过分析典型的C语言程序,使学生了解C语言的应用和编程技巧。
3.实验法:通过上机实验,使学生巩固所学的知识,提高编程能力。
4.讨论法:学生进行课堂讨论,培养学生的团队协作能力和创新意识。
四、教学资源为了保证本课程的顺利进行,我们将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:提供一些相关的参考书籍,供学生课后自学。
3.多媒体资料:制作课件和教学视频,丰富教学手段。
4.实验设备:提供计算机实验室,供学生上机实践。
五、教学评估为了全面、客观地评估学生的学习成果,本课程将采用以下几种评估方式:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和课堂表现。
2.作业:布置适量的作业,评估学生的编程能力和对知识的理解程度。
3.考试:包括期中考试和期末考试,以闭卷形式进行,全面考察学生的知识掌握和编程能力。
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语言课程设计推箱子游戏

1.《C 程序设计(第三版)》, 谭浩强 编,清华大学出版社 2.《Turbo C 实用大全》, 常玉龙等 编写,北京航空航天大学出版社 3.《C 游戏编程从入门到精通》,浦滨著, 北京希望电子出版社 4.《C 函数实用手册》, 张曜 郭立山 吴天著, 冶金工业出版社
成绩评定表
口试(答辩)成绩
printf("\t\t\t\t
推箱子游戏
");
printf("\n\t\t\t\t***************************\n");
printf("\t\t\t\t 人 : ★
墙 :■\n\t\t\t\t 箱 子 : ◎
目的
地:□\n\t\t\t\t 按 d 键 退出游戏\n\t\t\t\t 限时 30 秒!");
在课程设计之初选课题时,我和我的组友为了给自己一个挑战而选择了推箱子游 戏软件开发。本来按我们的能力编一个游戏软件其实是有一定难度的,但最终我们通 过自己一个星期的努力,终于将它调试通过并初步完善,心中真的很高心。
因为我们学习是调试环境多是在 VC 下,所以我们放弃了 Win TC 下的编程,这 其实也为我们下一步的 C++课程的学习做好铺垫。
わずか 1 週間だけ、実際に私たちのプラットフォームを自分たちの知識を適 用する指定されたが。そして、我々の最愛のプログラムの熱意に影響を与えた。私 は以上の教科書はいくつかのプログラミングの知識とスキルをお持ち得ているこ の 1 週間で展開します。私は勉強したいこれはバーの定数の拡大で完了するはずで す。
报告成绩
总评成绩
摘要
ちょうど 1 週間では、訓練学校の学生の手-能力に、我々は C 言語のカリキュ ラムデザインを開催します。教師と生徒の助けを借り、私は最終的にゲーム倉庫番 を終えた。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需要的话,加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大小之内的题目。
我的程序也不例外。
软件的特色我的工具的特色是先进的死锁检测算法。
死锁就是一旦把箱子推动到某些位置,一些箱子就再也无法推动或者无法推到目的点,比如四个箱子成2×2摆放。
推箱子高手对何种情况引起死锁非常敏感,这样他们预先就知道决不能让某些局面形成,这也是高手高于常人的原因之一。
我的工具能够检测出绝大部分这样的死锁,并且,由于对死锁的特征进行了高度提炼,能够检测出很多人也无法很快看穿的死锁。
这样,工具的效率得到很大的提高。
对于10×10大小以内的题目,一般都能很快解出。
每一行代表仓库的一行,不能有空行。
空格或‘='表示地板。
每行最后连续的地板可以省略。
‘#’表示墙。
‘’<mailto:‘@’>表示人。
‘$’表示箱子。
‘.’表示目的点。
‘*’表示在目的点上的箱子。
‘+’或‘%’表示在目的点上的人。
“编辑”菜单下的“目标人位置”是本工具的特色之一。
在求解一些大型题目时,虽然不能直接使用本工具,但是可以把题目分解成若干个子目标,有些目标可以用工具求解。
这时,仅仅把箱子推到位是不够的,往往要指定最终状态时人所在的位置。
比如要让人通过一个充满箱子的通道,然后把箱子回复原状。
这时这个命令就可以起作用,它指定最终状态时人必须在的位置。
工具界面使用不同颜色表示墙、箱子和人。
在显示解答时,以推动一次箱子为一步,期间的人的移动不计。
此时所有人所能到的格子用绿色填满。
在“试玩模式下”,移动人直接点击目标点即可,推动箱子的方法是鼠标右键点击箱子的目标点并且按住不放,然后点击左键。
Stage目录下提供一些推箱子的题目。
其中有些是文本格式的。
其中WVsoko目录下的题目由20603(仓库大师游戏的作者)提供。
SoftStar目录下的关卡由网友金优转换。
他的其他一些收藏整理或创作的关卡放在JinYou目录下。
在此向两位网友表示感谢。
==关于目标宏所谓“目标宏”是模拟这样一种解题思路:很多关卡明显可以分成若干区域,有些区域集中了目标点,另一些区域则集中了很多箱子。
对于这样的关卡,人的思路显然是个个击破,对于目标点集中的区域考虑如何按次序摆满所有的目标点;箱子集中的区域考虑如何“突围而出”,然后再把两者集中起来。
推箱子工具可以模拟一种特殊情况下的目标宏,其条件是:1. 存在一个“断点”。
所谓断点是,假如去掉仓库区域里的所有箱子,然后在“断点”放一个箱子,则这个箱子把整个仓库区域分成严格互不连通的两个部分。
2. 初始状态时“断点”上不能有箱子,也不能是目标点。
(如果有箱子或目标点的话,一般可以很容易手工改造成没有箱子或目标点的等价的状态。
)3. 所有的箱子在“断点”的一边,所有的目标点在另一边。
4. “断点”的上下格都是墙或者左右格都是墙。
如果能够找到这样的断点,则程序自动把题目切分成两部分求解,效率有极大提高。
巧妙利用工具的目标宏功能可以提供不少有用技巧。
比如可以人工把通道弄窄以造成“断点”,从而解出以前不能解出的关卡。
又如,很多大型关卡的局部是“突围”问题或者是“目标点到位问题”,这时可以自己构造一个带“断点”的关卡,断点一边是非常容易求解的,另一边则是拷贝过来的难题局部,这样就可以利用工具求解这个局部了。
给箱子编号。
找出那些能推的箱子的编号和面让后逐个推每推一次就记录当时的位置信息。
退完再找一遍箱子的编号和面再推。
推到不能退了或出现以前重复位置信息,停。
换其他推法。
一次类推试找到能解的步骤记录。
2.测试及运行效果该程序复制到WIN-TC以后我试着在TROUB-2.0里应用了一下,首先进入程序会有提示是否进入程序,单击Y进入程序,我试着点击N,没有进入,说明其第一个选择语句正常的运行了,然后进入了程序的主要菜单,这是个挺老的游戏“推箱子”,我在vc++6.0下写的,在windowsXP下通过测试。
游戏规则很简单,只要把黄色的箱子全部推到圆圈的地方就可以了。
用这种方法表示上面的题目,可以得到上图右侧的二维数组,行数和列数均为9。
你可以看到左图并不是整整齐齐的二维图,它的最外围有一些缺口,我们在右图中全部用’W’来表示。
这是显而易见的,它们没有什么作用,只是为了把图形填充为整齐的二维数组。
如果你想用’S’来表示也无所谓,不会影响我们的程序执行,不过我想’W’更合适。
以上是一个推箱子问题状态的文本表示法,或者说是输入输出的方法,便于我们查看问题的状态。
但是对于计算机程序处理来说,它并不是理想的表示方法,计算机更善于处理二进制的数字。
所以我们还应该用二进制的方式来表示问题的状态,以便于程序的处理。
同样的,我们还是使用二维数组来表示,不过这次数组的元素不是char字符,而是二进制的unsigned char。
经过简单的分析可以知道,一个格子可以用4个bit来表示所有状态:FlagWall = 0x01, // 是否障碍物FlagBox = 0x02, // 是否有箱子FlagDest = 0x04, // 是否目的地FlagSoko = 0x08 // 是否有人在输入和输出问题状态时,需要进行这两种表示法之间的转换。
即在输入时,把文本表示法转换为二进制表示法;在输出时,则把二进制表示法转换为文本表示法。
我们不仅要知道箱子最终能否被推到目的地,更重要的是,我们要知道箱子如何被一步一步地推到目的地。
因此,我们需要在问题状态中记录从初始问题状态到解答状态所经过的每一步,这正是成员变量steps_的作用。
我们用一个嵌套类SokoStep来表示一步移动,用vector<SokoStep>来表示所经过的N步移动。
由于我们不知道从初始问题状态到解答状态需要经过多少步移动,这时vector容器就可以帮助我们很方便地保存每一步的数据。
由于我们所有四个成员变量都具有普通的值语义,所以编译器自动生成的拷贝构造函数、赋值操作符和析构函数都完全可用,我们可以省下不少功夫。
不过后面还有很多事情要做,推箱子游戏可要比数独问题、N皇后问题难弄多了。
我们还是从容易的方面入手,先来搞定输入、输出操作符。
正如前面所说的,输入输出的过程其实就是两种表示法的转换,先来看看输入操作符。
由于二维数组的行数和列数也需要输入,所以我把它们放在最前面,接着是指定行数和列数的char阵列,阵列中的每个char必须是七个字符(“WBSDIKO”)中的一个,否则我们抛出一个异常来结束程序。
每读入一个char,我们就根据该char(文本表示法)来设置map_数组的对应元素(二进制表示法)。
现在我们回到stateEq()成员函数,它的作用是把SOKO(推箱子的人)在不推动箱子的前提下可以走到的位置(即他的自由活动范围)全部标记上FlagSoko。
这样,我们在判断一个箱子能否移动时就可以简单一些了,只要这个箱子的某一侧为空格(Space),而另一侧为FlagSoko,那么这个箱子就可以向空的一侧移动。
我个人认为该范例的可用性很广,稍微修改便可应用于很多程序中,我认为做程序,人性化是很重要的一个环节,这个程序就很好的体现了这一点,其运行的效果也很好,但是仍然有需要改进的部分,在今后的学习生活中我应该继续努力,把程序做的更完善更人性化,以上就是我这次C语言程序设计的全部。