初学控制台推箱子,操作后出现莫名bug,各路英雄好汉帮忙 拔下刀呗
本帖最后由 Dr丶温 于 2018-3-2 21:38 编辑路过大神帮忙调教下呗
#include <stdio.h>
#include <conio.h>
#define YS1 9
#define YS2 9
//全局变量控制上下左右方向
//0 空地 1 墙壁 3 目的地 4 箱子 5 玩家
//7 箱子和目的地重合8 玩家和目的地重合
int ditu = {
{0,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,3,1},
{1,3,0,0,0,4,5,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}
};
void xianshiditu(int ditu[]); //显示地图
void kongzhi(void); //控制上下左右
int main(void)
{
while(1)
{
system("cls");
xianshiditu(ditu);
kongzhi();
}
getch();
return 0;
}
void kongzhi(void)
{
int i, j, k = 0;
int rows, cols;
for(i = 0; i < 10; i++)
{
for(j = 0; j < 12; j++)
{
if(ditu == 5 || ditu == 7) //获取玩家当前坐标
{
rows = i;
cols = j;
}
}
}
printf("坐标(%d, %d)\n", rows+1, cols+1);
printf("分数:%d\n", k);
switch(getch()) //从键盘获取键盘输入方向
{
case 72 :
case 'w': //上移
case 'W':
// 1 玩家的前面是空地 玩家的前面是目的地
if(ditu == 0 || ditu == 3)
{
ditu -= 5;
ditu += 5;
}
// 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
else if(ditu == 4 || ditu == 7)
{
//箱子前面是空地 箱子的前面的是目的地
if(ditu == 0 || ditu == 3)
{
ditu += 4;
ditu += 1;
ditu -= 5;
}
}
break;
case 80 :
case 's': //下移
case 'S':
// 1 玩家的前面是空地 玩家的前面是目的地
if(ditu == 0 || ditu == 3)
{
ditu -= 5;
ditu += 5;
}
// 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
else if(ditu == 4 || ditu == 7)
{
//箱子前面是空地 箱子的前面的是目的地
if(ditu == 0 || ditu == 3)
{
ditu += 4;
ditu += 1;
ditu -= 5;
}
}
break;
case 75 :
case 'a': //左移
case 'A':
// 1 玩家的前面是空地 玩家的前面是目的地
if(ditu == 0 || ditu == 3)
{
ditu -= 5;
ditu += 5;
}
// 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
else if(ditu == 4 || ditu == 7)
{
//箱子前面是空地 箱子的前面的是目的地
if(ditu == 0 || ditu == 3)
{
ditu += 4;
ditu += 1;
ditu -= 5;
}
}
break;
case 77 :
case 'd': //右移
case 'D':
// 1 玩家的前面是空地 玩家的前面是目的地
if(ditu == 0 || ditu == 3)
{
ditu -= 5;
ditu += 5;
}
// 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
else if(ditu == 4 || ditu == 7)
{
//箱子前面是空地 箱子的前面的是目的地
if(ditu == 0 || ditu == 3)
{
ditu += 4;
ditu += 1;
ditu -= 5;
}
}
break;
}
}
//0 空地 1 墙壁 3 目的地 4 箱子 5 玩家
//7 箱子和目的地重合8 玩家和目的地重合
void xianshiditu(int ditu[]) //显示地图
{
int i, j;
for(i = 0; i < 10; i++)
{
for(j = 0; j < 12; j++)
{
switch(ditu)
{
case 0 : //空地
printf("");
break;
case 1 : // 墙壁
printf("〓");
break;
case 4 : //箱子
printf("□");
break;
case 3 : // 目的地
printf("∷");
break;
case 5 : //玩家
case 8 : //玩家和目的地重合
printf("♂");
break;
case 7 : // 箱子和目的地重合
printf("■");
break;
}
}
printf("\n");
}
} 我只能说你有点马虎大意~ 我检查了半天后面移动的代码结果。。。。。算了我直接说重点吧~
void kongzhi(void)
{
int i, j, k = 0;
int rows, cols;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 12; j++)
{
if (ditu == 5 || ditu == 8) //获取玩家当前坐标
{// 如果还要取7 再移动~ 是不是把箱子也变成了人物。。。是不是就会出现两个人物~
//这时候程序移动的是哪个人物呢。。。
rows = i;
cols = j;
}
}
}
亲测解决 风过无痕丶 发表于 2018-3-2 21:24
我只能说你有点马虎大意~ 我检查了半天后面移动的代码结果。。。。。算了我直接说重点吧~
诶,看来还要细心细心在细心了,感谢大佬调教。。。{:10_254:}
页:
[1]