贪吃蛇游戏的设计,需要考虑三个步骤
1.数据设计
2.模块化设计
3.实现过程
其中数据设计和模块化设计是最重要的两个步骤
- 数据设计
数据设计要考虑到贪吃蛇的基本元素,包括地图,蛇,食物,以及按键操作。
#include<stdio.h>
#include<stdlib.h>
#include<windows.h> //光标设置的API
#include<time.h> //食物随机
#include<conio.h> //按键监控
//*********1、数据设计**************//
//辅助宏定义
#define MAPHEIGHT 25 //地图的高
#define MAPLENGHT 60 //地图的宽
#define SNAKESIZE 50 //蛇的最大节数
//食物
struct {
int x, y;
}food;
//蛇
struct {
//蛇每一节的位置
int x[SNAKESIZE], y[SNAKESIZE];
//蛇的长度
int len;
//蛇的速度
int speed;
}snake;
//DWORD t1, t2; //控制蛇的速度
//全局变量
char key = 'a'; //初始化蛇的移动方向
int changflag = 0; //蛇的变化标记
char lastkey = 'A'; //记录上一个按键
- 模块化设计
游戏逻辑如下图所示,可以抽象为五个函数,同时我们需要一个控制光标移动的函数来实现输出。
void drawMap();
void createFood();
void keyDown();
void move(char key);
int snakeStatus();
void gotoxy(int x, int y);
主函数
int main()
{
drawMap(); //初始化地图
while (1)
{
createFood();//产生食物
Sleep(snake.speed);
keyDown();//按键处理
if (snakeStatus()== 0)break;//判断蛇的状态
}
gotoxy(MAPLENGHT / 2, MAPHEIGHT / 2);
printf("GameOver\t");
system("pause");
return 0;
}
辅助函数:光标移动
游戏是在控制台进行,所以我们需要一个函数来控制光标的移动,通过移动光标来输出内容
void gotoxy(int x, int y)
{
//调用win32 API 去设置控制台的光标位置
//1.找到控制台的这个窗口
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
//2.光标的结构体
COORD coord;
//
//3.设置坐标
coord.X = x;
coord.Y