贪吃蛇游戏的c语言编程,C语言实现贪吃蛇游戏(单人版)

本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下

相比于第一个:贪吃蛇游戏,功能更加丰富

#include"snake.h"

//蛇的移动

void move_snake();

//画出蛇

void draw_snake();

//产生食物

void creatfood();

//判断蛇是否吃到食物

void eatfood();

//判断蛇是否死掉

void SnakeState();

int main()

{

//设置窗口大小

system("mode con cols=110 lines=31");

//设置标题

SetConsoleTitleA("贪吃蛇");

//播放bgm

playmusic();

//初始化蛇

begin:

snake.CH = VK_RIGHT;//初始化方向

snake.len = 5; //初始化长度

snake.SPEED = 100;//初始化蛇的移动速度

snake.coord[1].x = SCREEN_WIDETH / 2;//初始化蛇头的坐标

snake.coord[1].y = SCREEN_HEIGHT / 2;

snake.coord[2].x = SCREEN_WIDETH / 2-2;//初始化蛇头的坐标

snake.coord[2].y = SCREEN_HEIGHT / 2;

snake.coord[3].x = SCREEN_WIDETH / 2-4;//初始化蛇头的坐标

snake.coord[3].y = SCREEN_HEIGHT / 2;

//初始化食物状态

food.flag = 1;//1表示吃到食物 0表示没有吃到食物

//初始化食物状态

snake.flag = 1;//1活 0死

init_sence();//初始化游戏界面

while (1)

{

colormap();

gotoxy(0, 0);

printf("■");

HuiFu();

setcolor();

draw_snake();//画蛇

Sleep(snake.SPEED);//蛇的移动速度

move_snake();//移动蛇

if(food.flag)

creatfood();//产生食物

eatfood();//判断是否吃到食物

SnakeState();//判断蛇是否死亡

if (!snake.flag)break;

}

system("cls");

gotoxy(SCREEN_WIDETH/2, SCREEN_HEIGHT/2-4);

printf(" GAME OVER!!!");

gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+2);

printf("你的得分是:\t\t\t%d ",snake.len-1);

gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+4);

printf("我不服再来:\t\t\tCTRL ");

gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+6);

printf("算了垃圾游戏毁我青春:\t\tESC");

while (1)

{

if (GetAsyncKeyState(VK_CONTROL))

{

system("cls");

goto begin;

}

else if (GetAsyncKeyState(VK_ESCAPE))

return 0;

}

}

//蛇的移动

void move_snake()

{

//判断是否有按键操作

if (GetAsyncKeyState(up))

{

if(snake.CH!=down)snake.CH = up;

}

else if (GetAsyncKeyState(down))

{

if (snake.CH != up)snake.CH = down;

}

else if (GetAsyncKeyState(right))

{

if (snake.CH != left)snake.CH = right;

}

else if (GetAsyncKeyState(left))

{

if (snake.CH != right)snake.CH = left;

}

else if (GetAsyncKeyState(VK_F1))

{

if(snake.SPEED>=50)snake.SPEED -= 10;

}

else if (GetAsyncKeyState(VK_F2))

{

if (snake.SPEED <= 100)snake.SPEED += 10;

}

//游戏难度设置

if (snake.len >= 30 && snake.SPEED >= 10)snake.SPEED -= 2;

//根据检测到的方向改变蛇头的位置

switch (snake.CH)

{

case right:snake.coord[1].x += 2; break;

case left:snake.coord[1].x -= 2; break;

case up:snake.coord[1].y -= 1; break;

case down:snake.coord[1].y += 1; break;

}

}

//画出蛇

void draw_snake()

{

//画出蛇头

gotoxy(snake.coord[1].x, snake.coord[1].y);

printf("□");

//画出蛇身,直接一个for循环实现

for (int i = 2; i < snake.len; i++)

{

gotoxy(snake.coord[i].x, snake.coord[i].y);

printf("□");

}

//擦掉尾巴

HuiFu();

gotoxy(snake.coord[snake.len].x, snake.coord[snake.len].y);

printf(" ");

//遍历每一节蛇

for (int i = snake.len; i >1; i--)

{

snake.coord[i].x = snake.coord[i - 1].x;

snake.coord[i].y = snake.coord[i - 1].y;

}

gotoxy(0, 0);

printf("■");

gotoxy(85, 25);

printf("得分:%d ", snake.len-1);

gotoxy(85, 22);

printf("速度:%dms/步 ", snake.SPEED);

}

//产生食物

void creatfood()

{

//随机种子生成

srand((unsigned)time(NULL));

if(food.flag)

while (1)

{

food.x = rand() % 80;

food.y = rand() % 30;

if (food.x % 2 == 0 && food.x >= 2 && food.x <= 78 && food.y > 1 && food.y < 30)

{

int flag = 0;

//判断产生的食物可不可能在蛇的身体上

for (int i = 1; i <= snake.len; i++)

{

if (snake.coord[i].x == food.x&&snake.coord[i].y == food.y)

{

flag = 1;

break;

}

}

if (flag)continue;

//绘制食物

else

{

colorfood();

gotoxy(food.x, food.y);

printf("⊙");

HuiFu();

food.flag = 0;

break;

}

}

}

food.flag = 0;

}

//判断蛇是否吃到食物

void eatfood()

{

//只需要判断蛇头是否与食物重合

if (food.x == snake.coord[1].x&&food.y == snake.coord[1].y)

{

snake.len+=1;

food.flag = 1;

}

}

//判断蛇是否死掉

void SnakeState()

{

if (snake.coord[1].x < 2 || snake.coord[1].x>78 || snake.coord[1].y < 1 || snake.coord[1].y>29)

snake.flag = 0;

for (int i = 2; i <= snake.len; i++)

{

if (snake.coord[1].x == snake.coord[i].x&&snake.coord[1].y == snake.coord[i].y)

snake.flag = 0;

}

}

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程圈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值