又更了~(我真勤快。。。
就是一个基于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感兴趣的小伙伴还可以看看之前写的赛车小游戏,里面的教程压缩包免费哦,拿走不谢~