0
点赞
收藏
分享

微信扫一扫

python教程:使用gevent实现高并发并限制最大并发数

郝春妮 2023-09-22 阅读 44
c语言

包含的头文件

#include <stdio.h>
#include <graphics.h>//图形库头文件
#include <conio.h>//_kbhit()函数头文件
#include <stdlib.h>//srand函数头文件
#include <time.h>//time()函数头文件

初始化界面

int main()
{
	initgraph(640,480);//初始化界面
	while (1);
	
	return 0;

}

设置背景颜色

int main()
{
	initgraph(640,480);
	setbkcolor(RGB(31, 29, 66));//设置背景颜色
	cleardevice();//清空绘图设备
	while (1);
	
	return 0;

}

定义蛇的信息结构体,枚举定义蛇的方向

#define SNAKE_NUM 500// 最大有500节
struct Snake
{
	int size;//蛇的节数
	int dir;//蛇的方向
	int speed;//蛇的速度
	POINT coor[SNAKE_NUM];//蛇的坐标



}snake;
enum DIR  //表示蛇的方向
{
	UP,//向上
	DOWN,//向下
	LEFT,//向左
	RIGHT,//向右
};

数据初始化

void gameinit()
{    
	snake.size = 3;//初始化蛇刚开始为三节
	snake.speed = 8;//初始速度是每按一次方向键改变八个像素的位置
	snake.dir = RIGHT;//初始蛇的方向是向右
	for (int i = 0; i < snake.size; i++)
	{
		snake.coor[i].x = 40 - 10 * i;
		snake.coor[i].y = 10;


	}




}

整合函数

函数写的太乱,我们可以将相同的功能放在一个函数里面,比如说将initgraph(640, 480);放在gameinit()里面,将画的都放在gamedraw()函数里面。

//数据初始化
void gameinit()
{
	initgraph(640, 480);
	snake.size = 3;
	snake.speed = 8;
	snake.dir = RIGHT;
	for (int i = 0; i < snake.size; i++)
	{
		snake.coor[i].x = 40 - 10 * i;
		snake.coor[i].y = 10;


	}




}
void gamedraw()
{
	BeginBatchDraw();//双缓冲消除闪屏
	setbkcolor(RGB(31, 29, 66));//设置背景颜色

	cleardevice();//清空绘图设备


	
	//绘制蛇
	setfillcolor(RED);//设置蛇的颜色
	for (int i = 0; i < snake.size; i++)
	{
	solidcircle(snake.coor[i].x, snake.coor[i].y, 5);//循环绘制蛇的三节身体

	}
	EndBatchDraw();//双缓冲消除闪屏


}
int main()
{
	
	gameinit();
	gamedraw();

	while (1);
	
	return 0;

}

键盘控制移动方向

void keycontrol()
{
	//72 80 75 77
	
	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;











		}
	}




}

蛇的移动

void snakemove()
{
	for (int i = snake.size-1; i>0; i--)//身体跟着头移动
	{
		snake.coor[i] = snake.coor[i - 1];
		
	}
	switch (snake.dir)//头移动
	{
	case RIGHT:
		snake.coor[0].x+=snake.speed;
		if (snake.coor[0].x > 640)
		{
			snake.coor[0].x = 0;
		}
		break;
	case UP:
		snake.coor[0].y-= snake.speed;
		if (snake.coor[0].y < 0)
		{
			snake.coor[0].y = 480;
		}
		break;
	case DOWN:
		snake.coor[0].y+=snake.speed;
		if (snake.coor[0].y > 480)
		{
			snake.coor[0].y = 0;


		}
		break;
	case LEFT:
		snake.coor[0].x-=snake.speed;
		if (snake.coor[0].x < 0)
		{
			snake.coor[0].x = 640;
		}
		break;







	}
	


}

主函数变化

int main()
{
	
	gameinit();
	gamedraw();

	while (1)
	{
		gamedraw();
		keycontrol();
		snakemove();
		Sleep(20);
	
	}
	
	return 0;

}

食物信息结构体定义

struct food
{
	int x;//食物的横坐标
	int y;//食物的纵坐标
	bool flag;//食物是否被吃
	int r;//食物半径
	DWORD color;//食物颜色



}food;

食物信息初始化(修改数据初始化函数)

//数据初始化
void gameinit()
{    //设置随机数种子
	srand((unsigned int)time(NULL));//时间不断变化,
	initgraph(640, 480);//初始化界面
	snake.size = 3;
	snake.speed = 8;
	snake.dir=RIGHT;
	for (int i = 0;i<snake.size;i++)
	{
		snake.coor[i].x = 40-10*i;
		snake.coor[i].y = 10;


	}
	//随机初始化食物的横纵坐标
	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;
	


}

蛇吃食物

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;



	}




}

修改主函数

int main()
{
	
	gameinit();
	gamedraw();

	while (1)
	{
		gamestop();
		gamedraw();
		keycontrol();
		
		snakemove();
		eatfood();
		Sleep(20);
	
	}
	
	return 0;

}

程序源码

#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
#define SNAKE_NUM 500
enum DIR  //表示蛇的方向
{
	UP,
	DOWN,
	LEFT,
	RIGHT,
};
struct Snake//蛇结构体
{
	int size;//蛇的节数
	int dir;//蛇的方向
	int speed;//蛇的速度
	POINT coor[SNAKE_NUM];//节数



}snake;
struct food//食物结构体
{
	int x;
	int y;
	bool flag;//食物是否被吃
	int r;//食物半径
	DWORD color;//食物颜色



}food;
//数据初始化
void gameinit()
{
	initgraph(640, 480);
	snake.size = 3;
	snake.speed = 8;
	snake.dir = RIGHT;
	for (int i = 0; i < snake.size; i++)
	{
		snake.coor[i].x = 40 - 10 * i;
		snake.coor[i].y = 10;


	}




}
void gamestop()//空格,游戏暂停
{
	if (_kbhit())
	{
		if (_getch() == ' ')
		{
			while (_getch() != ' ');
		}



	}



}
void gamedraw()//画函数
{
	BeginBatchDraw();
	setbkcolor(RGB(31, 29, 66));//设置背景颜色

	cleardevice();//清空绘图设备


	
	//绘制蛇
	setfillcolor(RED);//设置蛇的颜色
	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 keycontrol()//键盘控制方向
{
	//72 80 75 77

	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;











		}
	}




}
void snakemove()//蛇的移动
{
	for (int i = snake.size - 1; i > 0; i--)//身体跟着头移动
	{
		snake.coor[i] = snake.coor[i - 1];

	}
	switch (snake.dir)//头移动
	{
	case RIGHT:
		snake.coor[0].x += snake.speed;
		if (snake.coor[0].x > 640)
		{
			snake.coor[0].x = 0;
		}
		break;
	case UP:
		snake.coor[0].y -= snake.speed;
		if (snake.coor[0].y < 0)
		{
			snake.coor[0].y = 480;
		}
		break;
	case DOWN:
		snake.coor[0].y += snake.speed;
		if (snake.coor[0].y > 480)
		{
			snake.coor[0].y = 0;


		}
		break;
	case LEFT:
		snake.coor[0].x -= snake.speed;
		if (snake.coor[0].x < 0)
		{
			snake.coor[0].x = 640;
		}
		break;







	}



}
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;



	}




}
int main()
{
	
	gameinit();
	gamedraw();

	while (1)
	{
		gamestop();
		gamedraw();
		keycontrol();
		
		snakemove();
		eatfood();
		Sleep(20);
	
	}
	
	return 0;

}

程序演示

20230921_184525

举报

相关推荐

0 条评论