推箱子的一些字符

推箱子的一些字符
推箱子的一些字符

#include

#include

#include

#include

/**********常量定义*********/

#define N 30

#define TEXT_COLOR 13

#define AISLE " " /*走廊*/

#define N_AISLE 0 /*走廊的矩阵中的数值,即0 为走廊*/

#define AISLE_COLOR 0xf // 无色?????

#define W ALL "■" //墙壁

#define N_W ALL 1

#define W ALL_COLOR 14 // 14为颜色的控制

#define AIM "※" //未放箱子的目标

#define N_AIM 2

#define AIM_COLOR 10

#define BOX "□" //未在目标位置的箱子

#define N_BOX 3

#define BOX_COLOR 9

#define BOX_OK "★" //已在目标位置的箱子[即已放箱子的目标] #define N_BOX_OK 5

#define BOX_OK_COLOR BOX_COLOR //即颜色和箱子的颜色相同

#define MAN "♀" //人

#define N_MAN 4 //4是开始时人的位置

#define MAN_COLOR 11

#define MAN_IN "* " //在目标中人的位子

#define N_MAN_IN 6

#define MAN_IN_COLOR MAN_COLOR

#define ESC 0x1B //0x1B即为ESC在键盘上的16进制

#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,y;

}manPosition;

int mission=1; /*关数*/

int step; /*步数*/

int push; //推箱子数

int Y,X; //地图大小

int map[N][N]; //地图

HANDLE handle;

/**********外部变量定义*********/

/*主函数*/

void gameInit();/*隐藏光标*/

void preMenu();

void menu();

void menuSelect();

void playGame(int map[][N]);

/*辅助函数*/

void drawInfo();

void drawStep();

void drawMap();

void drawData(int k);

void drawMapYX(Point p);

void color(unsigned short c);

void gotoYX(int y,int x);

void textOut(short y,short x,unsigned short c,const char s[]) ; void help();

int read();

void readMissionMap(int);

unsigned char getKey();

void save();

void moveMan(Point manM1_p,int map[][N]);

void moveBox(Point box_p,Point boxM1_p,int map[][N]); int win();

int main()

{

gameInit();

preMenu(); /*字幕*/

while(1){

menu();

menuSelect();

playGame(map);

}

return 0;

}

void gameInit(){

CONSOLE_CURSOR_INFO cursorInfo;

handle=GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出设置句柄

//检索有关指定的控制台屏幕缓冲区的光标的可见性和大小信息

GetConsoleCursorInfo(handle,&cursorInfo);

cursorInfo.bVisible=false;

SetConsoleCursorInfo(handle,&cursorInfo);//设置控制台光标信息

SetConsoleOutputCP(936);//设置代码页,936代表中文

}

void preMenu()

{

printf("\n\n\n\n");

int x=0;

for(x=0;x<25;x++){

textOut(0,x,10," ╭╮■■□□◆◆◆◆◆◆◆◆\n");

textOut(1,x,10," ││■■□□□□□□□□◆\n");

textOut(2,x,10," ╭─┘└╮■■■■■□■□■◆◆\n");

textOut(3,x,10," ╰─┐┌■■■□┏━━━┓◆◆\n");

textOut(4,x,10," ││■■■■□□□□┃┏━┓┃◆◆\n");

textOut(5,x,10," ╭─┘└╮■■□┃┏━┓┃┏━━━━◆━━┓\n");

textOut(6,x,10," ╰─┐┌╯■■■■□□┃┏━┓┃┗━━━━◆━━┛\n");

textOut(7,x,10," ╭─┘│■■□□□┃┗━┛┃◆\n");

textOut(8,x,10," ╰──╯■■■■■□□□┗━━━┛◆◆◆◆◆◆\n\n");

Sleep(20);

for(int j=0;j<9;j++)

{

textOut(j, x, 10," ");

}

Sleep(5); //延时,程序暂停若干时间。

}

system("cls"); //清屏

}

void menu()

{

int x=0;

textOut(0,x,10," ╭╮■■□□◆◆◆◆◆◆◆◆\n");

textOut(1,x,10," ││■■□□□□□□□□◆\n");

textOut(2,x,10," ╭─┘└╮■■■■■□■□■◆◆\n");

textOut(3,x,10," ╰─┐┌■■■□┏━━━┓◆◆\n");

textOut(4,x,10," ││■■■■□□□□┃┏━┓┃◆◆\n");

textOut(5,x,10," ╭─┘└╮■■□┃┏━┓┃┏━━━━◆━━┓\n");

textOut(6,x,10," ╰─┐┌╯■■■■□□┃┏━┓┃┗━━━━◆━━┛\n");

textOut(7,x,10," ╭─┘│■■□□□┃┗━┛┃◆\n");

textOut(8,x,10," ╰──╯■■■■■□□□┗━━━┛◆◆◆◆◆◆\n\n");

}

void gotoYX(int y,int x) // 控制控制台的光标

{

COORD cursorPosition; /*COORD定义一种结构,控制控制台的光标*/

cursorPosition.Y=y;

cursorPosition.X=x*2; // 横坐标的话是占两个格的

SetConsoleCursorPosition(handle,cursorPosition); //让控制台的光标去指定位置}

void color(unsigned short c) //控制颜色

{

SetConsoleTextAttribute(handle,c); /*设置控制台窗口字体颜色和背景色的函数*/ }

void textOut(short y,short x,unsigned short c,const char s[]) {

gotoYX(y,x); //移动光标

color(c); //选择颜色

printf("%s",s); //输出文本

}

void menuSelect(){

char x;

color(0xf); //????

printf(" >>1 开始游戏\n\n"); // 只是个图形界面

printf(" >>2 选择关卡\n\n");

printf(" >>3 载入档案\n\n");

printf(" >>4 游戏帮助\n\n");

printf(" >>5 退出游戏\n\n");

while(1){

// swith()括号里的等于case后的常量表达式就执行

switch(x=getch()){ //getch(),从控制台读取一个字符,但不显示在屏幕上,读取键盘上的字符

case '1':

mission=1; //开始游戏的初始地图

// readMissionMap(mission); //读取文件将地图转化

return;

case '2':

system("cls"); //清屏

menu(); //保持推箱子的字符

color(14);

printf("\t\t\t 请求选择关卡(1-42):"); /* \t水平移动*/

scanf("%d",&mission); //读取关卡地图号码

// readMissionMap(mission); //读取文件将地图转化

return ;

case '3': //读取记录

if(read()){

/*改*/

char s[100];

sprintf(s,"**打开第%d关\n",mission);

textOut(21,15,14,s);

Sleep(2000);

system("cls");

return;

}

break; /* 改进存档删除*/

case '4':

help();

menu();

menuSelect();

break;

case '5':

exit(0);

break;

default://敲击其他键位

printf("请选择1-4\n");

break;

}

}

}

void playGame(int map[][N]){

Point manM1_p;// 小人将要移动1步后的坐标

Point manM2_p;// 小人将要移动2步后的坐标

readMissionMap(mission);

drawMap(); //绘制地图

drawInfo(); //显示信息

while(1){

switch(getKey()){

case UP:// 上

manM1_p.x=manPosition.x;

manM1_p.y=manPosition.y-1;

manM2_p.x=manPosition.x;

manM2_p.y=manPosition.y-2;

break;

case DOWN:

manM1_p.x=manPosition.x;

manM1_p.y=manPosition.y+1;

manM2_p.x=manPosition.x;

manM2_p.y=manPosition.y+2;

break;

case LEFT:

manM1_p.x=manPosition.x-1;

manM1_p.y=manPosition.y;

manM2_p.x=manPosition.x-2;

manM2_p.y=manPosition.y;

break;

case RIGHT:

manM1_p.x=manPosition.x+1;

manM1_p.y=manPosition.y;

manM2_p.x=manPosition.x+2;

manM2_p.y=manPosition.y;

break;

case SA VE:

save();

continue;

case RESTART:

readMissionMap(mission);

drawMap();

drawInfo();

continue;

case ESC:

system("cls");

return ;

default:

break;

}

switch(map[manM1_p.y][manM1_p.x]){

case N_AISLE:

case N_AIM:

moveMan(manM1_p,map);

step++;

drawStep(); //更新step和push

break;

case N_BOX:

case N_BOX_OK:

if(map[manM2_p.y][manM2_p.x]==N_AISLE || map[manM2_p.y][manM2_p.x]==N_AIM){

moveBox(manM1_p,manM2_p,map);

moveMan(manM1_p,map);

push++;

drawStep();

}

break;

default:

break;

}

if(win()){

mission++;

if(mission>9){

printf("\n\t 恭喜通关!!\n\n\n\t");

return ;

}

readMissionMap(mission);

drawMap();

drawInfo();

}

}

}

void help() //帮助菜单

{

char c;

while(1){

system("cls");

color(0xf);

textOut(0,20,13," ╭━━━━━━━━━━━━━━━╮\n");

textOut(1,20,13," │游戏说明│\n");

textOut(2,20,13," ╰━━━━━━━━━━━━━━━╯\n");

textOut(5,15,11,MAN);

textOut(5,25,15,"别看了,这就是你了,还挺酷的吧,嘿嘿!\n");

textOut(7,15,11,MAN_IN);

textOut(7,25,15,"这也是你了,只是你踩到便便了!\n");

textOut(9,15,10,AIM);

textOut(9,25,15,"目标!\n");

textOut(11,15,14,WALL);

textOut(11,25,15,"这个是墙,放心,不是豆腐渣工程,要不你可以去撞撞看。你懂得...\n");

textOut(13,15,9,BOX);

textOut(13,25,15,"这个是箱子,就是要你去推的那个,不要试图一下推两个箱\n");

textOut(14,25,15,"子,更不要想推着箱子把墙撞开,没有用的... 不要沮丧,再免\n");

textOut(15,25,15,"费给你一句忠告,要是把箱子推到死角,嘿嘿,直接按“r”\n");

textOut(16,25,15,"重新开始吧!!!!\n");

textOut(18,15,10,AIM);

textOut(18,25,15,"这就是箱子们的最终归宿了,箱子要是回不到家,嘿嘿,\n");

textOut(19,25,15,"你自己掂量着办吧。另外,只有他们都接到自己的小箱子,\n");

textOut(19,25,15,"你才能找到出口哦\n");

textOut(21,15,10,BOX_OK);

textOut(21,25,15,"箱子到家后就会变身啦啦\n");

textOut(22,25,15," a d s w 按这个控制方向就可以了,啥也不用说了,开推吧\n");

textOut(24,40,11,"by ymc@2015/01/10\n");

textOut(25,17,14,">>返回请按B <<\n");

c=getche(); // 输入后立即从控制台取字符,不以回车为结束

if(c=='B' || c=='b'){

system("cls");

return ;

}

}

}

void readMissionMap(int m)

{

char filename[N];

char t[N];

int i,j;

FILE *fp=NULL; //声明fp是指针,用来指向FILE类型的对象

sprintf(filename,"puzzle\\map%d.txt",m); //将第几个地图的名字读入filename 实现地图可以换

fp=fopen(filename,"r");

/* fopen对文本进行操作,给予fp指针

r :打开文本,以进行读取

w :创建文本,以进行写入。(如果文件已经存在,则删除当前内容)

.........

*/

i=0;

/*地图转化*/

while(fgets(t,N,fp)!=NULL){

/* fgets(t,N,fp) t来存储所得数据的地址,N存储数据的大小,fp读取的文件流读取遇到换行符就终止。

如果fgets()函数在达到缓冲区最大数目之前读完了一整行,

它将在字符串的空字符之前添加一个换行符以标识一行结束。

*/

for(j=0;t[j]!='\0';j++){

map[i][j]=t[j]-'0'; //转化成矩阵

if(map[i][j]==N_MAN || map[i][j]==N_MAN_IN){

/*初始小人的位置*/

manPosition.x=j;

manPosition.y=i;

}

}

i++;

}

Y=i; //??

X=j-1;// ??

step=0; //步数初始话

push=0; //推数初始化

fclose(fp); //关闭文件//

}

void drawInfo(){

char s[N];

sprintf(s,">>步数:%d 推:%d",step,push);

textOut(1,X,0xf,"\t提示: ");

textOut(3,X,TEXT_COLOR,">>上:w,下:s,左:a,右:d");

textOut(5,X,TEXT_COLOR,">>重新开始: r");

textOut(7,X,TEXT_COLOR,">>保存: x");

textOut(9,X,TEXT_COLOR,">>返回主菜单: ESC");

textOut(12,X,TEXT_COLOR,s);

sprintf(s,"第%d 关",mission);

textOut(Y+1,(X-4)/2,0xf,s);

}

void drawStep(){

char s[40];

sprintf(s,">>步数:%d 推:%d",step,push);

textOut(12,X,TEXT_COLOR,s);

}

void drawMap(){

int i,j;

system("cls");

for(i=0;i

gotoYX(i,0);

for(j=0;j

drawData(map[i][j]);

}

}

}

void drawData(int k){

switch(k){

case N_AISLE:

color(AISLE_COLOR);

PF(AISLE);

break;

case N_W ALL:

color(WALL_COLOR);

PF(WALL);

break;

case N_AIM:

color(AIM_COLOR);

PF(AIM);

break;

case N_BOX:

color(BOX_COLOR);

PF(BOX);

break;

case N_MAN:

color(MAN_COLOR);

PF(MAN);

break;

case N_BOX_OK:

color(BOX_OK_COLOR);

PF(BOX_OK);

break;

case N_MAN_IN:

color(MAN_IN_COLOR);

PF(MAN_IN);

/**/

default:

break;

}

}

void drawMapYX(Point p){

gotoYX(p.y,p.x);

drawData(map[p.y][p.x]);

}

unsigned char getKey(){

unsigned char key;

while(1){

key=getch();

if(key==RESTART || key==ESC || key==SA VE){

return key;

}

if(key==UP || key==DOWN || key == LEFT || key==RIGHT){

return key;

}

}

}

int read(){ // 读取存档

int i,j;

FILE *out;

if((out=fopen("save game","r"))==NULL) //读取文件

{

printf("\n 不能打开文件\n");

return 0;

}

// 写入

for(i=0;i<14;i++){

for(j=0;j<16;j++){

fread(&map[i][j],sizeof(int),1,out); //从out中写入大小为1的类型时int到map中

}

}

fread(&mission,sizeof(int),1,out);

fread(&step,sizeof(int),1,out);

fread(&push,sizeof(int),1,out);

textOut(20,15,14,"Game read!\n");

fclose(out);

return 1;

}

void save() //存档

{

int i,j;

FILE *in;

if((in=fopen("save game","w"))==NULL)/*创建一个文本将???(什么时候会打开失败返回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); //写入地图到in里

}

}

fwrite(&mission,sizeof(int),1,in);

fwrite(&step,sizeof(int),1,in);

fwrite(&push,sizeof(int),1,in);

printf("\n 任务%d 保存成功!\n",mission);

system("pause"); // 按任意键返回

fclose(in); //关闭

}

int win(){

int i,j;

for(i=0;i

for(j=0;j

if(map[i][j]==N_AIM || map[i][j]==N_MAN_IN){

return 0;

}

}

}

return 1;

}

void moveMan(Point manM1_p,int map[][N]){

if(map[manM1_p.y][manM1_p.x]==N_AIM || map[manM1_p.y][manM1_p.x]==N_BOX_OK){

map[manM1_p.y][manM1_p.x]=N_MAN_IN;

}

else{

map[manM1_p.y][manM1_p.x]=N_MAN;

}

if(map[manPosition.y][manPosition.x]==N_MAN_IN){

map[manPosition.y][manPosition.x]=N_AIM;

}

else{

map[manPosition.y][manPosition.x]=N_AISLE;

}

drawMapYX(manPosition);

drawMapYX(manM1_p);

manPosition=manM1_p;

}

void moveBox(Point box_p,Point boxM1_p,int map[][N]){

map[boxM1_p.y][boxM1_p.x]=map[boxM1_p.y][boxM1_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;

drawMapYX(boxM1_p);

drawMapYX(box_p);

}

生化危机4里昂主线战略5-2 带艾什莉脱出,换散弹枪.出门把弓驽手和巨汉打掉(巨汉还是要打头的),之后清杂兵.再 向前,继续先杀掉弓驽手之后清杂兵.当走到靠近门的地方时会有个敌人过来把门关上,杀了他打开开关,又有几个敌人冲进来,依然是先杀弓驽手.清掉其它杂兵后走到垃圾场发生剧情. 剧情之后换狙击杀掉再生者(旁边的油筒可以利用),之后二人和力推箱子搭桥.过来后遇到第二个再生者杀掉后把箱子推开进门.遇到巨汉和几个杂兵.之后准备好闪光打或燃烧弹,从高台跳下后扔出.之后向操作机房跑去.调查开关让艾什莉操作,里昂在一旁保护.在门被碴开后开门离去.之后会又遇到两个再生者.按动开关后,门只开了一半就无法动弹了.需要艾什莉专过去把门完全 打开.之后的大门让艾什莉在一旁等待,里昂去另一边,中间的红灯亮起后按确定开门进入. 接下来艾什莉将负责开车,玩家负责在后面做保护工作(不要站得太靠前,因为有敌人会从车顶上跳下来).敌人会跳上车来.只要在他们跳上车前射到敌人.他们就不会跳到车上来了.即使上 来了也不怕,相信此时大家的手枪已经足以应付这种场面了吧,不行就用散弹,寄生兽多了老规矩闪光雷招呼.途中会有卡车向我们驶来,用手枪打爆它即可.之后它还会向我们开来一次,再次 打爆.之后我们会停在一平台处,换散弹枪要快速上梯子,消灭周围的敌人打开开关,并且快速 返回,因为有人会跳到车上袭击艾什莉.平台上升后我们的车子继续前进,继续消灭跳到车子上的敌人.向前行驶一会后会有卡车从前方开来,快速用枪将其打爆.稍后到达目的地发生剧情.在经过 商人房间后发生剧情,本节结束. 百度攻略&当乐网提供,更多精彩攻略访问https://www.360docs.net/doc/e018469661.html,1

推箱子游戏设计报告书 一、项目背景 本实训要求对“推箱子游戏”进行分析、设计。 本实训对实训项目已经作了较为详细的分析及相关知识讲解,通过实训,促使专业技能得到综合训练,让我们了解软件开发基本技术和工作过程。同时,本实训中了解图形界面设计基本技术。 通过本系统的开发,要了解软件开发的整个过程,掌握软件开发的基本方法,提前培养从事软件行业应具备的基本素质和能力,为以后的学习作一个铺垫。 二、设计目的 本课程的课程设计实际是重在提升学生对程序的理解力和游戏界面的设计能力,进行的一次全面的综合训练,其目的在于加深动手能力以及对游戏设计思想的理解,掌握运用VB 开发应用程序的基本方法及基本技巧。 三、游戏介绍 本游戏设计了关卡设计器对有难度进行设计,同时用方向键↑↓←→控制小人的移动,空格重新开始,回车选择下一关,page up 上一关,page down 下一关,Esc 退回。小人移动来推箱子使箱子到达指定位置,如果箱子全部到达指定位置就表示过关 3.1界面设计 3.1.1界面设计原则: 1用户帮助 2向导 3快捷键 4鼠标与键盘对应 5布局合理化 6显示信息一致性 7界面一致性 8美观与协调性 9合理性 10规范性 11易用性 12一般交互 13数据输入 本游戏是一个简单游戏所以只涉及一些简单的界面设计原则.

3.2用户界面 又称人机界面,实现用户与计算机之间的通信,以控制计算机或进行用户与计算机之间的数据传送的系统部件。 GUI:即图形用户界面,一种可视化的用户界面,它使用图形界面代替正文界面。 本系统坚持图形用户界面(GUI)设计原则,界面直观、对用户透明。用户接触软件后对界面上对应的功能一目了然、不需要多少培训就可以方便地使用本应用系统。

本科毕业设计(论文) 基于VC++的推箱子游戏设计与实现 学院自动化学院 专业电子信息科学与技术 年级班别2008级(2)班 学号3108001166 学生姓名吕文财 指导教师 ________张学习 ___ __ 2012年6月

基于 VC++ 的推箱子游戏的设计与实现 吕文财 自动化学院

摘要 近年来随着科技的飞速发展, Visual C++语言的应用正在不断深入。Visual C++语言是当今国际上非常流行的计算机高级编程语言之一,它是面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。它更以自动编译功能和高级除错功能著称。因此,广泛受到编程人员青睐。不仅适合作为系统描述语言,也用来编写系统软件,还可以用来编写应用软件和设计游戏等。 本论文着重分析用Microsoft Visual C++语言实现一个较为简单的推箱子游戏,旨在介绍推箱子游戏的实现方法,并逐步介绍Microsoft Visual C++6.0图形编程的方法和技巧。本设计通过主界面对话框类、关口选择对话框类、帮助对话框类三大类以及键盘操作模块、游戏规则模块、地图文件读取模块、背景音乐播放模块、地图绘制模块,共五大模块构成。实现了任意关数选择、难度依次加大、游戏步数记录、背景音乐播放、游戏帮助、胜负判断等多个功能,采用图形函数的使用实现了一个完整的推箱子游戏界面,界面清晰可见。 关键词:推箱子,c++语言,模块,图形编程

第一关: 直接将箱子推向钱币处就完成任务,此关是给大家一个基础练习,知道先点击一下箱子,然后再点击一下钱币,工人会自动帮助将箱子推向所想推到的位置。 第二关: 先将最下面的箱子推向最里面的钱币,然后再点击最外的箱子,推向第二个钱币,最后将余下的箱子推进最后一枚钱币。 第三关: 将挡在中间的箱子向下推两步,将靠右边的箱子向上顶一步,将最下面的箱子向左推一步,将原先推下来的箱子向顶回原来的位置,这时将挡在左边的箱子推至钱币的右下角,然后将中间挡路的箱子推向右上角,再将靠中间墙的箱子推至左下角,最后将余上的箱子推至最后一枚钱币。 第四关: 将挡路的箱子向下推一步,将挡路的第二个箱子向右推一步,工人向下走一步,然后将右手的箱子向右推一步,将已经在钱币中的箱子向上推至顶,将第二排右手边的第一个箱子向右推一步入钱币中,再将头顶的箱子上顶入钱币,将左手的箱子向右推两步进钱币,最后将余下的箱子推入最后一枚钱币。 第五关: 将挡路的箱子向右推两步,将右下角的箱子向上顶两步,将中间的箱子推入最里的钱币,将第一个箱子推入中间的钱币,最后将余下的箱子推入最后的钱币。 第六关: 将中间右下角的箱子推至目前工人所站位置的头顶,然后将另三个箱子按顺时针的顺序推入相邻的钱币,最后将第一个推动的箱子再直顶入钱币中。 第七关: 从下往上,将第一个箱子向右推一步,将第二个箱子向上顶一步,将最上的箱子推入最顶的钱币,然后将并排的三个箱子右手边的第一个推入第二枚钱币,将并排的两个箱子的左手那

个箱子向上顶一步,将右手的箱子推入钱币的最下一枚,将上墙的箱子向右直推入第三枚钱币,最后余下的箱子推入最后的钱币中。 第八关: 直接将中间的箱子顶入品字形的箱子中形成连体,将并排的三个箱子中的右手箱子直接顶至最顶的钱币,将最品字形最顶的箱子向左推一步,将并排的两个箱子的右手那个直顶入最高的钱币中,将最下的箱子直顶入钱币,将竖排两箱子的最下那个箱子推入中间的钱币,最后再完成最后一个箱子。 第九关: 先将右边中间的箱子推入左下角的钱币中,再将右手边的上下两箱分别推入左手边的中、上两钱币,将最上挡路的箱子向左推一步,将中间挡路的箱子向下推两步,将最下的箱子推入右下角的钱币中,最后将余下的两个箱子分别推入右手的钱币中就完成任务。 第十关: 先将最右边的箱子推至最底,将纵列三个箱子中的中间箱子向右推两步入钱币,将三列中的中间箱子向上顶一步,然后再将其向下推至最底,将最上的箱子向右推两步,将最后箱子推入钱币完成任务。 第十一关: 先将脚下的箱子向左挪一步,再将第二排的箱子向下推至与第三排箱子并排,然后将最上的箱子推至第一枚钱币,再将并排的箱子的右手箱子直接顶回到第二枚钱币,最后按从下往上的顺序将最后的两箱推入相应的钱币即完成任务。 第十二关: 先将最上的第一个箱子向上顶一步,再向下推两步入钱币,将中间的箱子向上顶两步,将最下的箱子向左推一步入钱币,最后推完余下的箱子完成任务。 第十三关: 这关开始有些难度了,别看箱子少,但确实得花一段时间思考一下呵。先将左数过来的第二个箱子向下推两步,再将左手第一个箱子向左推两步入钱币,将第右手由上往下数的第一个箱子向左推三步入钱币,再将目前并排未入钱币的右数第一个箱子向上顶一步,将第二个箱子向右推一步,好,现在将排成列的右手的箱子由上往下的第一个推至钱币的最上面一枚,

《古墓丽影3失落的神器》全攻略 在开始时,我建议大家在设定画面把GAMMA调至5,否则有的游戏场景画面比较暗。(好象和LARA约会正合适:))如果是飞龙级的“高手”(菜鸟的星际版称呼,呵呵),还是建议大家先 到LARA的家里去练练手,否则在游戏里会死的很惨的。 第一关 开始,是一架直升机降落的场面,那个驾驶员好面呀,半天才落下来。然后是LARA的瞬间移动,(不会是又拜孙悟空为师了吧?)。现在我们正式开始游戏,LARA出现在动物园的门口,旁边还有警告牌,(记住要买票呦:))。首先,LARA翻过这到高墙,紧走几步来到水边,看到对面有一个小药包(切记,是东西就要捡呀。)爬上箱子,用猴子荡荡到对面,捡起药包。掉到水里,顺着水道游到一个码头前,(码头底下有鱼叉,记得捡呀。)上岸,走几步到了一个小支,向左能得到一些武器,向前走爬上石头向对面跳也行。(我选择了向左走,因为子弹很重要呀!)。向左走几步,来到了斜坡前面,捡起路中间的霰弹枪的子弹,(连子弹都敢乱扔,也难怪敌人的AI那么的低呀:))掏出小双枪打死敌人,哇~~~~,他...他...竟然敢放狗!(哦,我看错了,原来是一只红眼耷拉着尾巴的狼。现在我可算知道警告牌的做用了。不愧是动物园,想的真是周到呀。:))。掏出双枪将其击毙,(唉,LARA你怎么可以乱杀野生动物嘛。)走到了敌人身边,捡起照明弹,前面竟然有一个大药包,LARA小MM的口水都流出来了,捡!(LARA怎么跟我一样是个物品收集狂,我是玩三国志养成的习惯,难道LARA也玩吗?)。转过身来,向前走,爬上一个石阶向右走,走到一个长石阶上向前走到头,向左侧身30度,然后用胖式跳法跳到对面。(这个胖式跳法是本人在1代时研究出来的,不过嘛,现在已经烂了街了,这个跳法就是,首先用SHIFT键慢走到起 跳点,然后点一下方向键的下键,LARA就会向后倒跳一小步,这一小步正好是LARA长跳的助跑距离。哈哈,高手就是高手嘛,这个方法EIDOS在4代中才公布呀!不承认自己是高手就是不 行呀。。。呵呵,唉呦,我怎么又从椅子上掉下来了?奇怪?今天椅子是怎么了,还是换一把吧,顺便找瓶可乐补补血。)跳到对面后掏出双枪干掉敌人,从他身上捡起霰弹枪子弹,咦?平台上又有一个霰弹枪子弹,呵呵。要是捡破烂的话,我可就发啦。捡起这个子弹,画面突然给了一个 特写。怎么回事?呵呵,大家今天可是撞上了,竟然可以看到尼斯湖水怪!(如果看不到,可以和我联系,其实很简单,就是捡完子弹后,用慢走走到头,然后,向左慢慢转身,自己找一个角度就能看见了。)观赏完世界珍禽后,我们向冒烟处狂奔。(呵呵,吓一跳吧。:))跑进冒烟处,得到霰弹枪子弹,爬上石阶,向左转,远处有一个敌人,向前走,然后用江式跳法跳过去,将敌人击毙,跳到水里捡起鱼叉,上岸,走到头. 我们看到了一个开关(是一个时间性的控制开关)。拉下时间进入与其相邻的闽敌人,向右进入一个小房间,面向石狗的方向,如果大家自己已经找到了撬棒的话,可以一直向前冲,此时会有一个时间之门打开,冲进去便是一个隐藏地点。为了加快速度我将只做必要的说明。干掉另一个敌人进入石碑大厅,以石碑为正方向,向左走干掉敌人,LARA来到石阶的边缘,底下是 沼泽。LARA走到中间偏右的地方停下,向左转30度,此时,我们将助跑跳跳到对面倾斜的石 面上,再刚刚接触到石面的时候,要立即按下ALT键,LARA将反身翻到后面石台上,转身,跳向另一个石台上。此时,会有一只乌鸦出现,将其击毙(LARA你怎么又乱杀野生动物嘛。)。沿着对角线跳到另一个石台,继续向下达到下面的石台,向石碑的左侧跳去,向右看会看到有一个

《传说之下》全关卡、解谜图?攻略 游戏介绍 如果你喜欢?款怪诞、可爱?又不同寻常的R P G游戏的话,那么《传说之下(U n d e r t a l e)》不容错过。《传说之下(U n d e r t a l e)》将于9?15?登陆s t e a m。 游戏中,玩家扮演?名落?地下怪物世界的少年,需要找到回家的路,否则便会永远困在此处。虽然玩家可以和怪兽搏?,但是完全可以避免所有战?。这取决于玩家是否采取和平主义的游戏态度。 如果选择战?的话,将会发现该作品的战?系统是?常特别的,不是回合制或者其他常见类型,?更像是砍砍砍。躲闪系统是?常重要的,因为有些敌?攻击会直击玩家??的?脏,当你落?箱?陷阱的时候,必须计算好攻击和躲闪时间,否则就会瞬间被秒杀。 如果不打的话,就有?种?常奇葩的破关?式:和所有怪物抱抱。连最?和最恐怖的b o s s级别敌?也是如此,甚?在后期和其中?两个约个会也不是什么奇怪的事情。 游戏界?操作 F4键:全屏或窗?模;

回车键/Z键:确认; X键:取消或返回上?级; 按住E S C键:退出游戏; %{p a g e-b r e a k|游戏介绍&界?操作|p a g e-b r e a k}% 游戏上?指南 界?/操作介绍 暂停菜单 按C键或C t r l键可以打开游戏菜单。 属性:显?你的名字、等级、当前?量/总?量、持有的?钱总数。 物品:查看并使?你当前拥有的道具。 S TAT:查看游戏数据。 电话:打电话给N P C(联络感情或取得游戏资讯提?)。

游戏界? ?板:在墙上很多时候会出现?些?板,这些?板都写有?般是谜题的提?。 路牌:某些路牌竖?在道路之中,它们有些作?与?板相同,都是谜题的提?,或者是?些告?牌。 栏杆:多数拉杆为黄?,会出现在墙体上,拉动后会触发或解除?些机关陷阱。 窟窿:当你踩踏某些路段时,可能地?会出现??的圆圈(窟窿),那么你有可能会掉到别的房间当中去。 N P C:在路线会遇到?些N P C,?不是触发战?所出现的敌?,他们有可能是敌?或者是?些?害的N P C。 感叹号:当你在冒险过程中,会忽然跳出感叹号,这表?你遭遇到敌?。 可调查的道具:游戏中只要画?出现?较特别的物品,如书籍、意?利?、??洞、?件等,都是可以调查的,某些会告知你关于这个世界的 相关故事,某些事物则是没?的信息。

淮海工学院计算机工程学院 课程设计报告 设计名称:面向对象课程设计 选题名称:推箱子的设计与实现 系(院):计算机工程学院 设计时间:2014.3.10~2014.4.12 设计地点:软件实验室、教室

(3)功能模块 本程序包括四个功能模块:class mainFrame,class mainpanel,class Sound,class Readmap, 既主面板类,绘图的面板,播放背景音乐,用输入流读取地图文件。class mainpanel 主要是实现地图的初始化以及每一关地图的重载,class Sound主要是播放背景音乐。Adpressed的功能是响应工人和箱子的移动以及工人、箱子、墙之间的碰撞检测。 表1 成员变量表 成员变量变量类型名称 开始状态Boolean Start 窗口高度int fHeight 窗口宽度int fWidth 计时器Timer timer 延时int delay 开始时间Date starttime 步数int steps 地图容器MapPanel mapPanel 玩法介绍String instruction 开始状态Boolean Start 表2方法表 方法名功能备注 Puzzle() 创建游戏窗口和设置图标 backaction() 后台操作getmap() 返回地图的方法 StartGame() 开始游戏控制,更新开始菜单 endgame() 结束游戏控制弹出结束窗口 getmap()/ 返回地图的方法调用类spite() menuShowClik() 在游戏中显示完整图片调用类class ShowImage actionPerformed() 动作演示 menuExit() 退出游戏 flush() 清空缓存 游戏过程设计 游戏中过程中,最为主要地方在于对地图矩阵,以及主角状态信息(包括位置、行走状态等)的维护,主角每行走一步,就更新一次地图信息和主角状态信息。另外一个比较重要的地方是游戏状态的保存方面。在该游戏中,使用栈结构保存主角每次行走的

#include #include void map1(); void map2(); void map3(); void show(); void move(); void main(int argc,char*argv[]) { time_t a,b; time(&a); system("color 1E"); loop1: { system("cls");//刷屏 printf("\n\n\n\n\n\n\t\t\t\t欢迎进入推箱子游戏\n\n\t\t\t\t 请按a b c选择游戏\n\n\t\t\t\t 按 d 键结束"); int t=getch(); if(t=='d') { printf("\n\t\t\t "); } else { if(t=='a') { map1(); goto loop1; } if(t=='b') { map2(); goto loop1; } if(t=='c') { map3(); goto loop1; } else { printf("\n\n\t\t\t\t 请重新输入:"); goto loop1; } }

time(&b); printf("\n\n\n\n\t\t\t\t 游戏总共用时%.3d秒\n\t\t\t ",b-a); getch();//等待读取回车符以结束程序 } void map1() { time_t p,q,o; time(&p); int i=4,j=4,m=6,n=2,t=1,k=3; system("cls");//刷屏 system("color 2E"); int x=1,y=7; char z,a[9][9]= { /*为背景设置初始资料*/ {'#','#','#','#','#','#','#','#','#'}, {'#','#','#', 3, 0 , 0 , 0 , 1 ,'#'}, {'#','#', 0 , 0 , 0 ,'#', 0 ,'#','#'}, {'#', 0 , 0 ,'#', 0 , 0 , 5 , 0 ,'#'}, {'#', 0 , 5 , 5 , 3 , 0 , 0 , 0 ,'#'}, {'#','#', 0 ,'#', 0 , 0 ,'#','#','#'}, {'#','#', 3 , 0 , 0 , 0 ,'#','#','#'}, {'#','#','#','#','#','#','#','#','#'}, {'#','#','#','#','#','#','#','#','#'} }; show(a);//调用输出函数 loop://语句标号 move(a,&x,&y,i,j,m,n,t,k,&z); if(a[i][j]=='!'&&a[m][n]=='!'&&a[t][k]=='!') { system("cls");//刷屏 show(a); printf("\t\t\t\t YOU ARE WIN!\n"); time(&q); printf("\t\t\t\t\t 用时%.3d秒\n",q-p); printf("\t\t\t\t*******回车重新选择*******\n\t\t\t\t"); getch(); } else { time(&o); if(z=='d') { return;

推箱子游戏详细设计报告 一、 引言 在前一阶段(概要设计)中,已解决了实现该游戏需求的程序模块设计问题。包括游戏模块间的关系设计,以及数据结构和模块结构的设计等。在以下的详细设计报告中将对在本阶段中对游戏所做的所有详细设计进行说明。 本阶段依据概要设计的要求,确定应该如何具体地实现所要求的游戏,从而在编码阶段可以把这个描述直接翻译成用具体的 程序语言书写的程序。具体包括各功能模块信息的录入和修改以及删除等。 1.2目的 目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出 现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。可以开发青少年学生的智力,又可以防止老年痴呆症。 1.3参考资料 《C 程序设计(第三版)》,谭浩强编,清华大学出版社 《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社 《C 语言趣味程序百例精解》,陈朔鹰 陈英主编,北京理工大学出版社 《C 游戏编程从入门到精通》,浦滨著, 北京希望电子出版社 《C 函数实用手册》,张曜 郭立山 吴天著, 冶金工业出版社 二、总体设计 2.1需求概要 用户在进入游戏后,可以根据自己的想法自由移动箱子,游戏提供自由选关的功能模块,凭借这些模块,玩家可以实现对游戏快速通关! 2.2软件各模块结构 1、 初始化模块:该模块包括和游戏。屏幕初始化用于输出游戏的操作提示,游戏的每一关的初始化 是 初始化模块 每一关的初始化

2、 图画模块:该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、和画目的地。 画墙 画箱子 画图模块 画小人 画目的地 目的地画箱子 3、 移动箱子模块: 空地之间箱子的移动 移动箱子模块 目的地之间箱子的移动 目的地与空地之间的箱子移动

#include #include #include #include #include using std::cout; using std::endl; #ifndef SOKOBAN_H_ //防止文件重复包含 #define SOKOBAN_H_ #include using std::queue; //每一步的数据类型 struct node { int bx, by; //箱子的坐标 int px, py; //人的坐标 }; //推箱子类 class Sokoban { private: enum {L = 15, H = 7}; char GameMap[H][L]; //地图 int Pex, Pey; //人的位置 int Boxx, Boxy; //箱子的位置 int Succeed, Prove; //是否成功到目的地, 是否可玩性 int dx[4], dy[4]; //方向数组 protected: char Empty; char People; char Box; char Block; char Target; int dir; //记录按键方向 node s, e; public: Sokoban(); //构建函数 ~Sokoban() {} //析构函数,即为inline //地图初始化函数 void Initial(); //箱子路劲验证函数,参数为箱子坐标(bx,by),人坐标(px,py) void Box_Bfs(int bx, int by, int px, int py); //人路劲验证函数,人所到的目的地(ex,ey)

第一关: 下上左左右上上下右右 第二关: 下下下下右下下左左上右下右上左上右右右下右上上下左左左左上上上上左左下右上右下下下下右下下左左上右下右上左上右右右下右上左左左左上上上左左下右上右下下下右下下左左上右下右上左上右右右 第三关: 下右下右下下左左右右上上左下左右上上左下下上上上上右下下下左下右上右下 第四关: 右下右右下下右下下左左上左左下左上右右右下左左右右右右上上左上上左左下下上上右右下下右下下左左上左左 第五关: 下右右右上左右右右上上左左下下左下左左上右右右上上左下下上上右右右下左上左下 第六关: 下左左下左左上右右上右右下下左左下下右右上下左左上上上左左下右 第七关: 左上上右右上上左下下左下下右右上下右右上左下左左左上上上右右右下左上左左下下下右右上上右上左下下下右上上左下下左左上上右上上下左下下下右右上上上 第八关: 上右左下下右上右右下左右下右右上左左上上上右右下左下左下下右右上左上左左左左上上右下左下右右左左下下右上左上右 第九关:

左上上左上上右右右下下右下左下左左上上左上上右下右上右下下右下下左上右下右右上左下左上下左左左上上下右右左左上左上上右右右下下上上左左左下右右上右下 第十关: 右上上左上右上上左左左下左下下右上上下下左下下右上上上右右上下下右上上下下下下左上上上下右左左下左上上下下右右右下右上上上左左左下下左上上 第十一关: 右下右下下下下左左上上左上下右下下右右上上左右上上左下左下左左上右右右上右右下左下左左上右下右上左左左左下右右上右右下下下左左上上右上上上左左下下左下右右左上上上右右下下右右上左下左左下下下右右上上下下左左上上右左左左上右上上右右下下左下左上右右上右右下左左左下下下右右上上下下左左上上右上上右右下左下左左上右下左左左上右下左左左上右下右右上上上左左下 第十二关: 左下下下下下左左上上上右左下下下右右上上上上下下下下左左上上右下上上右上右上上左下上左左下右下下上上上右右下下左右上左下下左左下下右右上上上下左下右上上右上上左下上左左下右下下上上上右右下左上左下下上右右下左 第十三关: 左左右下下左下右上上上左下左左上右右下右下下左上右上左上左左下下右右上右右上左左下下下右上左上上右上上左下下下下左左上上右左下下右右上上左左下右上右下上右右下左上上上左下 第十四关: 下右右上左下左左上上右下左下右上左上上上上右右下下左右上上左左下下下上右右右右上右右下左左左左上上左左下下下右下右右右右上下左左左左上左上上上右右下下右下上右上右右下左下下左左上上右上右下左左左上上左左下下右右右右左左左下下下左上上右上右右下下左右上上左左下左下下右上右右下左上右上上左上上左左下下下下右右右上上右上右右下左左左左左右上上左左下下上右右右下下右

陕西师范大学 C语言课程设计 推箱子 院(系)别计科院 班级信息管理与信息系统 指导教师何秀青 时间2015-6 参与者:王杰王启星贾臻孙楠

1.设计目的 本程序涉及软中断,二维数组,键盘操作,图形化函数等方面的知识。通过本程序的训练,能基本掌握显示器中断寄存器的设置,二维数组及结构体的应用,图形方式下光标的显示和定位,以及部分图形函数。 2.功能描述 本游戏共有五关,由易到难,每关都有初始化,按键处理,充值和退出功能。 (1)初始化包括屏幕初始化和每一关关卡的初始化,屏幕被初始化为宽80像素,高25像素。 (2)按键处理包括移动小人和推动箱子,通过移动上下左右键控制小人移动,从而推动箱子,以把箱子推到指定的目的地为通关。 (3)每一关都可以重置,按空格键可以重置当前关卡。 (4)按Esc键可以在任何时候退出游戏。 3.总体设计 (1)系统模块图 初始化模块:该模块包括屏幕初始化和游戏每关的初始化,屏幕初始化用于输出欢迎信息和操作提示,游戏每关的初始化是构建每一关的关卡。 画图模块:画图模块主要被其他模块调用,用于画墙,在空地画箱子,在目的地画箱子,画小人和画目的地。 移动箱子模块:该模块用于移动箱子,包括目的地之间,空地之间和目的地与空地之间的箱子移动。 移动小人模块:该模块用于控制小人移动,从而推动箱子到目的地。 功能控制模块:该模块是几个功能函数的集合,包括屏幕输出功能,指定位置状态判断功能和关卡重置功能。 (2)任务执行流程图推箱子游戏 初始化模块画 图 模 块 移 动 箱 子 模 块 移 动 小 人 模 块 功 能 控 制 模 块

否 是 否 有 否 是 是 否 (3)小人移动流程图 小人移动方向有四个,move()函数(处理小人移动的函数)对这四个方向移动的处理都一致,只是调用函数时的参数有所不同。首先判断小人的移动方向,然后根据小人所处的当前状态,下一步状态或者下下一步的状态进行适当的处理。 开始 第一任务开始 是否继续完成 有无成功希望 是否成功 是否第六关 进入下一任务 显示通关信息提示结束 按Esc 键退出 按空格键回到开始

经典的推箱子游戏。 游戏中使用了图片。 【点击这里下载完整项目】 以下是项目的代码(需要图片才能编译执行): /////////////////////////////////////////////////////////// // 程序名称:推箱子 // 编译环境:Visual C++ 2010/6.0,EasyX_2011惊蛰版 // 程序编写:自然向日葵 1164359890@https://www.360docs.net/doc/e018469661.html, // 最后更新:2012-1-21 // //////////////////////////////////////////////////////////// //游戏中用0表示空地,1表示人物,2表示箱子,3表示目的地,6表示围墙 // //画素材的x1和y1都是反的,因为x表示行,但是画出来x表示列,y同 //////////////////////////////////////////////////////////// #include //EasyX_2011惊蛰版(绘图库) #include #include int x, y; //人物坐标 int loop; //控制是否重新开始 IMAGE img[8]; //定义IMAGE对象数组来保存图片 /*******************函数声明*******************/ void blank(int x1, int y1); //画空地 void man (int x1, int y1); //画皮卡丘 void box (int x1, int y1); //画箱子

#include #include #include #include #include #include typedef struct winer { int x,y; struct winer *p; }winer; char status [20][20]; char far *printScreen=(char far* )0xB8000000; void putoutChar(int y,int x,char ch,char fc,char bc); void printWall(int x, int y); void printBox(int x, int y); void printBoxDes(int x, int y); void printDestination(int x, int y); void printDestination1(int x,int y,winer **win,winer **pw); void printMan(int x, int y); void init(); winer *initStep1(); winer *initStep2(); winer *initStep3(); winer *initStep4(); void moveBoxSpacetoSpace(int x ,int y, char a); void moveBoxDestoSpace(int x ,int y, char a) ; void moveBoxSpacetoDes(int x, int y, char a); void moveBoxDestoDes(int x, int y, char a); int judge(int x, int y); void move(int x, int y, char a); void reset(int i); void putoutChar(int y,int x,char ch,char fc,char bc) { printScreen[(x*160)+(y<<1)+0]=ch; printScreen[(x*160)+(y<<1)+1]=(bc*16)+fc; } void printWall(int x,int y) { putoutChar(y-1,x-1,219,GREEN,BLACK); status[x][y]='w'; } void printBox(int x,int y) { putoutChar(y-1,x-1,10,WHITE,BLACK); status[x][y]='b'; } void printDestination1(int x,int y,winer **win,winer **pw) {

第一个Java文件: package xiaoA; import java.awt.Color; import java.awt.HeadlessException; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; public class GameFrame extends JFrame { JPanel zhuobu = new JPanel(); //工人 JLabel worker = null; //箱子 JLabel box = null; //目的地 JLabel goal = null; JLabel[] walls = null; public static final int SPEED = 12; //设置图片大小 int imgSize = 48; public void setImgSize(int imgSize){ this.imgSize = imgSize; } public GameFrame(String title) throws HeadlessException { super(title); //构造方法中调用本类的其它方法 this.initContentPane(); this.addKeyListener(new KeyListener() { //键盘按下事件 public void keyPressed(KeyEvent e) { //[2.5] 使工人可以移动 int xSpeed = 0, ySpeed = 0; switch (e.getKeyCode()) { case KeyEvent.VK_LEFT :

/* 一个C语言编写的推箱子游戏源代码*/ /* 本游戏是字符模式的,请不要在中文dos下运行。本游戏在TURBO C下调试通过*/ 程序预处理部分包括加载头文件、定义全局变量和定义数据结构,并对它们进行初始化工作。#include #include #include #include #include #include /* 定义二维数组ghouse来记录屏幕上各点的状态, 其中:0表示什么都没有,'b'表示箱子,'w'表示墙壁,'m'表示目的地,'i'表示箱子在目的地。*/ char ghouse[20][20]; /* 以下函数为直接写屏函数,很酷的函数哦!是我朋友告诉我的。*/ 定义全局变量 char far *screen=(char far* )0xb8000000; 用于在屏幕上输出字符。彩色显示器的字符缓冲区首地址为0xB8000000,每一个字符占2个字节(第一个字节为ASCII值,第二个字节为颜色值),字符模式下屏幕宽80像素,高25像素,一屏可以写80*25个字符。 void putchxy(int y,int x,char ch,char fc,char bc) Putchxy()函数在屏幕上的指定位置输出指定的字符。其中,x、y指明输出的位置,ch表示输出的字符,fc表示输出的字符颜色,bc 表示背景色。 { screen[(x*160)+(y<<1)+0]=ch; /*屏幕输出字符*/ screen[(x*160)+(y<<1)+1]=(bc*16)+fc; /*指定字符颜色fc,背景色bc*/ } /* 定义判断是否胜利的数据结构*/ typedef struct winer { int x,y; struct winer *p; }winer; 定义结构体struct winer用于判断每一关是否已完成。其中x用于存放目的地的横坐标,y用于存放目的地的纵坐标。如果所有表示目的地坐标对应的状态都为“i”,即箱子在目的地,则表示已经过关,可以进入下一关。该结构体的初始化在每一关的初始化时进行。 /* 箱子位置的数据结构*/ typedef struct boxs { int x,y; struct boxs *next; }boxs; /* 在特定的坐标上画墙壁并用数组记录状态的函数*/ void printwall(int x,int y) printwall()用于画墙传入参数x、y指明位置。该函数调用putoutChar()进行输出,以黑色为背景画绿色墙,用小方块表示墙(ASCII值为219)。 { /*以黑色为背景画绿色墙,用小方块表示*/ putchxy(y-1,x-1,219,GREEN,BLACK);

第一个Java文件: import java.awt.Color; import java.awt.HeadlessException; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class GameFrame extends JFrame { JPanel zhuobu = new JPanel(); //工人 JLabel worker = null; //箱子 JLabel box = null; //目的地 JLabel goal = null; JLabel[] walls = null; //设置图片大小 int imgSize = 48; public void setImgSize(int imgSize){ this.imgSize = imgSize; } public GameFrame(String title) throws HeadlessException { super(title); //构造方法中调用本类的其它方法 this.initContentPane(); } /** * 设置内容面板 */ void initContentPane() { zhuobu.setBackground(Color.red); zhuobu.setLayout(null); //调用父类的属性和方法 super.setContentPane(zhuobu);

推箱子程序: #include #include #include #define U 1 #define D 2 #define L 3 #define R 4 //按键状态,U:上;D:下;L:左R:右 #define ofx 10 #define ofy 9 //x,y方向偏移量 typedef struct MAP //地图 { int wall[50][2]; //墙 int box[9][2]; //箱子 int des[9][2]; //终点 int overlap[9][2];//箱子与终点的重叠位置 int all,now; //总箱子个数,到位箱子个数 int x,y; //起点 }MAP,*map; //全局变量// int player[2]; //玩家位置 int nextp[2],nextb[2]; //玩家下一步位置,箱子下一步位置 MAP Pass[5]; //关卡数组 map Group,p; //关卡数组指针,当前关卡指针 int level; //关卡等级 int status; //玩家状态 int boxc[9][2],overlapc[9][2]; //箱子状态栈,重叠箱子状态栈 int nowbox; //当前到位箱子个数 int regame; //是否重玩 //声明全部函数// void Pos(int x,int y); //设置光标位置 void welcometogame(); //开始界面 void initgame(); //初始化游戏 void startgame(); //开始游戏 void copybox(int copy[9][2],int b[9][2]); //复制箱子信息 void loadmap(); //加载地图 void printfoverlap(int b[9][2]); //打印重叠箱子位置 void move(); //玩家移动 void trans(int p[2],int q[2]); //状态传递 void inputmap(int a[][2]); //输入地图数据 void gamecircle(); //控制游戏 int main() { system("mode con cols=80 lines=30"); //控制台宽度80,高度30

《CS:零点行动》详细攻略 任务1: 当BLACKHAWK 直升机被RPG从高空射下后,作为唯一一名连根毫毛都没伤到的美国大兵,在没有选择的情况下接到命令,营救己方战友。CS-CZ行动就此展开。一开始,以直升机为掩体,消灭周围的几个伊斯兰打扮,没脸见人的歹徒。注意左边墙上和直升机上方阳台上的狙击手,顺着激光瞄准瞄准轻松找到。歼灭广场上的敌人。转到广场左边的窄巷里,有医务包。窄巷尽头大门打开后,后退躲避从门里不小心掉出的手雷,并向灭身后敌人。进大门,射!再射最里边小屋内的敌人,得到MA41子弹,(当小屋门打开时,不要用身体挡住,否则门开不了,BUG!)对着房间的墙壁右边有两个小木箱,用天马流行刀法将其击碎,发现洞!钻入!墙上医疗箱,架上无线遥控定向爆破小型威力炸药。再走,消灭右面的人,有医务包。左走,射!窗后的敌人,沿着落下的房梁上楼。发现医务包。再指定地点放置遥控炸药,跑,按,爆,爽!进入大洞。消灭敌人,跳下,发现弹药。前走,发现右边小路好多人!前行。右边又有好多人类,没办法,射吧,注意手雷。走右边小屋弹药,医务箱。走左边,看焰火,射狙击手。铁丝网右面一MachineGun,搞不定可以用导弹车残骸做掩体,绕到后边,射!入MachineGunp旁边一小门,弹药,手雷,医务箱。上楼梯,杀敌,小心手雷。推开小门,狂扫房顶上的。进入对面的小门,看见一guy,但别开枪,尤其枪法好的,那是队友。重机枪弹药医务箱防弹衣。你要是男人就一样都别碰!!和队友前行。绕行至栅栏后发现医务包医务箱。前行,出门左边射!前行,再射!队友看你杀人狂,跳上院子中间的高塔不和你玩了。塔内医务箱,塔外医务包。从高塔后矮箱跳上箱堆堆,继而跳上二楼。先右行,下楼,在尽头用庐山升龙刀法击碎木箱,大木门敞开。进入大木门对着的小门,得到弹药医务箱沙漠之鹰!回走,上楼,走廊尽头进门。从左边绕行,得到弹药医务箱。前行,下楼,出门,看见激战。杀敌后,在帅哥那里得到弹药手雷烟雾弹防弹衣,好多医务箱。回走。哪有敌人就往哪走,一直走到看见车祸的地方。不用多想,见人类就射吧,小心Jeep 上的MachineGun。完事后进入Jeep旁边的小屋。得到弹药医务箱,救出战友,再回走。注意使队友跟紧,当他说:ok,I will wait her,或者I m not going any farther时,就再强迫他一次...直到到达直升机, 任务2: 游戏开始时不可以惊动恐怖份子或被恐怖份子发现,以免对人质不利。先到对面的小屋里桌子上当得到Blowtorth,再跑到屋外草棵里用Blowtorth焊断那金色小锁头。跳下阴沟,往前爬,一直爬到小木屋底下,找到裂缝处,使用纤维视觉探测器(fiber optic camera)摸清人质的位置,再用步话机报告行动部队。战斗打响,你也可以掏出枪了,消灭敌人,沿着落下的木板进入木屋。射!敌人。小心白色的线,那是地雷,可以开枪将其引爆。前行得到医务箱,连发散弹枪和其子弹。前行,小心线雷。走入尽头的小屋,看见队友已经得到人质,屋里还有弹药医务箱防弹衣。出了小屋,看见木屋被炸开,屋外有RPG和俩狙,小心了。从缺口处跳上木箱,进入另一木屋。前行,上楼,在最里面的房间里得到机枪弹药,医务包。从地板洞潜入,在亮光处蹦出。有医务箱。前行,小心线雷。在小院里射射射,小心大树上

相关文档
最新文档