- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
*
*
C 语言实现贪吃蛇
*****************************************************************
************************************************************
贪吃蛇实现原理:
贪吃蛇游戏在理论上是可以无限的进行下去的(除了撞墙和 咬到自己),那么游戏主体就一定是个循环。
蛇是如何动起来的?在这里就是通过不断改变蛇的坐标,然 后根据蛇的坐标不断刷新屏幕在视觉上形成蛇的移动效果。
食物出现在随机位置(当然不能出现在障碍物和蛇身上)
蛇能吃到食物其实就是蛇头的坐标与食物的坐标重合时。
当蛇咬到自己或者撞到墙的时候游戏结束(坐标判断)
******************************************************************
************************************************************/#incl ude lt;stdio.hgt;
#include lt;conio.hgt;
#include lt;stdlib.hgt;
#include lt;windows.hgt;
#include lt;time.hgt;//72,80,75,77 是方向键对应的键值
#define UP 72
#define DOWN 80
#define LEFT 75
#define RIGHT 77
#define SNAKE 1
#define SNAKE 1
//蛇的坐标标识
#define FOOD 2
#define FOOD 2
//食物的坐标标识
#define BAR 3
#define BAR 3
// 墙的坐标标识 //初始化地图 17*17
char map[17][17] = {0};
//初始化蛇头坐标 unsigned char snake[50] = {77};
//初始化食物坐标 unsigned char food = 68;
//蛇长 char len = 1;// 存储坐标数字与 x、 y 的转换函数
void tran(unsigned char num,unsigned char * x,unsigned char * y);
//打印游戏 void print_game(void);
//获取方向函数(注意当蛇身长度超过一节时不能回头) int get_dir(int old_dir);
//移动蛇身函数 (游戏大部分内容在其中 void move_snake(int dir);
//生产食物的函数 unsigned char generate_food(void);
//判断蛇死活的函数 (判断了蛇是否撞到边界或者自食 ) int isalive(void);int main(void){
int dir = UP; //初始方向默认向上, UP 是我们定义的
//按道理该游戏是可以无限继续下去的,因此是个循环
while(1){
print_game();//打印游戏dir = get_dir(dir);//获取方向 (
print_game();
//打印游戏
dir = get_dir(dir);
//获取方向 (我们摁下的方
向)
move_snake(dir);
//移动蛇身
if(!isalive()){
//判断蛇的生命状态
break;printf(Game Over!\n);
break;
printf(Game Over!\n);
return
return 0;
// void tran(unsigned char num,unsigned char * x,unsigned char * y){
//注*x = num gt;gt;
//注
*y = (unsigned char)(num lt;lt; 4) gt;gt; 4;
意这里要做个强制类型转换
//根据汇
编,如果不做强制转换,y
编,如果不做强制转换,
y 的值与 num 的值相同
}void print_game(void){
int i,j;
}
}
}
}
//根据地图上每点的情况绘制游戏( i 表示 x 轴, j 表
示 y 轴),按行打印, j 表示行, i 表示列
for(j = 0;j lt; 17;j ++){
for(i = 0;i lt; 17;i ++){
//空白地方 if(map[i][j] == 0){
putchar( );
//蛇身 else if(map[i][j] == SNAKE){
putchar(*);
}
}
}
}
//围栏
else if
原创力文档


文档评论(0)