C语言如何实现贪吃蛇小游戏

这篇文章给大家分享的是有关C语言如何实现贪吃蛇小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

实现功能

蛇最开始三节,向右移动。用户可以通过按上下左右来控制蛇的移动,食物随机产生,蛇吃到食物后蛇的身体会变长。蛇撞墙或者撞到自己身体后,游戏结束。

C语言如何实现贪吃蛇小游戏

怎么实现

要实现一个贪吃蛇小游戏,首先要想清楚游戏里有什么,怎样实现功能。

很明显游戏中只有两样东西,蛇和食物。所以要建立蛇和食物信息,然后将蛇和食物进行初始化,在将蛇和食物画出来。

实现的功能有:

1. 蛇的移动2. 按键控制蛇的移动3. 食物的产生4. 蛇吃食物后蛇身体变长5. 游戏的结束

用结构体建立蛇和食物的信息

structCOOR{//位置,x,y坐标
intx;
inty;
};

structSNAKE{//蛇的基础信息
intsize;//节数
intspeed;//运动速度
chardir;//运动方向
structCOORxy[MAX];//位置
}snakes;

structFOOD{//食物信息
structCOORfooddir;//食物位置
intflag;//判断食物是否被吃掉,1未被吃掉,0被吃掉
}food;

实现功能的函数:

蛇:

voidsnakeInit(){//初始化蛇的信息
voiddrawSnake(){//画蛇
voidmoveSnake(){//蛇的移动
voidcoorSnake(){//按键控制蛇的运动方向

食物:

voidinitFood(){//初始化食物的信息
voiddrawFood(){//画食物

其它:

intgameOver(){//游戏结束情况
voidgameInit(){//初始化窗口范围

代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#include<conio.h>
#include<Windows.h>

#defineMAX200
HWNDhwnd=NULL;

enumDIR{//枚举移动方向
UP,
DOWN,
LEFT,
RIGHT,
};

structCOOR{//位置,x,y坐标
intx;
inty;
};

structSNAKE{//蛇的基础信息
intsize;//节数
intspeed;//运动速度
chardir;//运动方向
structCOORxy[MAX];//位置
}snakes;

structFOOD{//食物信息
structCOORfooddir;//食物位置
intflag;//判断食物是否被吃掉,1未被吃掉,0被吃掉
}food;

voidsnakeInit(){//初始化蛇的信息
snakes.size=3;//开始节数
snakes.dir=RIGHT;//开始运动方向
snakes.speed=10;
inti=0;
for(;i<snakes.size;i++){//每一节书的位置,注意将第一节作为头
snakes.xy[i].x=40-10*i;
snakes.xy[i].y=10;
}

}

voiddrawSnake(){//画蛇
inti=0;
for(;i<snakes.size;i++){
setlinecolor(BLACK);//画线的颜色
setfillcolor(RED);//填充色
//fillrectangle(snakes.xy[i].x,snakes.xy[i].y,snakes.xy[i].x+10,snakes.xy[i].y+10);//矩形
fillcircle(snakes.xy[i].x,snakes.xy[i].y,5);//圆形
}


}

voidmoveSnake(){//蛇的移动
//snakes.xy[0].x++;

inti=0;
for(i=snakes.size-1;i>0;i--){//蛇身跟着舌头运动
snakes.xy[i].x=snakes.xy[i-1].x;
snakes.xy[i].y=snakes.xy[i-1].y;
}
switch(snakes.dir){
caseUP:
snakes.xy[0].y-=snakes.speed;
break;
caseDOWN:
snakes.xy[0].y+=snakes.speed;
break;
caseLEFT:
snakes.xy[0].x-=snakes.speed;
break;
caseRIGHT:
snakes.xy[0].x+=snakes.speed;
break;
default:
break;
}


}

voidcoorSnake(){//按键控制蛇的运动方向
if(_kbhit()){//等待获取按键
charc=_getch();//获得按键
switch(c){
case72:
case'w':
if(snakes.dir!=DOWN){
snakes.dir=UP;
}
break;
case80:
case's':
if(snakes.dir!=UP){
snakes.dir=DOWN;
}
break;
case75:
case'a':
if(snakes.dir!=RIGHT){
snakes.dir=LEFT;
}
break;
case77:
case'd':
if(snakes.dir!=LEFT){
snakes.dir=RIGHT;
}
break;
default:
break;
}
}
}
voidinitFood(){//初始化食物的信息
food.flag=1;
while(1){
START:
food.fooddir.x=rand()%63*10;//食物位置随机
food.fooddir.y=rand()%47*10;
for(inti=0;i<snakes.size;i++){//防止食物生成在蛇身上。
if(food.fooddir.x==snakes.xy[i].x&&food.fooddir.y==snakes.xy[i].y){
gotoSTART;
}
else{
break;
}
}
break;
}
}

voiddrawFood(){//画食物
//food.fooddir.x=100;
//food.fooddir.y=200;
setlinecolor(BLACK);
setfillcolor(RED);
fillcircle(food.fooddir.x,food.fooddir.y,5);

}
voideatFood(){//蛇吃食物
if(snakes.xy[0].x-food.fooddir.x<=5&&snakes.xy[0].y-food.fooddir.y<=5\
&&food.fooddir.x-snakes.xy[0].x<=5&&food.fooddir.y-snakes.xy[0].y<=5&&food.flag==1){
food.flag=0;
snakes.size++;
}

}

intgameOver(){//游戏结束情况
if(snakes.xy[0].x<5||snakes.xy[0].y<=0||snakes.xy[0].x>635||snakes.xy[0].y>478){
MessageBox(hwnd,"GAMEOVER!","你撞墙了!",MB_OK);
return1;
}
for(inti=1;i<snakes.size;i++){
if(snakes.xy[0].x==snakes.xy[i].x&&snakes.xy[0].y==snakes.xy[i].y){
MessageBox(hwnd,"GAMEOVER!","你撞了自己",MB_OK);
return1;
}
}
return0;
}


voidgameInit(){
hwnd=initgraph(640,480);//设置窗口大小
setbkcolor(GREEN);//设置窗口颜色
}


intmain(){
srand((unsignedlong)time(NULL));//生成随机数
gameInit();
cleardevice();//刷新窗口
snakeInit();
initFood();
while(1){
cleardevice();
if(food.flag==0){
initFood();
}
drawFood();
drawSnake();
coorSnake();
eatFood();
moveSnake();
//eatFood();
if(gameOver()){
break;
}
//stopGame();
Sleep(100);
}
getchar();//防止闪屏
closegraph();
system("pause");
return0;
}

感谢各位的阅读!关于“C语言如何实现贪吃蛇小游戏”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2021-05-30 14:10:31
收藏
分享
海报
0 条评论
190
上一篇:Laravel中怎么对大文件进行加密 下一篇:Python如何实现简易版音乐播放器
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码