📄 pushes the box.c
字号:
//连接头文件部分
#include "stdio.h"
#include "conio.h"
#define XMAX 20 //最大宽度
#define YMAX 20 //最大长度
//主角的当前状态
struct Lead
{
int x; //列坐标
int y; //行坐标
}Condition={10,5}; //初始化主角坐标
//地图原型
char Map[XMAX][YMAX] =
{
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'},
{'|','s','0','s','0','|','s','0','0','0','|','0','0','s','|','0','s','o','|'},
{'|','0','o','0','0','|','0','0','e','0','|','o','0','0','|','0','0','0','|'},
{'|','0','0','0','0','|','o','0','0','0','|','0','e','0','|','e','0','0','|'},
{'|','0','0','0','0','|','0','0','0','0','0','0','0','0','0','0','0','0','|'},
{'|','0','-','-','-','|','-','-','-','0','0','0','0','0','0','0','0','0','|'},
{'|','0','0','0','0','0','0','0','0','0','|','0','o','o','|','0','0','s','|'},
{'|','0','-','-','-','-','-','-','0','-','|','0','0','0','|','-','-','-','|'},
{'|','0','e','0','0','|','0','o','0','0','|','0','0','0','|','0','0','0','|'},
{'|','0','0','0','0','|','0','0','0','0','|','s','0','s','0','0','0','o','|'},
{'|','0','o','0','0','|','0','e','0','0','|','-','-','0','0','0','0','0','|'},
{'|','0','0','0','0','|','0','0','0','0','|','0','0','0','|','0','0','0','|'},
{'|','0','0','-','-','-','-','-','-','0','0','0','0','0','|','-','-','0','|'},
{'|','0','o','0','0','0','0','0','0','0','0','e','e','0','|','0','o','0','|'},
{'|','0','0','-','-','|','0','0','0','0','|','0','0','0','|','o','0','0','|'},
{'|','0','0','0','0','|','o','0','e','0','|','0','0','0','|','0','e','0','|'},
{'|','0','e','0','0','|','0','0','0','0','|','0','s','0','|','0','0','0','|'},
{'|','0','0','e','0','|','s','0','0','0','|','e','0','0','|','e','0','0','|'},
{'|','0','0','0','0','|','0','0','0','0','|','0','0','0','|','0','s','0','|'},
{'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'}
};
//初始化地图
int Cartography (void)
{
int x,y,i,j; //坐标变量
for (x=0,i=2;x<XMAX;++x,++i)
{
for (y=0,j=2;y<YMAX-1;++y,++j)
{
gotoxy (j,i); //定位光标
switch (Map[x][y]) //绘制地图
{
case '-': printf ("%c",45); delay (5000); break;
case '|': printf ("%c",179); delay (5000); break;
case 'e': printf ("%c",254); delay (5000); break;
case 'o': printf ("%c",35); delay (5000); break;
case 's': printf ("%c",3); delay (5000); break;
case '0': break; //空地的情况下
default : printf ("Map Error!"); break; //地图错误
}
}
}
return 0; //返回
}
//构造主角模块
int Character (void)
{
gotoxy (Condition.x,Condition.y); //得到主角初始位置
printf ("%c",2); //打印主角
return 0;
}
//显示信息模块
int Show (void)
{
gotoxy (30,4); delay (5000); printf ("小游戏 - 推箱子\tBy:帕帕 To:2007/4/22");
gotoxy (30,6); delay (5000); printf ("Checkpoint:"); //当前关卡
gotoxy (30,8); delay (5000); printf ("Your Score:"); //分数
gotoxy (30,10); delay (5000); printf ("Has used the time:"); //使用时间
return 0;
}
//键盘控制模块
int Control (void)
{
char temp; //临时单元
while (1) //死循环
{
if (kbhit ()) //检测键盘是否有键被按下
{
temp = bdos (7,0,0); //ascii码存入temp
switch (temp) //按下的是什么键
{
case 'H': //按下上方向键
if (Map[Condition.x][Condition.y-1] == '-' || Map[Condition.x][Condition.y-1] == '|') //前方是墙壁
{
break; //什么都不做
}
else
{
if (Map[Condition.x][Condition.y-1] == 'e' && Map[Condition.x][Condition.y-2] == 0) //前方是箱子,有足够空格
{
gotoxy (Condition.x,Condition.y); //定位当前坐标
printf ("%c",0); //清除当前主角
gotoxy (Condition.x,Condition.y-1); //定位箱子坐标
printf ("%c",2); //主角覆盖箱子
gotoxy (Condition.x,Condition.y-2); //定位新箱子坐标
printf ("%c",254); //打印新箱子
Condition.y-=1; //保存当前坐标
}
else //判断前方是箱子还是空地
{
if (Map[Condition.x][Condition.y-1] != 'e') //前方是空地
{
gotoxy (Condition.x,Condition.y);
printf ("%c",0);
gotoxy (Condition.x,Condition.y-1);
printf ("%c",2);
Condition.y-=1; //更新主角坐标
}
else //前方是箱子,但没足够空地移动
{
break;
}
}
}
break; //跳出分支结构
case 'P': //按下下方向键
if (Map[Condition.x][Condition.y+1] == '-' || Map[Condition.x][Condition.y+1] == '|') //前方是墙壁
{
break; //什么都不做
}
else
{
if (Map[Condition.x][Condition.y+1] == 'e' && Map[Condition.x][Condition.y+2] == 0) //前方是箱子,有足够空格
{
gotoxy (Condition.x,Condition.y); //定位当前坐标
printf ("%c",0); //清除当前主角
gotoxy (Condition.x,Condition.y+1); //定位箱子坐标
printf ("%c",2); //主角覆盖箱子
gotoxy (Condition.x,Condition.y+2); //定位新箱子坐标
printf ("%c",254); //打印新箱子
Condition.y+=1; //保存当前坐标
}
else //判断前方是箱子还是空地
{
if (Map[Condition.x][Condition.y+1] != 'e') //前方是空地
{
gotoxy (Condition.x,Condition.y);
printf ("%c",0);
gotoxy (Condition.x,Condition.y+1);
printf ("%c",2);
Condition.y+=1; //更新主角坐标
}
else //前方是箱子,但没足够空地移动
{
break;
}
}
}
break;
case 'K': //按下左方向键
if (Map[Condition.x-1][Condition.y] == '-' || Map[Condition.x-1][Condition.y] == '|') //前方是墙壁
{
break; //什么都不做
}
else
{
if (Map[Condition.x-1][Condition.y] == 'e' && Map[Condition.x-2][Condition.y] == 0) //前方是箱子,有足够空格
{
gotoxy (Condition.x,Condition.y); //定位当前坐标
printf ("%c",0); //清除当前主角
gotoxy (Condition.x-1,Condition.y); //定位箱子坐标
printf ("%c",2); //主角覆盖箱子
gotoxy (Condition.x-2,Condition.y); //定位新箱子坐标
printf ("%c",254); //打印新箱子
Condition.x-=1; //保存当前坐标
}
else //判断前方是箱子还是空地
{
if (Map[Condition.x-1][Condition.y] != 'e') //前方是空地
{
gotoxy (Condition.x,Condition.y);
printf ("%c",0);
gotoxy (Condition.x-1,Condition.y);
printf ("%c",2);
Condition.x-=1; //更新主角坐标
}
else //前方是箱子,但没足够空地移动
{
break;
}
}
}
break;
case 'M': //按下右方向键
if (Map[Condition.x+1][Condition.y] == '-' || Map[Condition.x+1][Condition.y] == '|') //前方是墙壁
{
break; //什么都不做
}
else
{
if (Map[Condition.x+1][Condition.y] == 'e' && Map[Condition.x+2][Condition.y] == 0) //前方是箱子,有足够空格
{
gotoxy (Condition.x,Condition.y); //定位当前坐标
printf ("%c",0); //清除当前主角
gotoxy (Condition.x+1,Condition.y); //定位箱子坐标
printf ("%c",2); //主角覆盖箱子
gotoxy (Condition.x+2,Condition.y); //定位新箱子坐标
printf ("%c",254); //打印新箱子
Condition.x+=1; //保存当前坐标
}
else //判断前方是箱子还是空地
{
if (Map[Condition.x+1][Condition.y] != 'e') //前方是空地
{
gotoxy (Condition.x,Condition.y);
printf ("%c",0);
gotoxy (Condition.x+1,Condition.y);
printf ("%c",2);
Condition.x+=1; //更新主角坐标
}
else //前方是箱子,但没足够空地移动
{
break;
}
}
}
break;
case 32: Cartography (); Character (); Show (); Control (); break;
case 27: clrscr (); printf ("游戏结束 ^_^\n"); getch (); exit (0);
}
}
}
return 0;
}
int main (void) //程序入口地址
{
Cartography (); //绘制地图
Character (); //打印人物
Show (); //打印附加信息
Control (); //键盘控制
getch ();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -