基于easyx低配版flappybird

又更了~(我真勤快。。。

就是一个基于easyx超简单的小游戏,控制小球不要碰到桩
(昨晚帮舍友写的一个简化的小demo,所以界面什么的都有些劣质,对不住了

柱子会往前移动,有动感,但上下移动我还没做出来。。。我是废物。。
在这里插入图片描述
因为是个小demo,也就一百来行代码,小伙伴们可以根据自己的喜好加工它使它成为一个完备的游戏

说到最最前面,我的障碍是用画很粗的一条线完成的。。就疯狂简化。。

先用 class 为游戏中的各种东西定义

class K
{
public:
	int x;
	int y;
	int _y;
};

class K l1ne[25]; //上线
class K l2ne[25]; //下线
class K ball;  //小球
class K blank[25];  //空白区域

关于线的函数,,看注释

对了,这个障碍的数量可以自己改,我只设了25个,也可以设个几百个,可以玩的时间长一点哦

void sbline(int x,int y)  //画上线
{
	setlinecolor(GREEN);
	setlinestyle(PS_SOLID, 45);
	line(x, y, x, 480);
}

void upline(int x, int y) //画下线
{
	setlinecolor(GREEN);
	setlinestyle(PS_SOLID, 45);
	line(x, 0, x, y);
}

void initline() //初始线
{
	int k = 420;
	srand(time(0));
	for (int i = 0; i < 25; i++)
	{
		l1ne[i].x = k;
		l2ne[i].x = k;
		k += 150;
		l1ne[i].y = rand() % 280 + 20;
		blank[i].y = l1ne[i].y;
		l2ne[i].y = l1ne[i].y + 150;
		blank[i]._y = l2ne[i].y;
	}
}

void draw()  //画线
{
	for (int i = 0; i < 25; i++)
	{
		upline(l1ne[i].x, l1ne[i].y);
		sbline(l2ne[i].x, l2ne[i].y);
	}
}

void moveline1()  //线向前移动
{
	for (int i = 0; i < 25; i++)
	{
		l1ne[i].x -= 7;
		l2ne[i].x -= 7;
	}
}

控制小球的部分 (小球改成小鸟图片不就是个flappybird的吗。。(doge

void initball()  //初始球坐标
{
	ball.y = 100;
	ball.x = 180;
}

void drawball(int x,int y)  //画球
{
	setcolor(RED);
	setfillcolor(RED);
	fillcircle(x, y, 3);
}

void moveball()  //控制上下
{

	if (GetAsyncKeyState('W') || GetAsyncKeyState(VK_UP))
	{
		ball.y -= 20;
	}
	if (GetAsyncKeyState('S') || GetAsyncKeyState(VK_DOWN))
	{
		ball.y += 20;
	}
}

判断碰撞
此处建议自己精化一下,这个不太严谨
效果大概是这样的
在这里插入图片描述

void crash()  //判断碰撞
{
	int xx = ball.x;
	int yy = ball.y;
	for (int i = 0; i < 25; i++)
	{
		if ((abs(xx-l1ne[i].x) < 5  &&  yy-blank[i].y < 30 )
			|| (abs(xx - l2ne[i].x) < 5 && blank[i]._y-yy < 30 ) )
		{
			settextcolor(RED);
			settextstyle(50, 60, "Impact");
			outtextxy(65, 300, "LOSE!");
			settextcolor(RED);
			settextstyle(20, 10, "宋体");
			outtextxy(120, 400, "按空格键结束游戏");
			Sleep(2000);
			while (true)
			{
				FlushBatchDraw();
				Sleep(10);

				if (_kbhit())
				{
					if (_getch() == ' ')
					{
						closegraph();
					}
				}
			}
		}
	}
}

main函数给看一下

int main()
{
	initgraph(1040, 480);
	setbkcolor(WHITE);
	cleardevice();
	initline();
	initball();
	while (1)
	{
		BeginBatchDraw();
		cleardevice();
		draw();
		drawball(ball.x,ball.y);
		moveball();
		crash();
		Sleep(100);
		moveline1();
		EndBatchDraw();

	}
	

	_getch();

}

最后。。完整代码如下

#include<graphics.h>
#include<time.h>
#include<conio.h>
#include<iostream>
#include<stdlib.h>
class K
{
public:
	int x;
	int y;
	int _y;
};

class K l1ne[25]; //上线
class K l2ne[25]; //下线
class K ball;  //小球
class K blank[25];  //空白区域


void sbline(int x,int y)  //画上线
{
	setlinecolor(GREEN);
	setlinestyle(PS_SOLID, 45);
	line(x, y, x, 480);
}

void upline(int x, int y) //画下线
{
	setlinecolor(GREEN);
	setlinestyle(PS_SOLID, 45);
	line(x, 0, x, y);
}

void initline() //初始线
{
	int k = 420;
	srand(time(0));
	for (int i = 0; i < 25; i++)
	{
		l1ne[i].x = k;
		l2ne[i].x = k;
		k += 150;
		l1ne[i].y = rand() % 280 + 20;
		blank[i].y = l1ne[i].y;
		l2ne[i].y = l1ne[i].y + 150;
		blank[i]._y = l2ne[i].y;
	}
}

void draw()  //画线
{
	for (int i = 0; i < 25; i++)
	{
		upline(l1ne[i].x, l1ne[i].y);
		sbline(l2ne[i].x, l2ne[i].y);
	}
}

void initball()  //初始球坐标
{
	ball.y = 100;
	ball.x = 180;
}

void drawball(int x,int y)  //画球
{
	setcolor(RED);
	setfillcolor(RED);
	fillcircle(x, y, 3);
}

void moveball()  //控制上下
{

	if (GetAsyncKeyState('W') || GetAsyncKeyState(VK_UP))
	{
		ball.y -= 20;
	}
	if (GetAsyncKeyState('S') || GetAsyncKeyState(VK_DOWN))
	{
		ball.y += 20;
	}
}

void moveline1()  //线向前移动
{
	for (int i = 0; i < 25; i++)
	{
		l1ne[i].x -= 7;
		l2ne[i].x -= 7;
	}
}


void crash()  //判断碰撞
{
	int xx = ball.x;
	int yy = ball.y;
	for (int i = 0; i < 25; i++)
	{
		if ((abs(xx-l1ne[i].x) < 5  &&  yy-blank[i].y < 30 )
			|| (abs(xx - l2ne[i].x) < 5 && blank[i]._y-yy < 30 ) )
		{
			settextcolor(RED);
			settextstyle(50, 60, "Impact");
			outtextxy(65, 300, "LOSE!");
			settextcolor(RED);
			settextstyle(20, 10, "宋体");
			outtextxy(120, 400, "按空格键结束游戏");
			Sleep(2000);
			while (true)
			{
				FlushBatchDraw();
				Sleep(10);

				if (_kbhit())
				{
					if (_getch() == ' ')
					{
						closegraph();
					}
				}
			}
		}
	}
}


int main()
{
	initgraph(1040, 480);
	setbkcolor(WHITE);
	cleardevice();
	initline();
	initball();
	while (1)
	{
		BeginBatchDraw();
		cleardevice();
		draw();
		drawball(ball.x,ball.y);
		moveball();
		crash();
		Sleep(100);
		moveline1();
		EndBatchDraw();

	}
	

	_getch();

}

临时写的,手残且菜。。如有很多不足还请包容。。如果能评论给建议更好啦

对easyx感兴趣的小伙伴还可以看看之前写的赛车小游戏,里面的教程压缩包免费哦,拿走不谢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值