1 #include <stdio.h>
2 /*
3 游戏说明:玩家通过键盘录入 w,s,a,d控制小人向不同方向移动,其中w代表向上移动,s代表向下移动,a代表向左移动,d 代表向右移动,当小人移动到出口位置,玩家胜利
4
5 地图如下:
6 ######
7 #O#
8 # ## #
9 # # #
10 ## #
11 ######
12 说明: # 代表 墙 O代表小人 ‘ ’ 代表路
13
14
15 分析:
16 1、打印地图
17 1、保存地图
18 2、打印
19 2、让玩家移动小人
20 1、提示玩家如何移动小人
21 2、接收玩家的录入
22 3、根据玩家录入来移动小人
23 3、判断输赢
24 */
25
26
27 int main(int argc, const char * argv[]) {
28
29 // 1、保存地图
30 char map[6][6] = {
31 {'#','#','#','#','#','#'},
32 {'#','O','#',' ',' ',' '},
33 {'#',' ','#','#',' ','#'},
34 {'#',' ',' ','#',' ','#'},
35 {'#','#',' ',' ',' ','#'},
36 {'#','#','#','#','#','#'}
37 };
38
39 // 打印地图
40 for (int i = 0; i < 6; i++) {
41
42 for (int j = 0; j < 6; j++) {
43 printf("%c",map[i][j]);
44 }
45 printf("\n");
46 }
47
48
49
50
51 // 为了计算小人下一个位置,我们必须首先直到小人当前位置
52 // 小人当前位置的X坐标
53 int currentX = 1;
54 // 小人当前位置的Y坐标
55 int currentY = 1;
56
57 // 3.1根据玩家的录入移动小人
58 // 为了判断小人的移动,我们需要定义变量来表示路
59 char street = ' ';
60
61 while (1) {
62
63 // 2.1 提示玩家移动小人
64 printf("请移动小人,w表示向上,s表示向下,a表示向左,d表示向右\n");
65
66 // 2.2接收用户的录入
67 char direction;
68 // %c 前面加一个空格,来吃掉后面的回车
69 scanf(" %c",&direction);
70
71 switch (direction) {
72 case 'w':{
73 int nextX = currentX -1;
74 if (map[nextX][currentY] == street) {
75 // 交换位置
76 char temp = map[currentX][currentY];
77
78 map[currentX][currentY] = map[nextX][currentY];
79
80 map[nextX][currentY] = temp;
81 // 改变小人当前位置
82 currentX = nextX;
83 }
84 break;
85 }
86 case 's':{
87 // 如果小人下一个位置是路就移动小人
88 int nextX = currentX + 1;
89 if (map[nextX][currentY] == street) {
90 // 定义中间变量记录小人的当前位置
91 // 交换位置
92 char temp = map[currentX][currentY];
93
94 map[currentX][currentY] = map[nextX][currentY];
95
96 map[nextX][currentY] = temp;
97
98 // 改变小人当前位置
99 currentX = nextX;
100 }
101
102 break;
103 }
104 case 'a':{
105 // 计算小人下一个位置
106 int nextY = currentY - 1;
107
108 if (map[currentX][nextY] == street) {
109 // 交换位置
110 char temp = map[currentX][currentY];
111 map[currentX][currentY] = map[currentX][nextY];
112 map[currentX][nextY] = temp;
113 // 改变小人当前位置
114 currentY = nextY;
115 }
116 break;
117 }
118
119 case 'd':{
120 // 计算小人下一个位置
121 int nextY = currentY + 1;
122
123 if (map[currentX][nextY] == street) {
124 // 交换位置
125 char temp = map[currentX][currentY];
126 map[currentX][currentY] = map[currentX][nextY];
127 map[currentX][nextY] = temp;
128 // 改变小人当前位置
129 currentY = nextY;
130 }
131 break;
132 }
133
134
135 default:
136 break;
137 }
138
139
140 // 打印地图
141 for (int i = 0; i < 6; i++) {
142
143 for (int j = 0; j < 6; j++) {
144 printf("%c",map[i][j]);
145 }
146 printf("\n");
147 }
148
149
150 if(currentX == 1 && currentY == 5)
151 {
152 printf("你好牛X!\n");
153 break;
154 }
155 }
156
157
158 return 0;
159 }