2

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

(一)背景介绍 1、贪吃蛇,又称贪食蛇、章鱼君,是一款由学生借鉴贪吃蛇的原理而制作的一款游戏,从 1976 年推出以来,受到了众多玩家的喜爱。2、贪吃蛇的游戏带来的乐趣在于游戏难度较低,而又需要技巧和策略。3、

(一)背景介绍

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、随机产生食物

//函数:随机产生食物

本文来自网络,不代表本站立场。转载请注明出处: https://tj.jiuquan.cc/a-2470794/
1
上一篇美的净水桶(美的净水桶m3)
下一篇 什么蓝牙耳机好(荣耀手机配什么蓝牙耳机好)

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: alzn66@foxmail.com

关注微信

微信扫一扫关注我们

返回顶部