用C代码写贪吃蛇游戏--打印食物
来源:互联网 发布:海贼王漫画 知乎 编辑:程序博客网 时间:2024/05/29 13:48
贪吃蛇游戏创建食物:
1、食物的产生要求是随机的
2、蛇吃掉食物后会长大
3、蛇吃掉食物后会再次产生食物
因为食物的产生是随机的,要求用C产生随机数:
产生1-6的10个随机数int main(void){ int i = 0; for(i=0;i<10;i++) { printf("%d ",rand()%6+1); } printf("\n"); return 0;}
然后我把创建食物封装成一个函数:
void creatFood(){ int x = rand() % WIDTH;//在长、宽范围内产生随机数x,y int y = rand() % HIGTH; COORD pos; pos.X = x;//把x.y赋值给坐标 pos.Y = y; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout,pos); printf("o");//在随机坐标上打印食物o}
吃掉食物后,蛇身加一,并且再次产生一个食物
if(snakeBodyPosition[0].X == foodPos.X &&snakeBodyPosition[0].Y == foodPos.Y) //当食物坐标与蛇头坐标相同时,蛇变长,再次产生一个食物 { creatFood(); snakeLen++; }
优化清屏代码
清屏的目的是为了让前一段蛇身消失,如果每次都清屏,食物也会消失,这个BUG需要解决,通过改变产生蛇的代码来实现:
void showSnake(int showOrDisapear){ int i = 0; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); for(i = 0;i < snakeLen;i++) { SetConsoleCursorPosition(hout,snakeBodyPosition[i]); if( showOrDisapear == SHOW) { printf("*"); } if(showOrDisapear == DISAPEAR)//打印空格来覆盖蛇身 { printf(" "); } }}
到这里基本功能就已经全部实现了,下面是代码:
#include "stdafx.h"#include <windows.h>#include <stdio.h>#include <stdlib.h>#include<conio.h>#define SNAKELEN 10#define SNAKEMAX 10#define INITSNAKELEN 3#define RIGHT 1#define LEFT 2#define DOWN 3#define UP 4#define WIDTH 40#define HIGTH 20#define SHOW 8#define DISAPEAR 9COORD snakeBodyPosition[SNAKELEN];void showSnake(int showOrDisapear);void creatFood();int snakeLen = 3;COORD foodPos;/*-------------初始化蛇,创建一条蛇----------------------*/void initSnake(COORD snakeHeadPosition ){ int i = 0; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台 COORD tmp = snakeHeadPosition; for(i = 0;i < INITSNAKELEN;i++)//打印蛇身 { snakeBodyPosition[i] = tmp; SetConsoleCursorPosition(hout,tmp); printf("*"); tmp.X--; } snakeLen = INITSNAKELEN;}/*------------------蛇移动----------------------------------*/void move(int direction){ Sleep(100); //system("cls"); showSnake(DISAPEAR); int i = 0; for(i = 0;i < snakeLen - 1;i++) { snakeBodyPosition[snakeLen -1-i] = snakeBodyPosition[snakeLen - 2-i]; } switch(direction) { case RIGHT: { snakeBodyPosition[0].X++; break; } case LEFT: { snakeBodyPosition[0].X--; break; } case DOWN: { snakeBodyPosition[0].Y++; break; } case UP: { snakeBodyPosition[0].Y--; break; } default: { break; } } if(snakeBodyPosition[0].X == foodPos.X &&snakeBodyPosition[0].Y == foodPos.Y) //当食物坐标与蛇头坐标相同时,蛇变长,再次产生一个食物 { creatFood(); snakeLen++; } showSnake(SHOW);}/*------------------打印或者取消蛇身----------------------------*/void showSnake(int showOrDisapear){ int i = 0; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); for(i = 0;i < snakeLen;i++) { SetConsoleCursorPosition(hout,snakeBodyPosition[i]); if( showOrDisapear == SHOW) { printf("*"); } if(showOrDisapear == DISAPEAR) { printf(" "); } }}/*实现逻辑:1、加入按键控制2、判断是否有按键3、按照按键来进行移动4、没有按键,按照固定方向移动 *//*-------------按键控制蛇移动--------------*/void keyboard()//按键控制{ char ch = 'd'; int direction = RIGHT;//前面宏定义RIGHT,UP等是int类型 while(1) { move(direction);//调用move函数 switch(ch) { case 'w': { direction = UP;//比如前面定义UP是4,这里把4赋值给direction break; } case 'a': { direction = LEFT; break; } case 's': { direction = DOWN; break; } case 'd': { direction = RIGHT; break; } default: { move(direction);//优化之后解决蛇按下其他键或者不按键也能保持原来的移动方向 break; } } if(kbhit())//如果有按键 { ch = getch();//把getch获取到的按键赋值给ch } } }/*------------产生食物-----------------------*/void creatFood(){ int x = rand() % WIDTH;//在长、宽范围内产生随机数x,y int y = rand() % HIGTH; foodPos.X = x;//把x.y赋值给坐标 foodPos.Y = y; HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hout,foodPos); printf("o");//在随机坐标上打印食物o}/*--------主函数------------------------*/int main(int argc, char* argv[]){ int i = 0; COORD pos = {0,0}; initSnake(pos); creatFood(); keyboard(); printf("\n"); return 0;}
实现效果:
后面还可以陆续给它加规则,比如弄一个边框,改变蛇身颜色,或者设置障碍物,穿墙等等
阅读全文
0 0
- 用C代码写贪吃蛇游戏--打印食物
- 用C代码写贪吃蛇游戏--用按键控制蛇移动
- 用C代码写贪吃蛇游戏--创建一条蛇并移动
- 在linux下用c语言写贪吃蛇游戏
- 用C语言写贪吃蛇游戏的初探
- 用java写的贪吃蛇游戏
- 用java写的贪吃蛇游戏
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- 贪吃蛇游戏代码
- MFC实现贪吃蛇游戏之食物的产生
- 大一时用c语言写的贪吃蛇游戏,嘿嘿
- 用c语言写的贪吃蛇
- 犀哥教你用C写贪吃蛇
- hdu 3635(并查集的应用)
- openresty招聘
- Java的反射机制
- 融云发布公告:五大高级功能将全面开放
- windows配置thrift开发环境
- 用C代码写贪吃蛇游戏--打印食物
- 数据库新增同时获得自增字段数据
- ueditor单独调用图片上传
- 图结构练习——判断给定图是否存在合法拓扑序列(topo)
- ie兼容问题
- LintCode python 小白-简单题-457经典二分查找问题
- 第二批37个城市设计试点名单公布
- QNX system architecture 1
- webpack 基础总结