小游戏●推箱子(利用二维数组制作)

利用数组制作的简单推箱子游戏

代码及简要分析如下:

  1             //推箱子小游戏
  2             //定义一个三维数组存放地图,三维数组由单独的二维数组组成,本游戏中只有三个地图
  3             int[][,] a = new int[3][,];
  4             //用二维数组创建地图,0是空位,1是墙,2是人,3是箱子,4是终点
  5             int[,] b0 = new int[10, 10]{
  6                         {1,1,1,1,1,1,1,1,1,1},
  7                         {1,0,0,0,1,0,1,0,0,1},
  8                         {1,0,0,0,1,0,1,0,0,1},
  9                         {1,0,3,0,1,0,1,0,0,1},
 10                         {1,0,0,0,1,1,1,0,0,1},
 11                         {1,0,0,0,0,0,0,0,0,1},
 12                         {1,0,0,1,0,0,0,0,0,1},
 13                         {1,2,0,1,1,1,1,0,0,1},
 14                         {1,0,0,1,0,4,0,0,0,1},
 15                         {1,1,1,1,1,1,1,1,1,1}};
 16             int[,] b1 = new int[10, 10]{
 17                         {1,1,1,1,1,1,1,1,1,1},
 18                         {1,0,0,0,1,0,1,0,0,1},
 19                         {1,0,3,0,1,0,1,3,0,1},
 20                         {1,0,0,0,1,0,1,0,0,1},
 21                         {1,0,0,0,1,1,1,0,0,1},
 22                         {1,0,0,0,0,0,0,0,0,1},
 23                         {1,0,0,1,4,0,0,0,0,1},
 24                         {1,2,0,1,1,1,1,0,0,1},
 25                         {1,0,0,1,0,4,0,0,0,1},
 26                         {1,1,1,1,1,1,1,1,1,1}};
 27             int[,] b2 = new int[10, 10]{
 28                       {1,1,1,1,1,1,1,1,1,1},
 29                       {1,0,4,1,0,0,0,0,0,1},
 30                       {1,0,0,1,0,0,0,0,4,1},
 31                       {1,0,0,0,0,0,0,0,4,1},
 32                       {1,0,0,3,0,0,0,0,0,1},
 33                       {1,1,1,0,0,0,0,0,0,1},
 34                       {1,0,0,2,0,0,0,0,0,1},
 35                       {1,0,3,0,1,0,3,0,0,1},
 36                       {1,0,0,0,1,0,0,0,0,1},
 37                       {1,1,1,1,1,1,1,1,1,1}};
 38             a[0] = b0;
 39             a[1] = b1;
 40             a[2] = b2;
 41
 42
 43             for (int z = 0; z < 3; z++)    //如果增加地图,需修改判断条件
 44             {//for1
 45                 Console.Clear();
 46                 Console.WriteLine("第{0}关!", z + 1);    //清屏并显示第几关
 47
 48                 ConsoleKeyInfo start = Console.ReadKey();
 49                 string st = start.Key.ToString().ToLower();    //以上两行为读取按键信息,转成字符串格式并小写
 50                 //游戏开始
 51                 if (st == "spacebar")    //按空格键,游戏开始
 52                 {//if1
 53                     int[,] map = a[z];    //读取地图
 54
 55                     //判断人的位置,i为行,j为列
 56                     int i = 0, j = 0;
 57                     for (int m = 0; m < 10; m++)
 58                     {
 59                         for (int n = 0; n < 10; n++)
 60                         {
 61                             if (map[m, n] == 2)
 62                             {
 63                                 i = m;
 64                                 j = n;
 65                                 break;
 66                             }
 67                         }
 68                     }
 69
 70                     //判断终点个数
 71                     int over = 0;
 72                     for (int m = 0; m < 10; m++)
 73                     {
 74                         for (int n = 0; n < 10; n++)
 75                         {
 76                             if (map[m, n] == 4)
 77                             {
 78                                 over++;
 79                             }
 80                         }
 81                     }
 82
 83                     //显示及操作
 84                     for (; true; )
 85                     {//for2
 86                         //输出显示
 87                         Console.Clear();
 88                         for (int x = 0; x < 10; x++)
 89                         {
 90                             for (int y = 0; y < 10; y++)
 91                             {
 92                                 if (map[x, y] == 0)
 93                                 {
 94                                     Console.Write("  ");
 95                                 }
 96                                 else if (map[x, y] == 1)
 97                                 {
 98                                     Console.Write("■");
 99                                 }
100                                 else if (map[x, y] == 2 || map[x, y] == 6)
101                                 {
102                                     Console.Write("♀");
103                                 }
104                                 else if (map[x, y] == 3 || map[x, y] == 7)
105                                 {
106                                     Console.Write("□");
107                                 }
108                                 else if (map[x, y] == 4)
109                                 {
110                                     Console.Write("※");
111                                 }
112                             }
113                             Console.Write("\n");    //换行
114                         }
115
116                         //判断有箱子的终点个数
117                         int over1 = 0;
118                         for (int m = 0; m < 10; m++)
119                         {
120                             for (int n = 0; n < 10; n++)
121                             {
122                                 if (map[m, n] == 7)
123                                 {
124                                     over1++;
125                                 }
126                             }
127                         }
128
129                         //判断是否所有终点有箱子
130                         if (over1 == over)
131                         {
132                             Console.WriteLine("过关!");
133                             break;
134                         }
135
136                         //操作部分
137                         ConsoleKeyInfo K = Console.ReadKey();
138                         string k = K.Key.ToString();
139                         k = k.ToLower();
140                         if (k == "uparrow")    //判断人是否是向上
141                         {
142                             if (map[i - 1, j] == 0 || map[i - 1, j] == 4)    //判断人上方是不是空位
143                             {
144                                 map[i - 1, j] = map[i - 1, j] + 2;
145                                 map[i, j] = map[i, j] - 2;
146                                 i--;    //人移动之后,改变其所在行数
147                             }
148                             else if ((map[i - 1, j] == 3 || map[i - 1, j] == 7) && map[i - 2, j] != 1)    //人上方是箱子,判断箱子上方是否是空位
149                             {
150                                 map[i - 2, j] = map[i - 2, j] + 3;
151                                 map[i - 1, j] = map[i - 1, j] - 3 + 2;
152                                 map[i, j] = map[i, j] - 2;
153                                 i--;    //人移动之后,改变其所在行数
154                             }
155                             else    //如果人移动,输出提示音
156                                 Console.Write("\a");
157                         }
158                         else if (k == "downarrow")
159                         {
160                             if (map[i + 1, j] == 0 || map[i + 1, j] == 4)    //判断人下方是不是空位
161                             {
162                                 map[i + 1, j] = map[i + 1, j] + 2;
163                                 map[i, j] = map[i, j] - 2;
164                                 i++;    //人移动之后,改变其所在行数
165                             }
166                             else if ((map[i + 1, j] == 3 || map[i + 1, j] == 7) && map[i + 2, j] != 1)    //人下方是箱子,判断箱子下方是否是空位
167                             {
168                                 map[i + 2, j] = map[i + 2, j] + 3;
169                                 map[i + 1, j] = map[i + 1, j] - 3 + 2;
170                                 map[i, j] = map[i, j] - 2;
171                                 i++;    //人移动之后,改变其所在行数
172                             }
173                             else    //如果人移动,输出提示音
174                                 Console.Write("\a");
175                         }
176                         else if (k == "leftarrow")
177                         {
178                             if (map[i, j - 1] == 0 || map[i, j - 1] == 4)    //判断人左方是不是空位
179                             {
180                                 map[i, j - 1] = map[i, j - 1] + 2;
181                                 map[i, j] = map[i, j] - 2;
182                                 j--;    //人移动之后,改变其所在列数
183                             }
184                             else if ((map[i, j - 1] == 3 || map[i, j - 1] == 7) && map[i, j - 2] != 1)    //人左方是箱子,判断箱子左方是否是空位
185                             {
186                                 map[i, j - 2] = map[i, j - 2] + 3;
187                                 map[i, j - 1] = map[i, j - 1] - 3 + 2;
188                                 map[i, j] = map[i, j] - 2;
189                                 j--;    //人移动之后,改变其所在列数
190                             }
191                             else    //如果人移动,输出提示音
192                                 Console.Write("\a");
193                         }
194                         else if (k == "rightarrow")
195                         {
196                             if (map[i, j + 1] == 0 || map[i, j + 1] == 4)    //判断人右方是不是空位
197                             {
198                                 map[i, j + 1] = map[i, j + 1] + 2;
199                                 map[i, j] = map[i, j] - 2;
200                                 j++;    //人移动之后,改变其所在列数
201                             }
202                             else if ((map[i, j + 1] == 3 || map[i, j + 1] == 7) && map[i, j + 2] != 1)    //人右方是箱子,判断箱子右方是否是空位
203                             {
204                                 map[i, j + 2] = map[i, j + 2] + 3;
205                                 map[i, j + 1] = map[i, j + 1] - 3 + 2;
206                                 map[i, j] = map[i, j] - 2;
207                                 j++;    //人移动之后,改变其所在列数
208                             }
209                             else    //如果人移动,输出提示音
210                                 Console.Write("\a");
211                         }
212                         else if (k == "b")    //按“B”键,重新开始
213                         {
214                             z--;    //用来抵消for1的“z++”
215                             break;    //跳出for2循环
216                         }
217                     }//for2
218                 }//if1
219                 else if (st == "n")    //按“N”键,进入下一关
220                 {
221                     continue;    //for1进入下一次循环
222                 }
223                 else
224                     Console.Write("\a");
225             }//for1
时间: 2024-11-16 01:55:12

小游戏●推箱子(利用二维数组制作)的相关文章

小游戏●贪吃蛇1(利用二维数组制作)

利用二维数组编写简单贪吃蛇小游戏,由于是初学C#,用的是单线程,所以蛇不会自动前进 代码及简要分析如下: 1 //定义地图,0为空,1为墙,2为蛇,3为食物 2 int[,] map = new int[15, 15]{ 3 {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, 4 {1,2,0,0,0,0,0,0,0,0,0,0,0,0,1}, 5 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1}, 6 {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)

1 //数组间的关系arr[]中的数字为几,[]内就有几个数 2 //{ }内的数是从0开始,如需要打印应从0开数 3 如{2,6,9,8,7}打印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int main() 7 { 8 int arr[] = { 1,2,3,4,8}; 9 10 printf("%d\n", arr[3]); 11 12 system("pause");

【C语言】利用二维数组输出成绩

目的:用二维数组输出下面成绩 希望你可以成为第五名童鞋! 代码: #include<stdio.h> int main() { /* 创建一个带有 4行 5 列的数组 */ int a[4][5] = { {80,92,85,86,99}, {78,65,89,70,99}, {67,78,76,89,99}, {88,68,98,90,99} }; int i, j; /* 输出数组中每个元素的值 */ for (i = 0; i < 4; i++) { for (j = 0; j &

经典小游戏--推箱子

//0是空位,1是墙,2是人,3是箱子,4是终点 int[][,] a = new int[2][,]; int[,] b0 = new int[10, 10]{ {1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,1,0,1,0,0,1}, {1,0,0,0,1,0,1,0,0,1}, {1,0,3,0,1,0,1,0,0,1}, {1,0,0,0,1,1,1,0,0,1}, {1,0,0,0,0,0,0,0,0,1}, {1,0,0,1,0,0,0,0,0,1}, {1,2,0,

《剑指Offer 1.二维数组中的查找》2019-03-25

剑指Offer  第一题 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 本人简单的解题思路  就是通过二重循环,遍历.查找数组中是否有目标数字,思路是简单的,但是有个小坑 ,就是没有进行数组越界判断 少判断了  array = [ [ ] ] 这种情况,最终通过的代码为 public class Solution { public bool

【转载】二维数组的动态分配和参数传递

本篇随笔为转载,原贴地址:http://www.cnblogs.com/bigshow/archive/2009/01/03/1367661.html. 1. C语言动态分配二维数组 (1)已知第二维 Code-1 char (*a)[N];//指向数组的指针 a = (char (*)[N])malloc(sizeof(char *) * m); printf("%d\n", sizeof(a));//4,指针 printf("%d\n", sizeof(a[0]

(二维数组 亿进制 或 滚动数组) Hat&#39;s Fibonacci hdu1250

Hat's Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12284    Accepted Submission(s): 4124 Problem Description A Fibonacci sequence is calculated by adding the previous two members t

C语言 二维数组(指针)动态分配和释放(转)

C 二维数组(指针)动态分配和释放 先明确下概念: 所谓32位处理器就是一次只能处理32位,也就是4个字节的数据,而64位处理器一次就能处理64位,即8个字节的数据.如果我们将总长128位的指令分别按照16位.32位.64位为单位进行编辑的话:旧的16位处理器,比如Intel 80286 CPU需要8个指令,32位的处理器需要4个指令,而64位处理器则只要两个指令,显然,在工作频率相同的情况下,64位处理器的处理速度会比16位.32位的更快.而且除了运算能力之外,与32位处理器相比,64位处理器

c语言中如何通过二级指针来操作二维数组

通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅助理解. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <stdio.h>//输入输出头文件. #include <stdlib.h>//本程序需要用到malloc/free函数,引