1. 程式人生 > 實用技巧 >C/C++程式設計筆記:飛翔的小鳥(Flappy Bird)——C語言版本

C/C++程式設計筆記:飛翔的小鳥(Flappy Bird)——C語言版本

C語言遊戲教學專案,有C基礎和對小遊戲感興趣的可以看看,做出來成就感爆棚~

使用的編譯器是VS2013,圖片素材,可以自己百度尋找素材圖片,也可以在文章最後領取哦~

效果圖:

話不多說,接下來就奉上我們的原始碼了(寫的時候包含了一些筆者的註釋,勿怪勿怪):

    /*

    1.建立一個視覺化視窗

    2.顯示一張背景圖

    */

    #include <graphics.h>

    #include <stdlib.h>

    #include <conio.h>

    #include <stdio.h>

    #include 
<time.h> #include <mmsystem.h> #pragma comment(lib,"winmm.lib") /* stdlib.h : Sleep stdio.h : C語言標頭檔案 conio.h : _getch() graphics.h: 圖形庫標頭檔案 寫的時候報錯,需要安裝 */ int main() { //288*608 srand((unsigned int)time(NULL)); initgraph(
288, 608); struct 柱子 pillar[3]; for (int i = 0; i < 3; i++) { initPillar(pillar, i); //讓柱子之間有差距 pillar[i].x = 288 + i * 150; } loadResource(); while (1) { putimage(0, 0, &background); drawBird(flyBird.x, flyBird.y); flyBird.y += 10;
for (int i = 0; i < 3; i++) { pillar[i].x -= 10; if (pillar[i].x < (-52 - 150)) { initPillar(pillar, i); } } for (int i = 0; i < 3; i++) { drawPillar(pillar[i]); } //一定要先判斷按鍵是否按下 if (_kbhit()) { keyDown(); } if (hitFloor()) { actionGameOver(); break; } Sleep(50); } closegraph(); return 0; } IMAGE background; IMAGE myBird[2]; //鳥有兩張 myBird[0] myBird[1] IMAGE overImg[2]; IMAGE down[2]; IMAGE up[2]; //鳥的屬性 struct 鳥 { int x; int y; int speed; //上跳速度 }; struct 鳥 flyBird = { 124, 0, 100 }; struct 柱子 { int x; //上面柱子的起始座標 int y; int h; //上面柱子顯示的高度 }; //載入資源 void loadResource() { loadimage(&background, "background.bmp"); loadimage(&myBird[0], "birdy.bmp", 48, 48); loadimage(&myBird[1], "bird.bmp", 48, 48); loadimage(&overImg[0], "endy.bmp"); loadimage(&overImg[1], "end.bmp"); loadimage(&down[0], "downy.bmp"); loadimage(&down[1], "down.bmp"); loadimage(&up[0], "upy.bmp"); loadimage(&up[1], "up.bmp"); } //畫鳥--->透明貼圖技術 void drawBird(int x, int y) { //SRCAND方式貼掩碼圖 putimage(x, y, &myBird[0], SRCAND); //SRCPAINT 方式貼背景圖 putimage(x, y, &myBird[1], SRCPAINT); } //多執行緒 DWORD WINAPI playMusic(LPVOID lpParamer) { mciSendString("open jump.mp3", 0, 0, 0); mciSendString("play jump.mp3 wait", 0, 0, 0); mciSendString("close jump.mp3", 0, 0, 0); return 0; } //應用技術-->所有程式設計行業通用 //沒有學的同學,想辦法去拓展一下 //併發程式設計,網路程式設計,資料庫程式設計 //鳥的按鍵處理 void keyDown() { /* mciSendString("指令",0,0,0); 指令: open:開啟 play:播放 pause:暫停 wait:等待 stop:停止 close:關閉 */ char userKey = _getch(); //_getch(); switch (userKey) { case ' ': flyBird.y -= flyBird.speed; CreateThread(NULL, NULL, playMusic, NULL, NULL, NULL); break; default: break; } } int hitFloor() { if (flyBird.y <= 0 || flyBird.y >= (608 - 96)) return 1; return 0; } void actionGameOver() { //結束圖片初始位置 int x = 50; int y = 608; while (y >= 240) { putimage(0, 0, &background); putimage(x, y, &overImg[0], SRCAND); putimage(x, y, &overImg[1], SRCPAINT); y -= 50; Sleep(50); } Sleep(5000); } void initPillar(struct 柱子 pillar[], int i) { pillar[i].h = rand() % 100 + 160; //[160,259]; pillar[i].x = 288; pillar[i].y = 0; } void drawPillar(struct 柱子 pillar) { //上面的柱子 putimage(pillar.x, 0, 52, pillar.h, &down[0], 0, 320 - pillar.h, SRCAND); putimage(pillar.x, 0, 52, pillar.h, &down[1], 0, 320 - pillar.h, SRCPAINT); //下面那根柱子 putimage(pillar.x, 512 - (320 - pillar.h), 52, 320 - pillar.h, &up[0], 0, 0, SRCAND); putimage(pillar.x, 512 - (320 - pillar.h), 52, 320 - pillar.h, &up[1], 0, 0, SRCPAINT); }

//小作業:

//碰上面柱子的求解

//碰下面柱子的柱子

最後呢,筆者將剩下了這兩部分原始碼給去掉了,目的想必大家也知道,可不要直接照著原始碼敲,而不自己去理解哦!你們應該學著自己去理解這個小遊戲,然後呢,自己寫出剩下的部分哦!希望我們能夠在學習C語言C++的路上越走越遠,共勉!

自學C/C++程式設計難度很大,不妨和一些志同道合的小夥伴一起學習成長!

C語言C++程式設計學習交流圈子,【點選進入微信公眾號:C語言程式設計學習基地

有一些原始碼和資料分享,歡迎轉行也學習程式設計的夥伴,和大家一起交流成長會比自己琢磨更快哦!