;//定義圖形變數陣列
initgraph
(288
,624);
//構建乙個寬288,高624的視窗
loadimage
(&bj[0]
,"名稱");
//將賦給圖形變數,就相當於給起乙個名字
loadimage
(&bj[1]
,"名稱");
putimage(0
,0,&bg[0]
);//在0,0的位置貼上
putimage(0
,512
,&bg[1]
);因為我使用的素材是天空與地面分開的背景圖,所以這裡貼了2次。
接著便是貼小鳥和柱子的了,但是與貼背景圖不同的是這裡的小鳥和柱子並不是乙個規則的圖形,所以我們採用透明貼圖技術將小鳥和柱子貼上去。具體方法可以參考下面這篇文章。
因為柱子的高度是隨機而且成對出現的,我們需要乙個隨機數去模擬上面柱子及下面柱子的高度,我們使用結構體的方法去寫柱子。
//下面的x,y都指其所在視窗的位置
//定義小鳥的結構體
struct
huoyin
;struct
huoyin hero =
;//三對柱子的結構體
struct
walls
;struct
walls pillar[3]
;void
pillars
(struct
walls pillar,
int i)
//貼柱子
void
drawwall
(struct
walls nowpillar)
//以時間為種子構建隨機函式
#include
//需要的標頭檔案
srand
(time
(null))
;//移動柱子
for(
int i =
0; i <
3; i++
)//柱子的初始化
for(
int i =
0; i <
3; i++
)//不斷創造新的柱子
for(
int i =
0; i <
3; i++
)}
介紹一下在貼柱子使用的putimage(x,y,width,height,&image,xx,yy),是從(&image)的x,y座標擷取width寬與height高貼在視窗的xx,yy座標上。
#
include
#pragma
comment
(lib,
"winmm.lib"
)dword winapi playmusic
(lpvoid lpvoid)
接著就要實現使用空格讓小鳥彈跳了。
//按鍵響應
void
keydown()
}
//判斷遊戲是否結束
intovers()
else
return0;
}}
//遊戲結束動畫
void
overmovies()
}
#
include
#include
#include
#include
#include
#pragma
comment
(lib,
"winmm.lib"
)//背景圖\小鳥圖\遊戲結束圖\柱子圖
image bg[2]
,bird[2]
[3],end[2]
,wall[4]
;//定義小鳥的結構體
struct
huoyin
;struct
huoyin hero =
;//三對柱子的結構體
struct
walls
;struct
walls pillar[3]
;void
pillars
(struct
walls pillar,
int i)
//批量載入資源(給資料夾裡的命名)
void
jiazai()
//透明貼圖(掩碼圖加原圖)
/*void drawhero()
*///貼柱子*****
void
drawwall
(struct
walls nowpillar)
dword winapi playmusic
(lpvoid lpvoid)
//按鍵響應
void
keydown()
}//判斷遊戲是否結束
intovers()
else
return0;
}}//遊戲結束動畫
void
overmovies()
}int
main()
initgraph
(288
,624);
for(
int num =
0; num <
3; num++)if
(overs()
)break
;//不斷創造新的柱子
for(
int i =
0; i <
3; i++)}
if(overs()
)break
; += 20;if(
overs()
)break;if
(_kbhit()
)if(num ==
2)num =0;
sleep
(100);
}sleep
(240);
overmovies()
;_getch()
;closegraph()
;system
("pause");
return0;
}
因為我還給小鳥做了扇動翅膀的動畫,所以這個for (int num = 0; num < 3; num++)迴圈是載入鳥的三張。
由於有小夥伴找反映不到對應的素材,所以我將素材也放在網盤上分享了
提取碼:1234
還有 3d 模型、貼圖、音效等素材。就是國外**,訪問速度有點慢。
這是第一次在csdn上寫文章,如有不妥之處還請多多包涵。
用C語言實現FlappyBird
在開始遊戲之前,我們先了解一些輔助函式 void gotoxy int x,int y 將游標調整到 x,y 的位置 void hidecursor 隱藏游標 setconsolecursorinfo getstdhandle std output handle cursor info 我們使用乙個...
C語言實現memcpy
memcpy和memmove都是c語言中的庫函式,在標頭檔案string.h中,作用是拷貝一定長度的記憶體的內容,他們的作用是一樣的,唯一的區別是,當記憶體發生區域性重疊 的時候,memmove保證拷貝的結果是正確的,memcpy不保證拷貝的結果的正確。程式設計師面試寶典中有例題 對應的原型如下 v...
C語言實現多型
c 中的多型是指 通過基類物件的指標或者基類物件的引用呼叫虛函式 表現更多派生類的特性,但根據c 多型的實現,我們發現這種方法存在一定的空間和效率的折損。不可否認,多型輕鬆解決了很多任務程中遇到的問題,這與 pure c 的解決方法比起來,更為優雅。在考慮移植性上,c 的光芒要蓋過 c 但 c 的多...