您的位置:首页 > 编程语言 > C语言/C++

C语言实践之推箱子游戏思路与代码

2017-08-31 09:17 639 查看
直入正题

推箱子的基本实现思路就是

1.首先绘制一个地图

有箱子,人,目的地,墙

2.实现人的基本移动

3.实现人推箱子和箱子与目的地重合

首先是1

绘制地图就用二维Int数组就好,不同的数代表不同的东西

2 用kbhit()函数检测按键  然后若有方向键按下则改变数组中的数字重新绘制地图

3 人移动时检测前方物体 是箱子或者是墙 决定是否移动

代码如下

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
void DrawMap(int map[10][12]);
void checkkb();
int a=0,b=0;
int count = 0;//分数0
int gmap[10][12]={
{0,0,0,1,1,1,0,0,0,0,0,0},
{0,0,0,1,3,1,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,1,1,1},
{1,1,1,1,4,0,4,0,0,0,3,1},
{1,3,0,0,4,2,1,1,1,1,1,1},
{1,1,1,1,1,4,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0,0},
{0,0,0,0,1,3,1,0,0,0,0,0},
{0,0,0,0,1,1,1,0,0,0,0,0}};//1代表墙 2代表人 3代表目标位置 4代表箱子
int main(){

//设置窗口大小
system("mode con cols=80 lines=25");
//设置窗口标题
SetConsoleTitleA("推箱子");
while(1){
system("cls");//清屏
p
4000
rintf(" 推箱子游戏\n");
checkkb();
DrawMap(gmap);

printf("分数:%d\n",count);
printf("坐标:<%d,%d>\n",a+1,b+1);

_sleep(50);
}
return 0;
}

void DrawMap(int map[10][12]){
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
switch(map[i][j]){
case 0:
printf(" ");//画道路
break;
case 1:
printf("█");//画墙
break;
case 3:
printf("&&");//画目的地
break;
case 2:
printf("♂");//画小人
a=i;b=j;
break;
case 4:
printf("□");//画箱子
break;
case 5:
printf("★");//箱子和目的地重合
break;

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

void checkkb(){
if(kbhit()){
char c = getch();
switch(c){
case 72://上
switch(gmap[a-1][b]){
case 0://路
gmap[a][b]=0;
gmap[a-1][b]=2;
break;
case 4://箱子
if(gmap[a-2][b]==3){//是目的地
gmap[a][b]=0;
gmap[a-2][b]=5;
gmap[a-1][b]=2;
count++;
break;
}
if(gmap[a-2][b]!=1){//不是墙
gmap[a][b]=0;
gmap[a-2][b]=4;
gmap[a-1][b]=2;
}

break;

}

break;
case 80://下
switch(gmap[a+1][b]){
case 0://路
gmap[a][b]=0;
gmap[a+1][b]=2;
break;
case 4://箱子
if(gmap[a+2][b]==3){//是目的地
gmap[a][b]=0;
gmap[a+2][b]=5;
gmap[a+1][b]=2;
count++;
break;
}
if(gmap[a+2][b]!=1){//不是墙
gmap[a][b]=0;
gmap[a+2][b]=4;
gmap[a+1][b]=2;
}

break;

}
break;
case 75://左
switch(gmap[a][b-1]){
case 0://路
gmap[a][b]=0;
gmap[a][b-1]=2;
break;
case 4://箱子
if(gmap[a][b-2]==3){//是目的地
gmap[a][b]=0;
gmap[a][b-2]=5;
gmap[a][b-1]=2;
count++;
break;
}
if(gmap[a][b-2]!=1){//不是墙
gmap[a][b]=0;
gmap[a][b-2]=4;
gmap[a][b-1]=2;
}

break;

}
break;
case 77://右
switch(gmap[a][b+1]){
case 0://路
gmap[a][b]=0;
gmap[a][b+1]=2;
break;
case 4://箱子
if(gmap[a][b+2]==3){//是目的地
gmap[a][b]=0;
gmap[a][b+2]=5;
gmap[a][b+1]=2;
count++;
break;
}
if(gmap[a][b+2]!=1){//不是墙
gmap[a][b]=0;
gmap[a][b+2]=4;
gmap[a][b+1]=2;
}

break;

}
break;
}
}
}


代码显得有些罗嗦 比较笔者初学者  请多多见谅!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 C++ 游戏