效果图:
代码如下:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //1.画地图 0-空地 1-墙 2-箱子 3-小人 4-目标点 5-与箱子重合后的目标点 6 const int a = 3; 7 const int b = 10; 8 const int c = 10; 9 int[,,] map = new int[a, b, c] 10 { 11 { 12 {1,1,1,1,1,1,0,0,0,0}, 13 {1,0,3,0,0,1,0,0,0,0}, 14 {1,0,0,0,0,1,1,1,1,1}, 15 {1,0,0,0,0,0,0,0,0,1}, 16 {1,0,0,2,0,0,0,0,0,1}, 17 {1,0,0,0,0,0,0,0,0,1}, 18 {1,0,0,0,0,0,0,0,0,1}, 19 {1,0,0,0,0,0,0,0,0,1}, 20 {1,0,0,0,0,0,4,0,0,1}, 21 {1,1,1,1,1,1,1,1,1,1} 22 }, 23 { 24 {1,1,1,1,1,1,0,0,0,0}, 25 {1,0,0,0,0,1,0,0,0,0}, 26 {1,0,0,3,0,1,1,1,1,1}, 27 {1,0,2,0,0,0,0,0,0,1}, 28 {1,0,0,0,0,0,0,0,0,1}, 29 {1,0,0,4,0,2,0,0,0,1}, 30 {1,0,0,0,0,0,0,0,0,1}, 31 {1,0,0,0,0,0,0,0,0,1}, 32 {1,0,0,0,0,0,4,0,0,1}, 33 {1,1,1,1,1,1,1,1,1,1} 34 }, 35 { 36 {1,1,1,1,1,1,0,0,0,0}, 37 {1,0,3,0,0,1,0,0,0,0}, 38 {1,0,0,0,0,1,1,1,1,1}, 39 {1,0,0,0,0,0,0,0,0,1}, 40 {1,0,2,0,0,0,0,0,0,1}, 41 {1,0,0,1,0,0,0,0,0,1}, 42 {1,0,0,1,0,0,0,0,0,1}, 43 {1,0,0,1,0,0,4,0,0,1}, 44 {1,0,0,1,0,0,0,0,0,1}, 45 {1,1,1,1,1,1,1,1,1,1} 46 } 47 }; 48 //0 - 空地 1 - 墙 2 - 箱子 3 - 小人 4 - 目标点 5 - 与箱子重合后的目标点 49 int g = 0; 50 int x = -1; 51 int y = -1; 52 bool xr = false;//记录是否找到小人 53 //获取第一关小人坐标 54 for (int i = 0; i < b; i++) 55 { 56 for (int j = 0; j < c; j++) 57 { 58 if (map[g, i, j] == 3) 59 { 60 x = i; 61 y = j; 62 xr = true; 63 break; 64 } 65 if (xr == true) 66 break; 67 } 68 } 69 //地图数组未设置小人3 70 if (xr == false) 71 { 72 //死循环,防止系统崩溃 73 while (true) 74 { 75 Console.Write("游戏设置错误:第" + (g + 1) + "关未设置小人3!"); 76 Console.ReadLine(); 77 } 78 } 79 //开始循环 80 while (true) 81 { 82 //清除屏幕 83 Console.Clear(); 84 //地图显示 85 Console.WriteLine("第" + (g + 1) + "关:"); 86 for (int i = 0; i < b; i++) 87 { 88 for (int j = 0; j < c; j++) 89 { 90 if (map[g, i, j] == 0) 91 Console.Write(" "); 92 else if (map[g, i, j] == 1) 93 Console.Write("■"); 94 else if (map[g, i, j] == 2) 95 Console.Write("□"); 96 else if (map[g, i, j] == 3) 97 Console.Write("♀"); 98 else if (map[g, i, j] == 4) 99 Console.Write("☆"); 100 else if (map[g, i, j] == 5) 101 Console.Write("★"); 102 } 103 Console.WriteLine(); 104 } 105 //如果地图中不存在未完成目标点4,则过关。 106 int count = 0; 107 for (int i = 0; i < b; i++) 108 { 109 for (int j = 0; j < c; j++) 110 { 111 if (map[g, i, j] == 4) 112 count++; 113 } 114 } 115 if (count == 0) 116 { 117 g++; 118 if (g < a) 119 { 120 Console.WriteLine("恭喜过关!按回车进入下一关!"); 121 //获取下一关小人坐标 122 for (int i = 0; i < b; i++) 123 { 124 for (int j = 0; j < c; j++) 125 { 126 xr = false; 127 if (map[g, i, j] == 3) 128 { 129 x = i; 130 y = j; 131 xr = true; 132 break; 133 } 134 } 135 if (xr == true) 136 break; 137 } 138 //地图数组未设置小人3 139 if (xr == false) 140 { 141 //死循环,防止系统崩溃 142 while (true) 143 { 144 Console.Write("游戏设置错误:第" + (g + 1) + "关未设置小人3!"); 145 Console.ReadLine(); 146 } 147 } 148 Console.ReadLine(); 149 continue; 150 } 151 else 152 { 153 Console.WriteLine("恭喜通关!"); 154 break; 155 } 156 } 157 //2.让小人动起来 158 string k = Console.ReadKey().Key.ToString();//获取用户输入的按键 159 if (k == "UpArrow") 160 { 161 if (map[g, x - 1, y] == 0) 162 { 163 //人 空地 164 map[g, x, y] = 0; 165 map[g, x - 1, y] = 3; 166 x--; 167 } 168 else if (map[g, x - 1, y] == 2 && map[g, x - 2, y] == 0) 169 { 170 //人 箱子 空地 171 map[g, x, y] = 0; 172 map[g, x - 1, y] = 3; 173 map[g, x - 2, y] = 2; 174 x--; 175 } 176 else if (map[g, x - 1, y] == 2 && map[g, x - 2, y] == 4) 177 { 178 //人 箱子 目标点 179 map[g, x, y] = 0; 180 map[g, x - 1, y] = 3; 181 map[g, x - 2, y] = 5; 182 x--; 183 } 184 } 185 else if (k == "DownArrow") 186 { 187 if (map[g, x + 1, y] == 0) 188 { 189 //人 空地 190 map[g, x, y] = 0; 191 map[g, x + 1, y] = 3; 192 x++; 193 } 194 else if (map[g, x + 1, y] == 2 && map[g, x + 2, y] == 0) 195 { 196 //人 箱子 空地 197 map[g, x, y] = 0; 198 map[g, x + 1, y] = 3; 199 map[g, x + 2, y] = 2; 200 x++; 201 } 202 else if (map[g, x + 1, y] == 2 && map[g, x + 2, y] == 4) 203 { 204 //人 箱子 目标点 205 map[g, x, y] = 0; 206 map[g, x + 1, y] = 3; 207 map[g, x + 2, y] = 5; 208 x++; 209 } 210 211 } 212 else if (k == "LeftArrow") 213 { 214 if (map[g, x, y - 1] == 0) 215 { 216 //人 空地 217 map[g, x, y] = 0; 218 map[g, x, y - 1] = 3; 219 y--; 220 } 221 else if (map[g, x, y - 1] == 2 && map[g, x, y - 2] == 0) 222 { 223 //人 箱子 空地 224 map[g, x, y] = 0; 225 map[g, x, y - 1] = 3; 226 map[g, x, y - 2] = 2; 227 y--; 228 } 229 else if (map[g, x, y - 1] == 2 && map[g, x, y - 2] == 4) 230 { 231 //人 箱子 目标点 232 map[g, x, y] = 0; 233 map[g, x, y - 1] = 3; 234 map[g, x, y - 2] = 5; 235 y--; 236 } 237 } 238 else if (k == "RightArrow") 239 { 240 if (map[g, x, y + 1] == 0) 241 { 242 //人 空地 243 map[g, x, y] = 0; 244 map[g, x, y + 1] = 3; 245 y++; 246 } 247 else if (map[g, x, y + 1] == 2 && map[g, x, y + 2] == 0) 248 { 249 //人 箱子 空地 250 map[g, x, y] = 0; 251 map[g, x, y + 1] = 3; 252 map[g, x, y + 2] = 2; 253 y++; 254 } 255 else if (map[g, x, y + 1] == 2 && map[g, x, y + 2] == 4) 256 { 257 //人 箱子 目标点 258 map[g, x, y] = 0; 259 map[g, x, y + 1] = 3; 260 map[g, x, y + 2] = 5; 261 y++; 262 } 263 264 } 265 else 266 { 267 Console.WriteLine("按上下左右键控制小人移动!(按回车键继续游戏)"); 268 Console.ReadLine(); 269 } 270 } 271 Console.ReadLine(); 272 } 273 }