2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C语言贪吃蛇用VC

C语言贪吃蛇用VC

时间:2020-01-17 02:12:55

相关推荐

C语言贪吃蛇用VC

用到函数的调用和实现,用到easyx,结构体,数组等

也可以用链表来写,在linux上用vim写贪吃蛇原理差不多。

进行初始化

原本想用srand(time(null))的发下有时食物出不来就用了GETtick...

移动蛇:

用键位控制:

_kbhit是确认是否有按键按下,有就为1否则为0,_getch()是输入的字符.

画图:

调用easyx头文件,用来画图

食物随机出现:

蛇头碰到食物蛇尾加1

上面移动的是没有死亡的,下面这个移动到边界就是死亡:

打印菜单:

主函数:

#include<stdio.h>

#include<graphics.h>

#include<stdlib.h>

#include<conio.h>

#include<time.h>

#include<string.h>

void Game_draw();

void Game_Init();

void Move_snake();

void keyborad();

void snake_food();

int menu();

void snake_food_hard();

int Move_snake_siwang();

#define MAX_num 500

#define my_high 800

#define my_wide 800

enum dir

{

RIGHT,

DOWN,

UP,

LEFT,

};

struct Sanke

{

int szie;//蛇的节数

int dir;//蛇的方向

int speed;//蛇的速度

POINT coor[MAX_num];//坐标

}sanke;

struct Food

{

int x;

int y;

int r;

bool flag;

}food;

int main(void)

{

k:

int choose,i;

int l = 1;

choose=menu();

switch (choose)

{

case 3:

Game_Init();

while (1)

{

Game_draw();

Move_snake();

keyborad();

snake_food();

Sleep(100);

}

break;

case 2:

Game_Init();

while (1)

{

Game_draw();

if (l == 1)

{

l = Move_snake_siwang();

}

else

{

goto p;

}

keyborad();

snake_food();

Sleep(20);

}

break;

case 1:

Game_Init();

while (1)

{

Game_draw();

if (l == 1)

{

l = Move_snake_siwang();

}

else

{

goto p;

}

keyborad();

snake_food();

Sleep(100);

}

break;

}

p:

printf("you die ,please choose repeat or quit 1 or 0 :");

scanf_s("%d", &i);

if (i == 1)

{

goto k;

}

return 0;

}

void Game_Init()

{

initgraph(my_high,my_wide,SHOWCONSOLE);//设置命令框格,图形大小,SHOWCONSOLE显示控制台;

sanke.szie = 3;//初始话蛇定义其节数

sanke.speed = 10;

sanke.dir=RIGHT;

for (int i = 0; i<= sanke.szie-1; i++)

{

sanke.coor[i].y = 10;

sanke.coor[i].x = 100-10*i;

}

srand(GetTickCount());

food.x = rand() % my_wide+20;

food.y = rand() % my_high+20;

food.flag = true;

food.r = rand() % 10 + 5;

}

void Move_snake()

{

for (int i = sanke.szie- 1; i >0; i--)

{

sanke.coor[i] = sanke.coor[i - 1];

}

switch (sanke.dir)

{

case UP:

if (sanke.coor[0].y <= 0)

{

sanke.coor[0].y = my_high;

}

sanke.coor[0].y -= sanke.speed;

break;

case DOWN:

if (sanke.coor[0].y >= my_high)

{

sanke.coor[0].y = 0;

}

sanke.coor[0].y += sanke.speed;

break;

case LEFT:

if (sanke.coor[0].x <= 0)

{

sanke.coor[0].x = my_wide;

}

sanke.coor[0].x -= sanke.speed;

break;

case RIGHT:

if (sanke.coor[0].x>=my_wide)

{

sanke.coor[0].x = 0;

}

sanke.coor[0].x += sanke.speed;

break;

}

}

void keyborad()

{

if (_kbhit())

{

switch (_getch())

{

case 'W':

case 'w':

if (sanke.dir != DOWN)

{

sanke.dir =UP;

}

break;

case 'S':

case 's':

if (sanke.dir != UP)

{

sanke.dir = DOWN;

}

break;

case 'A':

case 'a':

if (sanke.dir != RIGHT)

{

sanke.dir = LEFT;

}

break;

case 'D':

case 'd':

if (sanke.dir != LEFT)

{

sanke.dir = RIGHT;

}

break;

case ' ':

while (1)

{

if (_kbhit())

{

if (_getch() == ' ')

{

break;

}

}

}

break;

}

}

}

void Game_draw()

{

BeginBatchDraw();

setbkcolor(RGB(28, 115, 119));//设置背景颜色

cleardevice();

setfillcolor(WHITE);

//绘制蛇

for (int i =0; i <= sanke.szie-1; i++)

{

solidcircle(sanke.coor[i].x, sanke.coor[i].y, 5);//绘制⚪函数

}

if (food.flag)

{

solidcircle(food.x, food.y, food.r);

}

//solidcircle(sanke.coor[0].x, sanke.coor[0].y, 5);

EndBatchDraw();

}

void snake_food()

{

if (sanke.coor[0].x <= food.x +food.r && sanke.coor[0].x >= food.x -food.r&&sanke.coor[0].y >= food.y - food.r && sanke.coor[0].y <= food.y + food.r)

{

food.flag = false;

sanke.szie++;

}

if (!food.flag)

{

srand(GetTickCount());

food.x = rand() % my_wide+1;

food.y = rand() % my_high+1;

food.flag = true;

food.r = rand() % 10 + 5;

}

}

int menu()

{

int a;

printf("#############################\n");

printf("#### welcome to game ####\n");

printf("#### 1.start easy game ####\n");

printf("#### 2.start hard game ####\n");

printf("#### 3.start wudi game ####\n");

printf("#### 4.close game ####\n");

printf("#############################\n");

printf(" please choose the number:");

scanf_s("%d", &a);

return a;

}

void snake_food_hard()

{

if (sanke.coor[0].x <= food.x + food.r && sanke.coor[0].x >= food.x - food.r && sanke.coor[0].y >= food.y - food.r && sanke.coor[0].y <= food.y + food.r)

{

food.flag = false;

sanke.szie++;

sanke.speed ++;

}

if (!food.flag)

{

srand(GetTickCount());

food.x = rand() % my_wide+1;

food.y = rand() % my_high+1;

food.flag = true;

food.r = rand() % 10 + 5;

}

}

int Move_snake_siwang()

{

int l = 1;

for (int i = sanke.szie - 1; i > 0; i--)

{

sanke.coor[i] = sanke.coor[i - 1];

}

switch (sanke.dir)

{

case UP:

if (sanke.coor[0].y <= 0)

{

l = 0;

return l;

}

sanke.coor[0].y -= sanke.speed;

break;

case DOWN:

if (sanke.coor[0].y >= my_high)

{

l = 0;

return l;

}

sanke.coor[0].y += sanke.speed;

break;

case LEFT:

if (sanke.coor[0].x <= 0)

{

l = 0;

return l;

}

sanke.coor[0].x -= sanke.speed;

break;

case RIGHT:

if (sanke.coor[0].x >= my_wide)

{

l = 0;

return l;

}

sanke.coor[0].x += sanke.speed;

break;

}

return 1;

}

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