vs+easy贪吃蛇

代码是根据b站up“c语言编程爱好者”出的教程逐步打上去的,自己修改了一小部分代码

最近更新了win11系统发现运行时会弹出运行窗口,且输入必须要在运行窗口那里才有效,找到了一个办法解决这个问题

以管理员身份运行

打开设置

改为windows控制台主机就可以了

以下是源代码

注意:此贪吃蛇并未写完整,没有写撞墙函数,音乐函数,贪吃蛇无死亡判定。

往后会逐渐补充上去

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<easyx.h>
#include<Windows.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#define SNAKE_NUM 500
enum DIR
{
	UP,
	DOWN,
	LEFT,
	RIGHT,
};
typedef struct Point {
	int x;
	int y;
}point;//坐标存储结构体
//蛇的结构
struct Snake
{
	int size;
	int dir=RIGHT;
	int speed;
	point coor[SNAKE_NUM];
	
}snake;
struct Food {
	int x;
	int y;
	int r;           //食物大小
	bool flag;           //食物是否被吃
	unsigned long color;         //食物颜色

}food;
void GameDraw()
{
	BeginBatchDraw();
	setbkcolor(RGB(28, 115, 119));
	cleardevice();
	setfillcolor(GREEN);
	for (int i = 0;i < snake.size;i++)
	{
		solidcircle(snake.coor[i].x, snake.coor[i].y, 5);
	}
	//绘制食物
	if (food.flag)
	{
		solidcircle(food.x, food.y, food.r);
	}
	EndBatchDraw();
}
void SnakeMove()
{
	for (int i = snake.size-1;i >0;i--)
	{
		snake.coor[i] = snake.coor[i - 1];
	}
	switch (snake.dir)
	{
	case UP:
		snake.coor[0].y-=snake.speed;
		if (snake.coor[0].y+10 <= 0)//超出了上面的边界
		{
			snake.coor[0].y = 480;
		}
		break;
	case DOWN:
		snake.coor[0].y+= snake.speed;
		if (snake.coor[0].y - 10 >= 480)
		{
			snake.coor[0].y = 0;
		}
		break;
	case LEFT:
		snake.coor[0].x-= snake.speed;
		if (snake.coor[0].x + 10 <= 0)
		{
			snake.coor[0].x = 640;
		}
		break;
	case RIGHT:
		snake.coor[0].x+= snake.speed;
		if (snake.coor[0].x -10 >=640 )
		{
			snake.coor[0].x = 0;
		}
		break;
	}
	
}
void keyControl()
{
	if (_kbhit())
	{
		switch (_getch())
		{
		case 'w':
		case 'W':
		case 72:
			if (snake.dir != DOWN)
			{
				snake.dir = UP;
			}
			break;
		case 's':
		case 'S':
		case 80:
			if (snake.dir != UP)
			{
				snake.dir = DOWN;
			}
			break;
		case 'A':
		case 'a':
		case 75:
			if (snake.dir != RIGHT)
			{
				snake.dir = LEFT;
			}
			break;
		case 'd':
		case 'D':
		case 77:
			if(snake.dir != LEFT)
			{
				snake.dir = RIGHT;
			}
			break;
		case ' '://游戏暂停逻辑
			while (1)
			{
				if (_getch() == ' ')
					return;
			}
		}
	}
	
}
void EatFood()
{
	if (food.flag&&snake.coor[0].x >= food.x-food.r && snake.coor[0].x <= food.x+food.r&&snake.coor[0].y>=food.y-food.r&&snake.coor[0].y<=food.y+food.r)
	{
		food.flag = false;
		snake.size++;
	}
	//如果食物消失 则重新生成一个食物
	if (!food.flag)
	{
		food.x = rand() % 640;
		food.y = rand() % 480;
		food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
		food.r = rand() % 10 + 5;
		food.flag = true;
	}
	/*
	   可以加一个分数 吃一个食物 加n分
	*/
}


void GameInit()
{
	initgraph(640, 480);
	//设置随机数种子
	srand(time(0));
	snake.size = 3;
	snake.speed = 10;
	snake.dir=RIGHT;
	for (int i = 0;i < snake.size;i++) {
		snake.coor[i].x = 40 - 10 * i;
		snake.coor[i].y = 10;
	}
	//初始化食物 rand()随机产生一个整数 如果没有设置随机数种子,每次产生的都是固定的整数
	//设置头文件stdlib.h
	food.x = rand() % 640;
	food.y = rand() % 480;
	food.color = RGB(rand() % 256, rand() % 256, rand() % 256);
	food.r = rand() % 10 + 5;
	food.flag = true;
}
int main()
{
	GameInit();
	while (1)
	{
		SnakeMove();
		GameDraw();
		keyControl();
		EatFood();
		Sleep(20);
	}


	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值