小游戏●贪吃蛇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},
  7                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
  8                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
  9                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 10                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 11                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 12                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 13                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 14                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 15                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 16                     {1,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
 17                     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
 18
 19
 20             //确认蛇头位置,创建一个集合放蛇经过的位置
 21             int x = 1, y = 1;
 22             ArrayList snake = new ArrayList();
 23             snake.Add(x);
 24             snake.Add(y);
 25
 26             for (; ; )
 27             {//for1
 28                 //判断蛇身长,长度为10,过关
 29                 if (snake.Count == 20)
 30                 {
 31                     Console.Clear();
 32                     Console.WriteLine("过关!");
 33                     break;
 34                 }
 35
 36                 //随机生成食物
 37                 bool z = true;
 38                 for (; z; )
 39                 {
 40                     Random food = new Random();
 41                     int p = food.Next(15);    //p,q为生成的食物的行列坐标
 42                     int q = food.Next(15);
 43                     for (int m = 0; m < 15; m++)
 44                     {
 45                         for (int n = 0; n < 15; n++)
 46                         {
 47                             if (map[p, q] == 0)    //在空位生成食物
 48                             {
 49                                 map[p, q] = 3;
 50                                 z = false;
 51                                 break;
 52                             }
 53                         }
 54                     }
 55                 }
 56
 57                 //显示及操作部分
 58                 for (; ; )
 59                 {//for2
 60                     //System.Threading.Thread.Sleep(1000);
 61                     //显示
 62                     Console.Clear();
 63                     for (int m = 0; m < 15; m++)
 64                     {
 65                         for (int n = 0; n < 15; n++)
 66                         {
 67                             if (map[m, n] == 0)
 68                             {
 69                                 Console.Write("  ");
 70                             }
 71                             if (map[m, n] == 1)
 72                             {
 73                                 Console.Write("■");
 74                             }
 75                             if (map[m, n] == 2)
 76                             {
 77                                 Console.Write("◆");
 78                             }
 79                             if (map[m, n] == 3)
 80                             {
 81                                 Console.Write("¤");
 82                             }
 83                             //Console.Write(map[m,n]);
 84                         }
 85                         Console.Write("\n");
 86                     }
 87
 88                     //判断是否吃掉食物
 89                     int food = 0;
 90                     for (int m = 0; m < 15; m++)
 91                     {
 92                         for (int n = 0; n < 15; n++)
 93                         {
 94                             if (map[m, n] == 3)    //用来判断食物个数
 95                             {
 96                                 food++;
 97                                 break;
 98                             }
 99                         }
100                     }
101                     if (food == 0)    //如果食物个数为0,跳出for2循环
102                     {
103                         break;
104                     }
105
106                     //操作部分
107                     ConsoleKeyInfo input = Console.ReadKey();    //读取按键信息
108                     string move = input.Key.ToString().ToLower();
109                     int a = (int)snake[0], b = (int)snake[1];    //从集合snake中读取蛇尾行列坐标
110                     x = (int)snake[snake.Count - 2];    //x,y为蛇头行列坐标
111                     y = (int)snake[snake.Count - 1];
112
113                     if (move == "uparrow")    //判断是否是向上按键
114                     {
115                         if (map[x - 1, y] == 0)    //上方为空位
116                         {
117                             map[x - 1, y] = 2;    //上方位置变为蛇头
118                             map[a, b] = 0;    //蛇经过,蛇尾位置重新变成空位
119                             snake.Add(x - 1);    //以下两行为:把蛇头经过位置的坐标放入集合
120                             snake.Add(y);
121                             snake.RemoveAt(0);    //以下两行为:把蛇尾经过位置坐标抛出集合
122                             snake.RemoveAt(0);
123                         }
124                         else if (map[x - 1, y] == 3)    //上方为食物
125                         {
126                             map[x - 1, y] = 2;
127                             snake.Add(x - 1);
128                             snake.Add(y);
129                         }
130                         else
131                             Console.Write("\a");
132                     }
133                     else if (move == "downarrow")
134                     {
135                         if (map[x + 1, y] == 0)
136                         {
137                             map[x + 1, y] = 2;
138                             map[a, b] = 0;
139                             snake.Add(x + 1);
140                             snake.Add(y);
141                             snake.RemoveAt(0);
142                             snake.RemoveAt(0);
143                         }
144                         else if (map[x + 1, y] == 3)
145                         {
146                             map[x + 1, y] = 2;
147                             snake.Add(x + 1);
148                             snake.Add(y);
149                         }
150                         else
151                             Console.Write("\a");
152                     }
153                     else if (move == "leftarrow")
154                     {
155                         if (map[x, y - 1] == 0)
156                         {
157                             map[x, y - 1] = 2;
158                             map[a, b] = 0;
159                             snake.Add(x);
160                             snake.Add(y - 1);
161                             snake.RemoveAt(0);
162                             snake.RemoveAt(0);
163                         }
164                         else if (map[x, y - 1] == 3)
165                         {
166                             map[x, y - 1] = 2;
167                             snake.Add(x);
168                             snake.Add(y - 1);
169                         }
170                         else
171                             Console.Write("\a");
172                     }
173                     else if (move == "rightarrow")
174                     {
175                         if (map[x, y + 1] == 0)
176                         {
177                             map[x, y + 1] = 2;
178                             map[a, b] = 0;
179                             snake.Add(x);
180                             snake.Add(y + 1);
181                             snake.RemoveAt(0);
182                             snake.RemoveAt(0);
183                         }
184                         else if (map[x, y + 1] == 3)
185                         {
186                             map[x, y + 1] = 2;
187                             snake.Add(x);
188                             snake.Add(y + 1);
189                         }
190                         else
191                             Console.Write("\a");
192                     }
193                     else
194                         Console.Write("\a");    //如果按错按键,发出提示音
195                 }//for2
196             }//for1

游戏截图

时间: 2024-10-10 18:01:53

小游戏●贪吃蛇1(利用二维数组制作)的相关文章

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

利用数组制作的简单推箱子游戏 代码及简要分析如下: 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

Pascal小游戏 贪吃蛇

一段未完成的Pascal贪吃蛇 说这段代码未完成其实是没有源代码格式化,FP中一行最多只有255字符宽. uses crt; const screenwidth=50; screenheight=24; wallchar='#'; snakechar='*'; ; type point=record x,y:integer; end; var snake:array [0..500] of point; map:array [0..screenwidth,0..screenheight] of

控制台小游戏-贪吃蛇,c++和c#版

说是c++版,其实只是用到了c++的cout和cin而已.这是我做的第二个控制台游戏,基本上每一行代码都加上了注释. 游戏嘛,我觉得重要的是了解他的思想,所以后期学了面向对象之后这个游戏的代码我也没有重新封装. 下面请看图 代码如下:我是用dev c++写的 1 //注释. ---星辰 2 3 #include <iostream> 4 #include<Windows.h> 5 #include<ctime> 6 #include<cstdlib> 7 #

java小游戏贪吃蛇大作战:来一起回顾童年回忆!

Java小项目之贪吃蛇 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 贪吃蛇,绝对是很多朋友的童年记忆.几乎没有人会说没玩过这款小游戏,因为不管在小灵通手机,直板手机,还是半智能手机,甚至是现在的5G手机,都能看见这款游戏的身影.虽然游戏一直在进化,画面,风格,操作方式越来越精细,但是游戏本质的玩法是没变的,例如蛇不断变大,碰到墙壁会死亡等设定.这篇文章来分享java小游戏贪吃蛇:部分代码展示:这个贪吃蛇小游戏,玩法和操控,都是比较完善的,大家感兴趣的可

这是现代软件工程课结对作业 ——小游戏“贪吃蛇”

Github代码链接 https://github.com/liangjianming/jieduizuoye 实验简介: 本次实验为合作实验 实验分工: 本次选择了经典的游戏贪吃蛇,相信大家都玩过,这次实验分工是这样的: 实验的逻辑框架为讨论之后得出: 如果顺利吃掉食物即为成功,并输出成功,如果撞到自己和墙即为失败,输出游戏失败,添加了一些简单的游戏界面,游戏监听器和线程等, 定义食物是随机的,由 random() 决定, 并控制了窗口大小坐标: 十位*60为横坐标 weix=(int)(fo

PHP 小坑 mark(PHP json_encode 二维数组)

PHP json_encode 二维数组 eg: array( 3 => array( 'a' => 1, 'b' => 2, ), ); json_encode后 期望:数组类型 [{"a":"1","b":"2"}] 实际:对象类型 {"3": .....省略}

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

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 &

手把手教学h5小游戏 - 贪吃蛇

简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yanjd.top 第一步 - 制作想法 游戏如何实现是首要想的,这里我的想法如下: 利用canvas进行绘制地图(格子装). 利用canvas绘制蛇,就是占用地图格子.让蛇移动,即:更新蛇坐标,重新绘制. 创建四个方向按钮,控制蛇接下来的方向. 随机在地图上绘制出果子,蛇移动时"吃"到果子,增