博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【小游戏】C++手工制作贪吃蛇
阅读量:6004 次
发布时间:2019-06-20

本文共 2889 字,大约阅读时间需要 9 分钟。

 
 
//#include
//键盘敲击#include
//屏幕渲染周期,clock函数#include
//#include
//刷新周期,控制游戏速度#define Period 100//地图宽度#define _width 25//地图高度#define _height 18//点 结构typedef struct point{ int x; int y;};//----------------全局变量----------------//地图数组char g_map[_height][_width];//蛇长度,初始化为两个int g_snakeLen = 2;//蛇:一系列点struct point g_snake[(_width - 1)*(_height - 1)] = { { _height / 2, _width / 2 }, { 1, 1 } };//食物坐标struct point g_food;//----------------函数声明----------------//欢迎界面void Welcome();//置字符void SetChars();//设置食物void ResetFood();//处理蛇移动int JugeSnake(char c);//空格填充void Padding(int =0);//--------------------------------------int main(){ //当前时间,上一次刷新时间,单位为ms(毫秒) long timeNow, timeLast = 0; int i, j,//计数变量 keyLast = 'd', keyNow = 'd'; //显示欢迎界面 Welcome(); //置随机数种子 srand((unsigned)time(NULL)); //初始化食物位置 ResetFood(); do { //***********************渲染开始*********************** //获取当前时间 timeNow = clock(); //判断是否满足刷新条件 if (timeNow - timeLast >= Period) { //记录本次刷新时间 timeLast = clock(); //清屏 system("cls"); //1. 显示图像 //----------------初始化地图界面---------------- for (i = 0; i<_height; i++) { for (j = 0; j<_width; j++) { g_map[i][j] = ' '; if (i == 0 || i == _height - 1 || j == 0 || j == _width - 1) g_map[i][j] = '*'; } } //----------------初始化地图界面---------------- //空格填充 Padding(-10); printf("----------当前长度%d,已游戏时间%ds-----------\n", g_snakeLen, timeNow / 1000); int resJuge = JugeSnake(keyLast); //此处若用switch,则不能跳出最外层的do-while循环 //为了避免用goto语句,所以用if-else处理juge结果 if (resJuge == 0) { printf("游戏结束!"); break; } else if (resJuge == 2) { printf("恭喜你打穿游戏了!"); break; } SetChars(); for (i = 0; i<_height; i++) { //空格填充 Padding(); for (j = 0; j<_width; j++) { printf("%c", g_map[i][j]); } if (i<_height - 1) printf("\n"); } } //2. 处理键盘事件 if (kbhit() == 1) { // keyNow = getch(); if (keyNow == 'd'&&keyLast == 'a') keyLast = 'a'; else if (keyNow == 'a'&&keyLast == 'd') keyLast = 'd'; else if (keyNow == 'w'&&keyLast == 's') keyLast = 's'; else if (keyNow == 's'&&keyLast == 'w') keyLast = 'w'; else { keyLast = keyNow; } } //***********************渲染结束*********************** } while (1); system("pause");}////判断 蛇的移动 并 处理 移动效果//int JugeSnake(char c){ int i; int x, y;//目标位置 struct point last; last = g_snake[g_snakeLen - 1];//记录移动前的尾巴位置 x = g_snake[0].x; y = g_snake[0].y; switch (c) { case 'w':case 'W': x--; break; case 's':case 'S': x++; break; case 'a':case 'A': y--; break; case 'd':case 'D': y++; break; } //在这里说明移动成功了 if (x <= 0 || x >= _height - 1) return 0; if (y <= 0 || y >= _width - 1) return 0; for (i = g_snakeLen - 1; i>0; i--)//除头以外都移动 g_snake[i] = g_snake[i - 1]; //动完之后判断目标位置和移动后的躯体是否重合 for (i = 1; i

转载于:https://www.cnblogs.com/tinyjian/p/6550722.html

你可能感兴趣的文章
遍历form表单里面的表单元素,取其value
查看>>
PHP TP框架基础
查看>>
directive ngChecked
查看>>
面试110道题
查看>>
python 08 文件操作
查看>>
强势解决:windows 不能在本地计算机中起动Tomcat参考特定错误代码1
查看>>
Gradle 配置debug和release工程目录
查看>>
curl指令的使用
查看>>
LNAMP第二版(nginx 1.2.0+apache 2.4.2+php 5.4)
查看>>
MongoDB repl set权限认证配置步骤
查看>>
java学习笔记(1)
查看>>
禁止Mysql默认端口访问Internet - MySQL - IT技术网
查看>>
基于用户投票的排名算法(二):Reddit
查看>>
下午最后的草坪
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
用PHP读取和编写XML DOM4
查看>>
1.部分(苹果)移动端的cookie不支持中文字符,2.从json字符串变为json对象时,只支持对象数组...
查看>>
vim配置及快捷键
查看>>
2018省赛赛第一次训练题解和ac代码
查看>>
[转载] win10进行端口转发
查看>>