第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 用C语言编写贪吃蛇小游戏

用C语言编写贪吃蛇小游戏

时间:2020-09-15 08:02:22

相关推荐

用C语言编写贪吃蛇小游戏

实现功能

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

怎么实现

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

很明显游戏中只有两样东西,蛇和食物。所以要建立蛇和食物信息,然后将蛇和食物进行初始化,在将蛇和食物画出来。实现的功能有:1. 蛇的移动2. 按键控制蛇的移动3. 食物的产生4. 蛇吃食物后蛇身体变长5. 游戏的结束

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

struct COOR{//位置,x,y坐标int x;int y;};struct SNAKE{//蛇的基础信息int size;//节数int speed;//运动速度char dir;//运动方向struct COOR xy[MAX];//位置}snakes;struct FOOD{//食物信息struct COOR fooddir;//食物位置int flag;//判断食物是否被吃掉,1未被吃掉,0被吃掉}food;

实现功能的函数:

蛇:

void snakeInit(){//初始化蛇的信息void drawSnake(){//画蛇void moveSnake(){//蛇的移动void coorSnake(){//按键控制蛇的运动方向

食物:

void initFood(){//初始化食物的信息void drawFood(){//画食物

其它:

int gameOver(){//游戏结束情况void gameInit(){//初始化窗口范围

代码

#include<stdio.h>#include<stdlib.h>#include<time.h>#include<graphics.h>#include<conio.h>#include<Windows.h>#define MAX 200HWND hwnd = NULL;enum DIR{//枚举移动方向UP,DOWN,LEFT,RIGHT,};struct COOR{//位置,x,y坐标int x;int y;};struct SNAKE{//蛇的基础信息int size;//节数int speed;//运动速度char dir;//运动方向struct COOR xy[MAX];//位置}snakes;struct FOOD{//食物信息struct COOR fooddir;//食物位置int flag;//判断食物是否被吃掉,1未被吃掉,0被吃掉}food;void snakeInit(){//初始化蛇的信息snakes.size = 3;//开始节数snakes.dir = RIGHT;//开始运动方向snakes.speed = 10;int i = 0;for (; i < snakes.size; i++){//每一节书的位置,注意将第一节作为头snakes.xy[i].x = 40 - 10 * i;snakes.xy[i].y = 10;}}void drawSnake(){//画蛇int i = 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);//圆形}}void moveSnake(){//蛇的移动//snakes.xy[0].x++;int i = 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){case UP:snakes.xy[0].y-=snakes.speed;break;case DOWN:snakes.xy[0].y+=snakes.speed;break;case LEFT:snakes.xy[0].x-=snakes.speed;break;case RIGHT:snakes.xy[0].x+=snakes.speed;break;default:break;}}void coorSnake(){//按键控制蛇的运动方向if (_kbhit()){//等待获取按键char c = _getch();//获得按键switch (c){case 72:case'w':if (snakes.dir != DOWN){snakes.dir = UP;}break;case 80:case's':if (snakes.dir != UP){snakes.dir = DOWN;}break;case 75:case'a':if (snakes.dir != RIGHT){snakes.dir = LEFT;}break;case 77:case'd':if (snakes.dir != LEFT){snakes.dir = RIGHT;}break;default:break;}}}void initFood(){//初始化食物的信息food.flag = 1;while (1){START:food.fooddir.x = rand() % 63 * 10;//食物位置随机food.fooddir.y = rand() % 47 * 10;for (int i = 0; i < snakes.size; i++){//防止食物生成在蛇身上。if (food.fooddir.x == snakes.xy[i].x&&food.fooddir.y == snakes.xy[i].y){goto START;}else{break;}}break;}}void drawFood(){//画食物//food.fooddir.x = 100;//food.fooddir.y = 200;setlinecolor(BLACK);setfillcolor(RED);fillcircle(food.fooddir.x, food.fooddir.y, 5);}void eatFood(){//蛇吃食物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++;}}int gameOver(){//游戏结束情况if (snakes.xy[0].x < 5 || snakes.xy[0].y <= 0 || snakes.xy[0].x > 635 || snakes.xy[0].y > 478){MessageBox(hwnd, "GAME OVER!","你撞墙了!", MB_OK);return 1;}for (int i = 1; i < snakes.size; i++){if (snakes.xy[0].x == snakes.xy[i].x&&snakes.xy[0].y == snakes.xy[i].y){MessageBox(hwnd, "GAME OVER!", "你撞了自己",MB_OK);return 1;}}return 0;}void gameInit(){hwnd=initgraph(640, 480);//设置窗口大小setbkcolor(GREEN);//设置窗口颜色}int main(){srand((unsigned long)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");return 0;}

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