您的位置:首页 > 编程语言 > C语言/C++

今天用C语言写了一个贪吃蛇小游戏

2020-03-01 01:43 323 查看

不多说,直接写;

#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<graphics.h>
#include<mmsyscom.h>
#pragma comment(lib,"winmm.lib")

#define NUM 200
#define SIZE 10

enum Ch{ up = 72, down = 80, left = 75, right = 77 };

struct Coor
{
int x;
int y;
};
struct Snake
{
int n;
Ch ch;
Coor szb[NUM];
};
struct Food
{
int x;
int y;
bool iseat;
};

Snake snake;
Food food;

int speed = 100;
int jf = 0;

char t[10000] = { 0 };

void GameInit()
{
srand((unsigned int)time(NULL));

snake.n = 3;
snake.ch = right;
snake.szb[0].x = 100;
snake.szb[0].y = 100;
snake.szb[1].x = 90;
snake.szb[1].y = 100;
snake.szb[2].x = 80;
snake.szb[2].y = 100;

food.iseat = true;
}

void DrawGame()
{
cleardevice();
setfillcolor(RED);
fillrectangle(snake.szb[0].x, snake.szb[0].y, snake.szb[0].x + SIZE, snake.szb[0].y + SIZE);
for (int i = 0; i < snake.n; i++)
{
rectangle(snake.szb[i].x, snake.szb[i].y, snake.szb[i].x + SIZE, snake.szb[i].y + SIZE);
}

setfillcolor(GREEN);
fillroundrect(food.x, food.y, food.x + SIZE, food.y + SIZE, 5, 5);

}

void SnakeMove()
{
for (int i = snake.n - 1; i>0; i--)
{
snake.szb[i].x = snake.szb[i - 1].x;
snake.szb[i].y = snake.szb[i - 1].y;
}
switch (snake.ch)
{
case up:
snake.szb[0].y -= SIZE;
break;
case down:
snake.szb[0].y += SIZE;
break;
case left:
snake.szb[0].x -= SIZE;
break;
case right:
snake.szb[0].x += SIZE;
break;
}
}

void ChangeCh()
{
char key;
key = getch();
switch (key)
{
case up:
if (snake.ch != down)
{
snake.ch = up;
}
break;
case down:
if (snake.ch != up)
{
snake.ch = down;
}
break;
case left:
if (snake.ch != right)
{
snake.ch = left;
}
break;
case right:
if (snake.ch != left)
{
snake.ch = right;
}
break;
}
}

void CreatFood()
{
bool  flag = false;
if (food.iseat == true)
{
while (1)
{
food.x = rand() % 64 * 10;
food.y = rand() % 48 * 10;
for (int i = 0; i < snake.n; i++)
{
if (food.x == snake.szb[i].x&&food.y == snake.szb[i].y)
{
flag = true;
break;
}
}
if (!flag)
{
food.iseat = false;
break;
}
}
}
}

void EatFood()
{
if (snake.szb[0].x == food.x&&snake.szb[0].y == food.y)
{
food.iseat = true;
snake.n++;
jf++;
}
}

void drawjf()
{
setbkmode(0);
sprintf(t, "当前分数:%d", jf);
settextcolor(RED);
outtextxy(520, 5, t);
}

int GameOver()
{
if (snake.szb[0].x<0 || snake.szb[0].x>640 || snake.szb[0].y<0 || snake.szb[0].y>480)
{
return 1;
}
for (int i = 1; i < snake.n - 1; i++)
{
if (snake.szb[0].x == snake.szb[i].x&&snake.szb[0].y == snake.szb[i].y)
{
return 1;
}
}
return 0;
}

int main()
{
initgraph(640, 480);
mciSendString("open 1.mp3", NULL, NULL, NULL);
mciSendString("play 1.mp3 repeat", NULL, NULL, NULL);
GameInit();
int n = 0;
while (1)
{
while (!kbhit())
{
SnakeMove();
DrawGame();
drawjf();
CreatFood();
EatFood();
n = GameOver();
if (n)
{
break;
}
Sleep(speed);
}
if (n)
{
break;
}
ChangeCh();
}
closegraph();
return 0;
}

我用的是vs2013,多字节字符集。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
世间风云 发布了1 篇原创文章 · 获赞 0 · 访问量 106 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: