贪吃蛇1.0&&贪吃蛇2.0

  1 //
  2 //main.c
  3 //snake
  4 //
  5 //Created by Yubei Xiao on 12-12-16
  6 //Copyright (c) 2015年 Sun Yat-sen University.All rights reserved.
  7 //
  8
  9 #include<stdio.h>
 10 #include<stdlib.h>
 11 #include<time.h>
 12
 13 #define SNAKE_MAX_LENGTH 20
 14 #define SNAKE_HEAD ‘H‘
 15 #define SNAKE_BODY ‘X‘
 16 #define BLANK_CELL ‘ ‘
 17 #define WALL_CELL ‘*‘
 18
 19 //snake stepping: dy = -1(up),1(down); dx = -1(left),1(right),0(no move)
 20 void snakeMove(int, int);
 21 //put a food randomized on a blank cell
 22 void put_money(void);
 23 //our cells of the grid
 24 void output(void);
 25 //outs when gameover
 26 void gameover(void);
 27 //蛇是否碰到墙或者自身
 28 int pd();
 29
 30 char map[12][13] =//这里稍作了修改,因为12*12的字符矩阵每一行还要有‘\0‘必须要13长度才行
 31      {"************",
 32      "*XXXXH     *",
 33      "*          *",
 34      "*          *",
 35      "*          *",
 36      "*          *",
 37      "*          *",
 38      "*          *",
 39      "*          *",
 40      "*          *",
 41      "*          *",
 42      "************"};
 43
 44 // define vars for snake, notice name of vars in C
 45 int snakeY[SNAKE_MAX_LENGTH] = {1, 2, 3, 4, 5};//蛇身和蛇头的坐标
 46 int snakeX[SNAKE_MAX_LENGTH] = {1, 1, 1, 1, 1};//这里稍作了修改,因为原本的X和Y反了
 47 int snakeLength = 5;
 48
 49 int main() {
 50     while (pd()){//WHILE not 游戏结束 DO
 51         output();//输出字符矩阵
 52         char ch;
 53         scanf("%c", &ch);// ch=等待输入
 54         char t = getchar();//将输入的回车符清掉
 55         if (t != ‘\n‘) {
 56             printf("Please input the right angle!\n");
 57             while (t != ‘\n‘) {
 58                 t = getchar();
 59             }
 60             continue;
 61         }//因为游戏中可能玩家输入错误,如:AA,避免这种错误的出现导致程序混乱
 62         switch (ch) {// CASE ch DO
 63             case ‘A‘:// ‘A’:左前进一步,break
 64                 snakeMove(0, -1);
 65                 break;
 66             case ‘D‘ :// ‘D’:右前进一步,break
 67                 snakeMove(0, 1);
 68                 break;
 69             case ‘W‘:// ‘W’:上前进一步,break
 70                 snakeMove(-1, 0);
 71                 break;
 72             case ‘S‘:// ‘S’:下前进一步,break
 73                 snakeMove(1, 0);
 74                 break;
 75             default:// END CASE
 76                 printf("Please input the right angle!\n");//避免玩家输入错误,如:X
 77         }
 78     }//END WHILE
 79     gameover();//输出 Game Over!!!
 80 }
 81
 82 int pd() {//whether snake head on wall & body
 83     int i;
 84     if (snakeX[snakeLength - 1] > 0 && snakeX[snakeLength - 1] < 11
 85     && snakeY[snakeLength - 1] > 0 && snakeY[snakeLength - 1] < 11) {
 86         for (i = 0; i < snakeLength - 1; i++) {
 87             if ((snakeX[snakeLength - 1] == snakeX[i]) && (snakeY[snakeLength - 1] == snakeY[i])) {
 88                 return 0;//snake head on body
 89             }
 90         }
 91         return 1;//snake head on blank
 92     } else return 0;//snake head on wall
 93 }
 94 void snakeMove(int i, int j) {
 95     int dx = i, dy = j, k;
 96     map[snakeX[0]][snakeY[0]] = BLANK_CELL;//蛇前进了
 97     for (k = 0; k <= snakeLength - 2; k++) {
 98         snakeX[k] = snakeX[k + 1];
 99         snakeY[k] = snakeY[k + 1];
100         map[snakeX[k]][snakeY[k]] = SNAKE_BODY;
101     }//蛇前进的坐标变化
102     snakeX[snakeLength - 1] += dx;
103     snakeY[snakeLength - 1] += dy;//蛇头的坐标变化
104     map[snakeX[snakeLength - 1]][snakeY[snakeLength - 1]] = SNAKE_HEAD;
105 }
106 void output(void) {//输出矩阵
107     int i, j;
108     for (i = 0; i <= 11; i++) {
109         for (j = 0; j <= 11; j++) {
110             printf("%c", map[i][j]);
111         }
112         printf("\n");
113     }
114 }
115 void gameover(void) {//游戏输了的结束语 S
116     printf("Game Over!!!\n");
117 }

贪吃蛇task1 readme txt
实验环境:Dev C++
程序运行方式:
在游戏最开始会输出初始矩阵
①通过WASD键盘键操控贪吃蛇进行上左下右移动;
②每一次输入W/A/S/D后需要回车,确保输入完毕;
③速度太快输入错误不要紧,例如输入了“AA”,程序不会进行错误执行,会给你温馨的报错提示
“Please input the right angle!”同时再回输出原先(输入错误之前的即没有改变)的矩阵,方便进行下一步行走;
④同时输入成其他字符不要紧,同样也会报错;
⑤输入之后,程序会判断输入字符从而进行坐标变化以及map矩阵变化,之后输出矩阵,等待你输入下一个方向;
⑥如果你的操作使得蛇撞墙或者撞到了自己,那么系统会提示GAME OVER同时游戏结束。

将原先的程序头(pdf上面的)修改了的部分:
①map二位数组的第二个维度开小了,因为还会有‘\0‘的存在,所以应该是13;
②snakeX和snakeY数组反了,已经改正。

  1 //
  2 //main.c
  3 //snake
  4 //
  5 //Created by Yubei Xiao on 12-12-16
  6 //Copyright (c) 2015年 Sun Yat-sen University.All rights reserved.
  7 //
  8
  9 #include<stdio.h>
 10 #include<stdlib.h>
 11 #include<time.h>
 12
 13 #define SNAKE_MAX_LENGTH 150//稍微了修改,因为这个长度要加到100才能够让蛇可以不断的吃食物长长,直到占满为止
 14 #define SNAKE_HEAD ‘H‘
 15 #define SNAKE_BODY ‘X‘
 16 #define BLANK_CELL ‘ ‘
 17 #define WALL_CELL ‘*‘
 18
 19 //snake stepping: dy = -1(up),1(down); dx = -1(left),1(right),0(no move)
 20 void snakeMove(int, int);
 21 //put a food randomized on a blank cell
 22 void put_money(void);
 23 //our cells of the grid
 24 void output(void);
 25 //outs when gameover
 26 void gameover(void);
 27 //蛇是否碰到墙或者自身
 28 int pd();
 29 //eat the food
 30 void eat_money(int i, int j);
 31 //are player win
 32 int Are_you_win(void);
 33
 34 char map[12][13] =//这里稍作了修改,因为12*12的字符矩阵每一行还要有‘\0‘必须要13长度才行
 35      {"************",
 36      "*XXXXH     *",
 37      "*          *",
 38      "*          *",
 39      "*          *",
 40      "*          *",
 41      "*          *",
 42      "*          *",
 43      "*          *",
 44      "*          *",
 45      "*          *",
 46      "************"};
 47
 48 // define vars for snake, notice name of vars in C
 49 int snakeY[SNAKE_MAX_LENGTH] = {1, 2, 3, 4, 5};//蛇身和蛇头的坐标
 50 int snakeX[SNAKE_MAX_LENGTH] = {1, 1, 1, 1, 1};//这里稍作了修改,因为原本的X和Y反了
 51 int snakeLength = 5;
 52
 53 int main() {
 54     output();//输出初始字符矩阵
 55     int counter = 0;
 56     while (pd()){//WHILE not 游戏结束 DO
 57         counter++;//计数器,使得放食物不要太频繁,运行5次放一次食物
 58         if ((counter % 5) == 1) put_money();//放置食物
 59         system("cls");//每一次清屏只剩下当前局面的矩阵
 60         output();//输出字符矩阵
 61         if (Are_you_win()) return 0;//如果赢了则退出
 62         char ch;
 63         scanf("%c", &ch);// ch=等待输入
 64         char t = getchar();//将输入的回车符清掉
 65         if (t != ‘\n‘) {
 66             printf("Please input the right angle!\n");
 67             while (t != ‘\n‘) {
 68                 t = getchar();
 69             }
 70             continue;
 71         }//因为游戏中可能玩家输入错误,如:AA,避免这种错误的出现导致程序混乱
 72         switch (ch) {// CASE ch DO
 73             case ‘A‘:// ‘A’:左前进一步,break
 74                 snakeMove(0, -1);
 75                 break;
 76             case ‘D‘ :// ‘D’:右前进一步,break
 77                 snakeMove(0, 1);
 78                 break;
 79             case ‘W‘:// ‘W’:上前进一步,break
 80                 snakeMove(-1, 0);
 81                 break;
 82             case ‘S‘:// ‘S’:下前进一步,break
 83                 snakeMove(1, 0);
 84                 break;
 85             default:// END CASE
 86                 printf("Please input the right angle!\n");//避免玩家输入错误,如:X
 87         }
 88     }//END WHILE
 89     gameover();//输出 Game Over!!!
 90 }
 91
 92 int Are_you_win(void) {//判断玩家是否赢
 93     int i, j;
 94     for (i = 1; i <= 10; i++) {
 95         for (j = 1; j <= 10; j++) {
 96             if (map[i][j] != ‘X‘||map[i][j] != ‘H‘) {
 97                 return 0;//如果玩家有一个格子未占满则没有赢
 98             }
 99         }
100     }
101     printf("You are winner!!!");//如果玩家的贪吃蛇将所有的格子均占满则赢
102     return 1;
103 }
104 void put_money(void) {
105     srand((unsigned)time(NULL));//随机函数的种子
106     int i = 0;
107     int j = 0;
108     int tot = 0;//用来计数,因为如果格子满了,那么就没有格子可以放食物了,那么下面循环会陷入死循环,避免这种情况发生
109     while (map[i][j] != ‘ ‘&&tot <= 100) {//随机生成食物的坐标
110         i = rand()%11 + 1;
111         j = rand()%11 + 1;
112         tot++;
113     }
114     if (map[i][j] == ‘ ‘) map[i][j] = ‘$‘;//用‘$‘来表示食物
115 }
116 int pd() {//whether snake head on wall & body
117     int i;
118     if (snakeX[snakeLength - 1] > 0 && snakeX[snakeLength - 1] < 11
119     && snakeY[snakeLength - 1] > 0 && snakeY[snakeLength - 1] < 11) {
120         for (i = 0; i < snakeLength - 1; i++) {
121             if ((snakeX[snakeLength - 1] == snakeX[i]) && (snakeY[snakeLength - 1] == snakeY[i])) {
122                 return 0;//snake head on body
123             }
124         }
125         return 1;//snake head on blank
126     } else return 0;//snake head on wall
127 }
128 void eat_money(int i, int j) {//蛇吃食物模块
129     int dx = i, dy = j, k;
130     map[snakeX[0]][snakeY[0]] = SNAKE_BODY;//蛇的最后一个坐标还是不变因为长长了
131     snakeLength++;//长度加一
132     map[snakeX[snakeLength - 2]][snakeY[snakeLength - 2]] = SNAKE_BODY;//原本是头的现在变成了身体
133     snakeX[snakeLength - 1] = snakeX[snakeLength - 2] + dx;
134     snakeY[snakeLength - 1] = snakeY[snakeLength - 2] + dy;//计算头坐标
135     map[snakeX[snakeLength - 1]][snakeY[snakeLength - 1]] = SNAKE_HEAD;//头坐标的map置为头
136 }
137 void snakeMove(int i, int j) {
138     if (map[snakeX[snakeLength - 1] + i][snakeY[snakeLength - 1] + j] == ‘$‘) {//碰到了食物
139         eat_money(i, j);
140         return;
141     }
142     int dx = i, dy = j, k;
143     map[snakeX[0]][snakeY[0]] = BLANK_CELL;//蛇前进了
144     for (k = 0; k <= snakeLength - 2; k++) {
145         snakeX[k] = snakeX[k + 1];
146         snakeY[k] = snakeY[k + 1];
147         map[snakeX[k]][snakeY[k]] = SNAKE_BODY;
148     }//蛇前进的坐标变化
149     snakeX[snakeLength - 1] += dx;
150     snakeY[snakeLength - 1] += dy;//蛇头的坐标变化
151     map[snakeX[snakeLength - 1]][snakeY[snakeLength - 1]] = SNAKE_HEAD;
152 }
153 void output(void) {//输出矩阵
154     int i, j;
155     for (i = 0; i <= 11; i++) {
156         for (j = 0; j <= 11; j++) {
157             printf("%c", map[i][j]);
158         }
159         printf("\n");
160     }
161 }
162 void gameover(void) {//游戏输了的结束语
163     printf("Game Over!!!\n");
164 }

贪吃蛇task2 readme txt
实验环境:Dev C++
程序运行方式:
(由于屏幕会出现很多幕矩阵,所以我使用了system("cls")进行每一次输出矩阵之前清一次屏,方便查看,
这个可以不要)
在游戏最开始会输出初始矩阵
①通过WASD键盘键操控贪吃蛇进行上左下右移动;
②每一次输入W/A/S/D后需要回车,确保输入完毕;
③速度太快输入错误不要紧,例如输入了“AA”,程序不会进行错误执行,会给你温馨的报错提示
“Please input the right angle!”同时再回输出原先(输入错误之前的即没有改变)的矩阵,方便进行下一步行走;
④同时输入成其他字符不要紧,同样也会报错;
⑤输入之后,程序会判断输入字符从而进行坐标变化以及map矩阵变化,之后输出矩阵,等待你输入下一个方向;
⑥如果你的操作使得蛇撞墙或者撞到了自己,那么系统会提示GAME OVER同时游戏结束。
⑦加入了随机生成食物,第一次会出现一次食物,然后每隔5次操作出现一次,避免出现频率国语频繁;
⑧每当吃到食物蛇会长长一截,从尾巴后面;
⑨只要当玩家将所有的矩阵格占满才能够赢(很难赢~)赢了程序会输出“You are winner!!!”

将原先的程序头(pdf上面的)修改了的部分:
①map二位数组的第二个维度开小了,因为还会有‘\0‘的存在,所以应该是13;
②snakeX和snakeY数组反了,已经改正。
③因为蛇可以吃食物,最大长度增加到100,所以发现在开始的
#define SNAKE_MAX_LENGTH 150//稍微了修改,因为这个长度要加到100才能够让蛇可以不断的吃食物长长,直到占满为止

版权声明:欢迎转载本人博客的内容,只需注明作者和主博客文章地址的链接,另有约定者除外。

//
//
//Created by Yubei Xiao on 12-12-16
//Copyright (c) 2015年 Sun Yat-sen University.All rights reserved.
//

时间: 2024-10-25 21:46:51

贪吃蛇1.0&&贪吃蛇2.0的相关文章

Angular 1.0演变Angular 2.0的简单优势列举

首先,Angular最核心的4大特性分别是: 1.模块化 2.MVC 3.双向数据绑定 4.指令 Angular 1.0演变Angular 2.0的简单优势列举: 1.性能限制上的优化 说明:随着时间的推移,各种特性被加入进去以适应不同场景下的应用开发,在最初的架构受到了限制,而Angular 2.0很好的解决了这些问题. 2.仿照WEB后端的结构模式来编写前端 说明:支持模块.类.lambda表达式. generator等新的特性 3.支持移动端开发 说明:Angular1.x没有针对移动 应

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.------------SDK2.0功能-------------2 2.1. 泛型:2 3. --------------sdk3.0  增加了以下功能..2 3.1. LINQ 3 4.  ----------sdk4

React v15.5.0更新说明 &amp; v16.0.0更新预告

React今日发布了15.5.0版本,同时这也将是以15开头的最后一个版本,下一次发布,我们将迎来React 16.0.0 在15.5.0这一版本中,主要有以下两处改动: 独立React.PropTypes 在之前的版本之中,我们可以通过React.PropTypes这个API访问React内置的一些类型来检查props,在15.5.0版本中,这一API被独立成了一个新的包 prop-types // 15.4 以前 import React from 'react'; class Compon

System.Web.Mvc 3.0.0.1 和 3.0.0.0 有什么区别?被 Microsoft ASP.NET MVC 的一次安全更新害惨了!!!

今天更新站点时,发现网站竟然报错 ... uses 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' which has a higher version than referenced assembly 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 最终发现

csharp:using Newtonsoft.Json.Net2.0 in .net 2.0 webform

? 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

安装HBase 0.94.6-cdh4.3.0

安装HBase 0.94.6-cdh4.3.0 设定HBase的配置文件,由于安装的是cdh版,各版本直接匹配,互相依赖的jar包也都正确,只需要配置下hbase的环境变量和配置文件即可. 1.配置hbase-env.sh,添加JAVA_HOME环境变量 [html] view plaincopy export JAVA_HOME=/usr/java/default/  其他暂时不用添加 export HBASE_MANAGES_ZK=true 2.修改hbase-site.xml,如下配置 [

ASP.NET Thread Usage on IIS 7.5, IIS 7.0, and IIS 6.0

I’d like to briefly explain how ASP.NET uses threads when hosted on IIS 7.5, IIS 7.0 and IIS 6.0, as well as the configuration changes that you can make to alter the defaults. Please take a quick look at the “Threading Explained” section in Chapter 6

Atitit..jdk&#160;java&#160;各版本新特性&#160;1.0&#160;1.1&#160;1.2&#160;1.3&#160;1.4&#160;1.5(5.0)&#160;1.6(6.0)&#160;7.0&#160;8.0&#160;9.0&#160;attilax&#160;大总结

Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 1.2. Java版本:JDK 1.02 1.3. Java版本:JDK 1.13 1.4. Java版本:JDK 1.2 (Java 2)4 1.4.1. 1999年5 1.4.2. 2000年5 1.5. Java版本:JDK 1.35 1.5.1. 2001年6 1.5.2. 2002年7

Atitit.&#160;&#160;c#&#160;语法新特性&#160;c#2.0&#160;3.0&#160;4.0&#160;4.5&#160;5.0&#160;6.0&#160;&#160;&#160;attilax总结

Atitit.  c# 语法新特性 c#2.0 3.0 4.0 4.5 5.0 6.0   attilax总结 1.1. C# 1.0-纯粹的面向对象 1.2. C# 2.0-泛型编程新概念 1.3. C# 2.0的另一个突出的特性就是匿名方法 1.4. C#3.0 linq 1.5. C# 4.0动态编程 dynamic 1.6. C# 4.5 异步编程 async和await 1.7. C# 5.0 更方便的一步编程 1.8. C# 6.0 中的新特性 作者:: 绰号:老哇的爪子 ( 全名: