這篇文章主要為大家詳細介紹了C語言實現——《飛翔的小鳥項目》文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小夥伴們可以參考一下!
遊戲介紹:
《Flappy Bird》其實是曾經流行的一款手機遊戲,你隻要讓小鳥保持飛行,不要碰到綠色的管道就可以啦。操作雖然簡單,但是非常具有挑戰哦,不信就來試試吧!
遊戲的目标是讓小鳥穿過管子,不要碰到任何物體,挑戰更遠距離!操作隻需要控制方向鍵,讓我們的小鳥不碰到柱子即可。
玩法簡單,容易上手!所以這也成為了我們編程學習者C語言練習的一個非常好的小項目,如果你沒有玩過的話那麼可以先去玩一下的,會玩的話對于項目邏輯的理解也是非常有幫助的!接下來就讓我們一起來看看吧!
插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;
效果圖展示:
配套講解教程:飛翔的小鳥遊戲教程——哔哩哔哩
源代碼示例:
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
/*************************************************
數據設計
**************************************************/
IMAGE background;
IMAGE bigBird[2]; //bigBird[0] bigBird[1];
IMAGE endImg[2];
IMAGE down[2];
IMAGE up[2];
HWND hwnd;
//C語言結構體
struct bird
{
int x; //鳥的x和y坐标
int y;
int speed; //鳥的速度
};
struct bird myBird = { 120, 10, 100 };
//加載資源:把圖片和變量綁定一起
void loadResource()
{
loadimage(&background, "background.bmp");
loadimage(&bigBird[0], "birdy.bmp",48,48);
loadimage(&bigBird[1], "bird.bmp",48,48);
loadimage(&endImg[0], "endy.bmp");
loadimage(&endImg[1], "end.bmp");
loadimage(&down[0], "downy.bmp");
loadimage(&down[1], "down.bmp");
loadimage(&up[0], "upy.bmp");
loadimage(&up[1], "up.bmp");
}
/**************************************************
鳥的模塊
1.繪制鳥的過程
2.按鍵操作控制鳥的過程
3.音樂部分---多線程
***************************************************/
//繪制鳥的過程
void drawBigBird(int x, int y)
{
putimage(x, y, &bigBird[0], SRCAND);
putimage(x, y, &bigBird[1], SRCPAINT);
}
//線程處理函數--->C語言中函數指針
DWORD WINAPI playMusic(LPVOID pVoid)
{
mciSendString("open jump.mp3", 0, 0, 0);
mciSendString("play jump.mp3 wait", 0, 0, 0);
mciSendString("close jump.mp3", 0, 0, 0);
return 0;
}
/****************************************************
通用性技術:
1.并發編程
2.網絡編程
3.數據庫編程
*****************************************************/
//按鍵交互
void keyDown()
{
char userKey = '\0';
userKey = _getch();
//暫停功能
if (userKey == ' ')
{
while (_getch() != ' ');
}
switch (userKey)
{
case 72: //小鍵盤
myBird.y -= myBird.speed;
CreateThread(NULL, NULL, playMusic, NULL, NULL, NULL);
break;
default: //其他按鍵
break;
}
}
//碰地闆和上邊界處理
int hitFloor()
{
if (myBird.y <= 0 || myBird.y >= (512 - 48))
return 1;
return 0;
}
//結束動畫
void gameOverAction()
{
int x = 60;
int y = 608;
while (y >= 240)
{
putimage(0, 0, &background);
putimage(x, y, &endImg[0], SRCAND);
putimage(x, y, &endImg[1], SRCPAINT);
y -= 50;
Sleep(50);
}
MessageBox(hwnd, "GameOver!You die!!","over", MB_OK);
}
/******************************************************
柱子部分
1.畫柱子
2.初始化柱子
3.移動柱子
******************************************************/
struct pillar
{
//上面柱子的屬性
int x;
int y;
int h;
//能夠推出下面柱子的屬性:
//Height-h;
};
struct pillar 柱子[3];
//初始化做完
void initPillar(struct pillar 柱子[], int i)
{
柱子[i].h = rand() % 100 160;
柱子[i].y = 0;
柱子[i].x = 288;
}
void drawPillar(struct pillar 柱子)
{
//上面的柱子
putimage(柱子.x, 0, 52, 柱子.h, &down[0], 0, 320 - 柱子.h, SRCAND);
putimage(柱子.x, 0, 52, 柱子.h, &down[1], 0, 320 - 柱子.h, SRCPAINT);
//下面的柱子
putimage(柱子.x, 512-(320-柱子.h), 52, 320-柱子.h, &up[0], 0, 0, SRCAND);
putimage(柱子.x, 512 - (320 - 柱子.h), 52, 320 - 柱子.h, &up[1], 0, 0, SRCPAINT);
}
//通用性 重用性
/*************************************************
入口函數
**************************************************/
int main()
{
srand((unsigned int)time(NULL));
loadResource();
//1.創建窗口
hwnd=initgraph(288, 608);
//描述自由落體
for (int i = 0; i < 3; i )
{
initPillar(柱子, i);
柱子[i].x = 288 i * 150;
}
while (1)
{
putimage(0, 0, &background);
drawBigBird(myBird.x, myBird.y);
for (int i = 0; i < 3; i )
{
柱子[i].x -= 10;
if (柱子[i].x < (-52 - 150))
{
initPillar(柱子, i);
}
}
for (int i = 0; i < 3; i )
{
drawPillar(柱子[i]);
}
if (hitFloor())
{
gameOverAction();
break;
}
myBird.y = 10;
//隻有有按鍵才處理,沒有按鍵不能處理
//kbhit():存在按鍵返回非零值
if (_kbhit())
{
keyDown();
}
Sleep(50); //延時函數
}
_getch(); //等待用戶按鍵
//2.關閉窗口
closegraph();
return 0;
}
未完成的部分功能代碼,大家也可以自己先去想想試試,每一次的思考就是你進步的過程!
如果學習的過程中有什麼問題,以及本項目有什麼不懂的地方,都可以來找我交流,我來幫你!
那麼今天的分享就到這裡了,後續會更新更多精彩項目或者知識内容的,大家要好好學C語言C 喲~
寫在最後:對于準備學習C/C 編程的小夥伴,如果你想更好的提升你的編程核心能力(内功)不妨從現在開始!
編程學習書籍分享:
編程學習視頻分享:
整理分享(多年學習的源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
對于C/C 感興趣可以關注小編在後台私信我:【編程交流】一起來學習哦!可以領取一些C/C 的項目學習視頻資料哦!已經設置好了關鍵詞自動回複,自動領取就好了!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!