|
21鱼币
本帖最后由 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[10][12] = {
- {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[][12]); //显示地图
- 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[i][j] == 5 || ditu[i][j] == 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[rows-1][cols] == 0 || ditu[rows-1][cols] == 3)
- {
- ditu[rows][cols] -= 5;
- ditu[rows-1][cols] += 5;
- }
- // 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
- else if(ditu[rows-1][cols] == 4 || ditu[rows-1][cols] == 7)
- {
- //箱子前面是空地 箱子的前面的是目的地
- if(ditu[rows-2][cols] == 0 || ditu[rows-2][cols] == 3)
- {
- ditu[rows-2][cols] += 4;
- ditu[rows-1][cols] += 1;
- ditu[rows][cols] -= 5;
- }
- }
- break;
- case 80 :
- case 's': //下移
- case 'S':
- // 1 玩家的前面是空地 玩家的前面是目的地
- if(ditu[rows+1][cols] == 0 || ditu[rows+1][cols] == 3)
- {
- ditu[rows][cols] -= 5;
- ditu[rows+1][cols] += 5;
- }
- // 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
- else if(ditu[rows+1][cols] == 4 || ditu[rows+1][cols] == 7)
- {
- //箱子前面是空地 箱子的前面的是目的地
- if(ditu[rows+2][cols] == 0 || ditu[rows+2][cols] == 3)
- {
- ditu[rows+2][cols] += 4;
- ditu[rows+1][cols] += 1;
- ditu[rows][cols] -= 5;
- }
- }
- break;
- case 75 :
- case 'a': //左移
- case 'A':
- // 1 玩家的前面是空地 玩家的前面是目的地
- if(ditu[rows][cols-1] == 0 || ditu[rows][cols-1] == 3)
- {
- ditu[rows][cols] -= 5;
- ditu[rows][cols-1] += 5;
- }
- // 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
- else if(ditu[rows][cols-1] == 4 || ditu[rows][cols-1] == 7)
- {
- //箱子前面是空地 箱子的前面的是目的地
- if(ditu[rows][cols-2] == 0 || ditu[rows][cols-2] == 3)
- {
- ditu[rows][cols-2] += 4;
- ditu[rows][cols-1] += 1;
- ditu[rows][cols] -= 5;
- }
- }
- break;
- case 77 :
- case 'd': //右移
- case 'D':
- // 1 玩家的前面是空地 玩家的前面是目的地
- if(ditu[rows][cols+1] == 0 || ditu[rows][cols+1] == 3)
- {
- ditu[rows][cols] -= 5;
- ditu[rows][cols+1] += 5;
- }
- // 2 玩家前面是箱子 玩家的前面是箱子和目的地重合
- else if(ditu[rows][cols+1] == 4 || ditu[rows][cols+1] == 7)
- {
- //箱子前面是空地 箱子的前面的是目的地
- if(ditu[rows][cols+2] == 0 || ditu[rows][cols+2] == 3)
- {
- ditu[rows][cols+2] += 4;
- ditu[rows][cols+1] += 1;
- ditu[rows][cols] -= 5;
- }
- }
- break;
- }
- }
- //0 空地 1 墙壁 3 目的地 4 箱子 5 玩家
- //7 箱子和目的地重合 8 玩家和目的地重合
- void xianshiditu(int ditu[][12]) //显示地图
- {
- int i, j;
-
- for(i = 0; i < 10; i++)
- {
- for(j = 0; j < 12; j++)
- {
- switch(ditu[i][j])
- {
- 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[i][j] == 5 || ditu[i][j] == 8) //获取玩家当前坐标
- { // 如果还要取7 再移动~ 是不是把箱子也变成了人物。。。是不是就会出现两个人物~
- // 这时候程序移动的是哪个人物呢。。。
- rows = i;
- cols = j;
- }
- }
- }
复制代码
亲测解决
|
-
-
最佳答案
查看完整内容
我只能说你有点马虎大意~ 我检查了半天后面移动的代码 结果。。。。。算了我直接说重点吧~
亲测解决
|