C语言贪吃蛇vs2017界面,vs2017实现的贪吃蛇小游戏源代码 好玩的东西第二蛋

#include

#include

#include

#include

#include

//辅助宏定义

#define maph                        25

#define mapw                        40

#define snakesize                50

struct

{

//如何去定位:坐标

int x;

int y;

}food;

//蛇的结构体

struct

{

//记录蛇得坐标

int x[snakesize];

int y[snakesize];

//蛇的长度

int len;

int speed;

}snake;

//全局变量

int key = 'w';//初始方向

int changeFlage = 0;//变化标记

//

//模块设计

//地图

void drawmap();

//食物

void creatfood();

//按键控制方向

void keydown();

//状态,判断是否结束游戏

int snakestatus();

//光标移动,光标移动

void gotoxy(int x,int y);

//

主函数

//

int main(void)

{

drawmap();

while (1)

{

creatfood();

Sleep(snake.speed);

keydown();

if (!snakestatus())

{

break;

}

}

gotoxy(mapw/2, maph/2);

printf("Game Over");

system("pause");

return 0;

}

//地图

void drawmap()

{                //○食物■墙和贪吃蛇

//随机函数种子

srand((unsigned int)time(NULL));

//圈地

for (int i = 0; i <= maph; i++)

{

gotoxy(0,i);

printf("■");

gotoxy(mapw-2, i);

printf("■");

}

for (int i = 1; i <= mapw; i+=2)

{

gotoxy(i, 0);

printf("■");

gotoxy(i, maph-1);

printf("■");

}

//化蛇

//确定蛇的属性

snake.len = 3;

snake.speed = 300;

snake.x[0] = mapw / 2;

snake.y[0] = maph / 2;//将蛇放到屏幕中间

//画蛇头

gotoxy(snake.x[0],snake.y[0]);

printf("■");

//画蛇的身体

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

{

snake.x[k] = snake.x[k - 1] + 2;

snake.y[k] = snake.y[k-1];

gotoxy(snake.x[k], snake.y[k]);

printf("■");

}

//画食物

//坐标的确定

while(1)

{food.x = rand() % (mapw - 4) + 2;

food.y = rand() % (maph - 2) + 1;

if (food.x % 2 == 0)

{

break;

}

}

//将确定的坐标画出来

gotoxy(food.x, food.y);

printf("○");

}

//食物产生

void creatfood()

{

//蛇吧食物吃了

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

{

srand((unsigned int )time(NULL));

//产生的食物不能再蛇的身上并且坐标要是偶数

while (1)

{

int flag = 1;

food.x = rand() % (mapw - 4) + 2;

food.y = rand() % (maph - 2) + 1;

//产生的食物不能再蛇的身上

for (int k = 0; k < snake.len; k++)

{

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

{

flag = 0;

break;

}

}

if (flag&&food.x % 2 == 0)

{

break;

}

}

}

gotoxy(food.x,food.y);

printf("○");

snake.len++;

changeFlage =1;//蛇的标记

}

//按键实现

void keydown()

{

//无按键的处理

if (_kbhit())

{        //有按键接受

fflush(stdin);

key = _getch();

}

//擦除最后一节

if (!changeFlage)

{

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

printf("  ");

}

//后面的蛇身处理

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

{

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

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

}

//按键处理移动方向的处理

switch (key)

{

case 'w':

case 'W':

snake.y[0]--;

break;

case 's':

case 'S':

snake.y[0]++;

break;

case 'a':

case 'A':

snake.x[0]-=2;

break;

case 'd':

case 'D':

snake.x[0]+=2;

break;

}

//蛇头画出来

gotoxy(snake.x[0], snake.y[0]);

printf("■");

changeFlage = 0;

gotoxy(maph +2,0);

}

//状态

int snakestatus()

{

if (snake.x[0] == 2 || snake.x[0] == maph-2 || snake.y[0] == 0 || snake.y[0] == mapw-1)

return 0;

//蛇头不能吃自己

for (int k = 1; k < snake.len; k++

余下内容下载附件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值