C语言设计之贪吃蛇

 

C语言设计之贪吃蛇_第1张图片

没错这就是我们今天的内容

前言

智慧与美貌并重,英雄与侠义的化身的小编上线了,没错我就是传说中的讲课通俗而不庸俗,说话风流而不下流的小编。百年修得阁下回眸于本文。今天的主题是带着大家吃顿蛇肉,没错C语言设计之贪吃蛇。

C语言设计之贪吃蛇_第2张图片

实话小编看到有点小恶心,请跳过

程序设计流程

C语言设计之贪吃蛇_第3张图片

整个项目只需要三步呦

  • 数据设计

C语言设计之贪吃蛇_第4张图片

代码不多呦

  1. 辅助宏定义:游戏地图的宽和高,以及蛇的最大长度
  2. 食物结构体:食物在地图上x和y上的显示
  3. 蛇结构体:蛇的长度,蛇的每一节的坐标存储,蛇的移动速度
  4. 辅助全局变量:蛇是否变化,蛇的初始移动方向

  • 模块化设计

C语言设计之贪吃蛇_第5张图片

 

  1. 地图设计:void drawMap(); //绘制游戏地图
  2. 按键处理:void keyDown(); //按键处理
  3. 食物设计:void createFood(); //产生食物
  4. 辅助函数:void gotoxy(int x, int y);//cmd移动辅助函数
  5. 终止游戏:int snakeStaus(); //蛇状态

  • 具体实现

1.辅助函数:void gotoxy(int x, int y);//cmd移动辅助函数

C语言设计之贪吃蛇_第6张图片

这个函数以前淘汰了,需要自己实现呢

2.地图设计:void drawMap(); //绘制游戏地图

C语言设计之贪吃蛇_第7张图片

自己放大看把

3.按键处理:void keyDown(); //按键处理

C语言设计之贪吃蛇_第8张图片

 

4.食物设计:void createFood(); //产生食物

C语言设计之贪吃蛇_第9张图片

注释自己看哈

5.终止游戏:int snakeStaus(); //蛇状态

C语言设计之贪吃蛇_第10张图片

 

6.主函数

C语言设计之贪吃蛇_第11张图片

 

#include 
#include 
#include 
#include 
#include 
//⊙  ■
///////////////////////////////////////
//		地图的长和宽
#define MAPHEIGHT 25
#define MAPWIDTH 60
#define SNAKESIZE 50
///////////////////////////////////////
//		数据设计
int changeFlag = 0;	//蛇变化标记
int  key = 'w';
struct food
{
	//食物的位置
	int x;
	int y;
}food;

struct snake
{
	int x[SNAKESIZE]; 	//蛇坐标
	int y[SNAKESIZE];
	int len;			//当前长度
	int speed;			//移动速度
}mysnake;		//mysnake[0] 蛇头
/////////////////////////////////////////
//		模块化设计
void drawMap();			//绘制游戏地图
void createFood();		//产生食物
void keyDown();			//按键处理
int  snakeStaus();		//蛇状态
void gotoxy(int x, int y);	//cmd移动辅助函数

int main()
{
	drawMap();
	while (1)
	{
		createFood();
		Sleep(mysnake.speed);
		keyDown();
		if (!snakeStaus())
		{
			break;
		}
	}
	printf("\nGameOver");
	system("pause");
	return 0;
}

//////////////////////////////////////
//			cmd移动辅助函数
void gotoxy(int x, int y)
{
	//获取cmd窗口句柄
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	//光标坐标
	COORD coord;
	//设置窗口坐标
	coord.X = x;
	coord.Y = y;
	SetConsoleCursorPosition(handle, coord);	
}
////////////////////////////////////////
//	  绘制游戏地图
void drawMap()
{
	srand((unsigned int)time(NULL));
	//食物
	//1.食物属性
	food.x = rand() % (MAPWIDTH - 4/*食物图标占用2个字符*/) + 2;
	food.y = rand() % (MAPHEIGHT - 2) + 1;
	//2.画食物
	gotoxy(food.x, food.y);
	printf("⊙");
	//蛇
	//1.蛇属性
	mysnake.x[0] = MAPWIDTH / 2;	//定位在中间
	mysnake.y[0] = MAPHEIGHT / 2;	
	//2.画蛇
	gotoxy(mysnake.x[0], mysnake.y[0]);
	printf("■");
	mysnake.len = 3;
	mysnake.speed = 100;
	for (int k = 1; k 0; i--)
	{
		mysnake.x[i] = mysnake.x[i - 1];
		mysnake.y[i] = mysnake.y[i - 1];
	}
	//有按键处理
	switch (key)
	{
	case 'w':
	case 'W':
	case 72:
		mysnake.y[0]--;
		break;
	case 's':
	case 'S':
	case 80:
		mysnake.y[0]++;
		break;
	case 'a':
	case 'A':
	case 75:
		mysnake.x[0]-=2;
		break;
	case 'd':
	case 'D':
	case 77:
		mysnake.x[0] += 2;
		break;
	}
	gotoxy(mysnake.x[0], mysnake.y[0]);
	printf("■");
	changeFlag = 0;
	gotoxy(MAPHEIGHT+2, 0);
}
int  snakeStaus()		//蛇状态
{
	if (mysnake.x[0] == 0 || mysnake.x[0] == MAPHEIGHT - 2 || mysnake.y[0] == MAPWIDTH - 2 || mysnake.y[0] == 0)
		return 0;
	for (int k = 1; k

C语言设计之贪吃蛇_第12张图片

期待下一次与你相遇

你可能感兴趣的:(调侃中碎片学习,在调侃中学习C语言)