基于easyx低配版flappybird
生活随笔
收集整理的這篇文章主要介紹了
基于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;} }判斷碰撞
此處建議自己精化一下,這個不太嚴謹
效果大概是這樣的
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感興趣的小伙伴還可以看看之前寫的賽車小游戲,里面的教程壓縮包免費哦,拿走不謝~
總結
以上是生活随笔為你收集整理的基于easyx低配版flappybird的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: youtube-dl 环境搭建 使用
- 下一篇: 首次适应算法 C语言实现