C语言实践之贪吃蛇游戏思路及代码
来源:互联网 发布:linux花屏 卡死 编辑:程序博客网 时间:2024/05/16 15:33
直入正题
思路
1.绘制地图,利用一个二维数组将地图绘制出来
2.创建蛇 利用一个结构体来构造蛇的结点,然后用数组表示一整只蛇
3.蛇的移动,利用kbhit()函数检测按键响应 并改变蛇的方向
4.蛇的添加结点,
代码如下
#include <stdlib.h>#include <stdio.h>#include <string.h>#include <conio.h>#include <time.h>const int H = 8;//地图的高const int L = 16;//地图的宽char GameMap[H][L];//地图char key = ' ';//按键int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};//上下左右int GameState = 0;//游戏状态void Check_Broder();void Check_Head(int x,int y);void CreateFood();void input();int sum =1;//蛇的长度struct snake{// 蛇int x,y;//蛇每个节点位置int now;//方向}snake[H*L];char sbody = '@',food = '*';//定义蛇的符号 食物的符号void MapCreate(){system("title 贪吃蛇");//标题改成贪吃蛇memset (GameMap,'.',sizeof(GameMap));//将GameMap中字符全部替换成'.'system("cls");//清屏srand(time(0));//置随机数种子snake[0].x = rand()%H;//产生蛇头snake[0].y = rand()%L;GameMap[snake[0].x][snake[0].y]=sbody;//画出蛇头CreateFood();for(int i =0;i<H;i++){//绘制地图 for(int j = 0;j<L;j++){ printf("%c",GameMap[i][j]); } printf("\n");}//getch();input();}void CreateFood(){int i=0,j=0;//定义食物坐标变量while(1){i = rand()%H;//随机食物x坐标j = rand()%L;//随机食物y坐标if(GameMap[i][j]!=sbody){//检查是否在蛇的位置GameMap[i][j] = food;break;}}}void input(){ if(kbhit()!=0){//判断键盘是否输入 while(kbhit()!=0){//可能有多个按键一次取完 以最后一个为基准key = getch();} } switch(key){ case 'w'://上 snake[0].now=0; break; case 's'://下 snake[0].now=1; break; case 'a'://左 snake[0].now=2; break; case 'd'://右 snake[0].now=3; break; }}void Move(){int i ,x,y;int t =sum;//保存当前蛇长度;x = snake[0].x; y = snake[0].y; GameMap[x][y]='.';snake[0].x = x + dx[snake[0].now];snake[0].y = y + dy[snake[0].now];Check_Broder();//蛇头是否越界Check_Head(x,y);//蛇头移动情况if(sum == t){ //未吃到食物即蛇身移动哦 for(i = 1; i < sum; i++) //要从蛇尾节点向前移动哦,前一个节点作为参照 { if(i == 1) //尾节点设置为空再移动 GameMap[ snake[i].x ][ snake[i].y ] = '.'; if(i == sum-1) //为蛇头后面的蛇身节点,特殊处理 { snake[i].x = x; snake[i].y = y; snake[i].now = snake[0].now; } else //其他蛇身即走到前一个蛇身位置 { snake[i].x = snake[i+1].x; snake[i].y = snake[i+1].y; snake[i].now = snake[i+1].now; } GameMap[ snake[i].x ][ snake[i].y ] = '#'; //移动后要置为'#'蛇身 } }}void Check_Broder(){//检查蛇头是否越界if(snake[0].x<0||snake[0].x>=H||snake[0].y<0||snake[0].y>=L){printf("Check_Broder");GameState = 1; }}void Check_Head(int x,int y){//检查蛇头的移动情况if(GameMap[snake[0].x][snake[0].y]=='.'){//假如是空GameMap[snake[0].x][snake[0].y]=sbody;}else if(GameMap[snake[0].x][snake[0].y]=='*'){//假如是食物GameMap[snake[0].x][snake[0].y]=sbody;snake[sum].x=x;snake[sum].y=y;snake[sum].now = snake[0].now;GameMap[snake[sum].x][snake[sum].y]=sbody;sum++;CreateFood();//吃完生成 食物}else{//假如是自己的身体printf("Check_Head");GameState = 1;}}void Show(){int i,j;while(1){_sleep(500);//每半秒刷新一次地图input();Move();if(GameState == 1){printf("游戏失败!");system("pause");break;}system("cls");for(i = 0; i < H; i++) { for(j = 0; j < L; j++) {printf("%c", GameMap[i][j]); } printf("\n"); } }}int main(){MapCreate();Show();return 0;}
代码略显繁琐,笔者初学,请见谅!
阅读全文
0 0
- C语言实践之贪吃蛇游戏思路及代码
- C语言实践之推箱子游戏思路与代码
- C语言之贪吃蛇游戏源码
- C语言之贪吃蛇游戏
- 贪吃蛇编写思路及C语言源码
- C语言贪吃蛇游戏
- C语言:贪吃蛇游戏
- C语言游戏:贪吃蛇
- C语言贪吃蛇代码
- C语言贪吃蛇代码
- C语言贪吃蛇代码
- 贪吃蛇C语言代码
- 贪吃蛇C语言代码
- 纯C语言 贪吃蛇 工程实践
- C 语言 win32 游戏编程 - 贪吃蛇
- 基于c语言的贪吃蛇游戏
- c语言"贪吃蛇"游戏源码
- C语言贪吃蛇游戏2
- android sdk配置
- HBASE 常用语法和phoenix 配置
- solr5.5基础教程
- vs2008 MFC程序 更改 文本框 控件背景
- 关于JS中oop的一点基础知识复习
- C语言实践之贪吃蛇游戏思路及代码
- 基于CentOS 6.4 搭建 WordPress 个人博客
- 策略模式
- duilib标题栏有文字不能拖动处理方法
- 按钮点击监听
- Mac上IntelliJ Idea运行Java程序时出现红色的警告解决办法-亲测有效
- 关于JSP的C标签之forEach循环分隔符实现
- Service的各种知识点
- Android M 新的运行时权限开发者需要知道的一切