600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 贪吃蛇程序 贪吃蛇程序代码c语言简单版

贪吃蛇程序 贪吃蛇程序代码c语言简单版

时间:2022-06-27 16:54:17

相关推荐

贪吃蛇程序 贪吃蛇程序代码c语言简单版

(一)背景介绍

1、贪吃蛇,又称贪食蛇、章鱼君,是一款由学生借鉴贪吃蛇的原理而制作的一款游戏,从 1976 年推出以来,受到了众多玩家的喜爱。2、贪吃蛇的游戏带来的乐趣在于游戏难度较低,而又需要技巧和策略。3、贪吃蛇游戏中由贪吃蛇需要去寻找和吃食物,以此达到其身体不断延长的目的,并且需要尽可能躲避碰到墙壁或者自己的身体,否则游戏就结束了。

(二)程序要求:

1、游戏由一个初始状态界面开始,由玩家选择开始游戏还是退出游戏;

2、游戏界面由一定大小的格子构成,贪吃蛇的位置随机出现,食物的位置也在格子中随机出现;3、当贪吃蛇吃到食物时,身体长度加 1,游戏中会出现多种道具,当贪吃蛇使用道具时,会得到不同效果;

4、当贪吃蛇吃到了毒草时,游戏会结束;5、当贪吃蛇触及到墙壁或者自己的身体时,游戏也会结束。

(三)程序设计:

1、在游戏开始前,需要设置游戏的界面大小以及其中一些初始设置;

2、接下来需要在游戏界面内生成一条贪吃蛇,并且设置一个生成的位置,贪吃蛇的方向要根据用户设定随机生成,并且可以设置贪吃蛇的初始长度;3、接着需要在游戏界面中随机生成食物,食物可以是定时生成,也可以随机生成;

4、游戏界面需要设置墙壁、道具及毒草,墙壁可以固定其位置,而道具和毒草也可以随机生成,也可以在游戏开始前设置;

5、最后需要设立规则,当贪吃蛇触及到墙壁或者自己的身体时,游戏将自动结束;当贪吃蛇碰到道具时,会得到不同的效果;当贪吃蛇吃到毒草时,游戏也将结束。

一、声明头文件

1. 导入需要用到的头文件,并声明常量以及定义函数

#include

#include

#include

#define WALL #//定义墙(#号)

#define SNAKE *//定义贪吃蛇(*号)

#define FOOD O//定义食物(O号)

#define INIT_LEN 5 //定义蛇的初始长度

#define INIT_POS_X 20 //定义蛇起始X坐标

#define INIT_POS_Y 8 //定义蛇起始Y坐标

#define MAX_WIDTH 100 //定义地图的最大宽度

#define MAX_HEIGHT 15 //定义地图的最大高度

int Snake[MAX_HEIGHT][MAX_WIDTH] = { 0 }; //定义Snake数组记录蛇的位置

int X = INIT_POS_X;

int Y = INIT_POS_Y;

int foodX, foodY; //定义食物的当前位置

//新建函数

void HideCursor(); //隐藏光标

//绘制边框

void Border();

//绘制贪吃蛇

void DrawSnake();

//贪吃蛇移动

void MoveSnake();

//随机产生食物

void RandFood();

//判断蛇是否死亡

bool IsDie();

二、定义函数

1、隐藏光标

//函数:隐藏控制台光标

void HideCursor()

{

CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);

}

2、绘制边框

//函数:绘制边框

void Border()

{

for (int j = 0; j< MAX_WIDTH; j++)

{

printf(\"%c\", WALL);

}

printf(\"\

\");

//绘制中间部分

for (int i = 1; i< MAX_HEIGHT - 1; i++)

{

for (int j = 0; j< MAX_WIDTH; j++)

{

if (j == 0 || j == MAX_WIDTH - 1)

{

printf(\"%c\", WALL);

}

else

{

printf(\" \");

}

}

printf(\"\

\");

}

//绘制底部

for (int j = 0; j< MAX_WIDTH; j++)

{

printf(\"%c\", WALL);

}

printf(\"\

\");

}

3、绘制贪吃蛇

//函数:根据贪吃蛇的位置,把蛇绘制到地图中

void DrawSnake()

{

for (int i = 0; i< MAX_HEIGHT; i++)

{

for (int j = 0; j< MAX_WIDTH; j++)

{

if (Snake[i][j] == 1)

{

printf(\"%c\", SNAKE);

}

else

{

printf(\" \");

}

}

printf(\"\

\");

}

}

4、贪吃蛇移动

void MoveSnake(){

//定义当前贪吃蛇的移动方向

char dirc;

//定义上一步是否移动成功

bool succ;

//判断游戏是否结束

while (!IsDie())

{

succ = true;

//输入按键,获取蛇的移动方向

if (GetAsyncKeyState(VK_UP) && dirc != s)

{

dirc = w;

}

else if (GetAsyncKeyState(VK_DOWN) && dirc != w)

{

dirc = s;

}

else if (GetAsyncKeyState(VK_LEFT) && dirc != d)

{

dirc = a;

}

else if (GetAsyncKeyState(VK_RIGHT) && dirc != a)

{

dirc = d;

}

else

succ = false;

//根据蛇的行进方向移动贪吃蛇

if (succ)

{

switch (dirc)

{

case w:

Y--;

break;

case s:

Y++;

break;

case a:

X--;

break;

case d:

X++;

break;

default:

break;

}

}

//判断蛇头是否位于墙上,如果是则直接游戏结束

if (X == 0 || X == MAX_WIDTH - 1 || Y == 0 || Y == MAX_HEIGHT - 1)

{

break;

}

//判断蛇头是否位于食物上,如果是,则重新随机产生食物

if (X == foodX && Y == foodY)

{

RandFood();

}

else

{

//把最后一个贪吃蛇(尾巴)清零(从地图上移除)

Snake[Snake[0][0]][Snake[0][1]] = 0;

//把蛇放到它头部的位置(这段代码是为了把头部的位置放到原来尾巴的位置上)

for (int i = 0; i< MAX_HEIGHT; i++)

{

for (int j = 0; j< MAX_WIDTH; j++)

{

if (Snake[i][j] == 2)

{

Snake[i][j] = 1;

}

}

}

}

//把蛇放到新位置

Snake[Y][X] = 2;

//绘制地图

system(\"cls\");

Border();

DrawSnake();

//延时

Sleep(200);

}

}

5、随机产生食物

//函数:随机产生食物

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。