首页 > 代码库 > 小游戏●贪吃蛇1(利用二维数组制作)
小游戏●贪吃蛇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 else131 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 else151 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 else171 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 else191 Console.Write("\a");192 }193 else194 Console.Write("\a"); //如果按错按键,发出提示音195 }//for2196 }//for1
游戏截图
小游戏●贪吃蛇1(利用二维数组制作)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。