
《雷霆戰機》是以太空科幻世界觀,12星座關卡模式和彈幕聯袂上演掌上“星球大戰”,百種戰機,千種彈幕,酷炫裝備,強勁暴走,演繹別樣星海激情,在繼承了經典飛行射擊游戲爽快體驗的同時,更添加了革命性的創新玩法,引爆了全世界玩家的打飛機熱情!

雷霆戰機
我們今天就來模仿《雷霆戰機》創造出屬于我們自己的飛機大戰
直接開始吧
首先定義飛機和子彈結構體
//1.定義資料
#define WIDTH 591
#define HEIGHT 864
IMAGE backimg; //定義背景資料
bool isplay; //定義音樂資料
//定義自己的飛機
struct Plane {
int x, y; //坐標
int w, h; //圖片的寬度 和 高度
bool isExist; //是否存在
IMAGE img[2]; //圖片
}myplane;
//子彈
IMAGE bimg[2];
struct Bullet {
int x, y;
bool isExist; //是否存在
}bullet[15]; //10個
IMAGE eimg[2];
unsigned long t1, t2;
struct Enemy {
int x, y;
bool isExist; //是否存在
int vy; //速度
}enemy[15]; //10個
游戲進行初始化
//2.初始化
void GameInit() {
//加載圖片
loadimage(&backimg, "images/background.jpg", WIDTH, HEIGHT);
//播放背景音樂
mciSendString("open images/backmusic.mp3",0,0,0);
mciSendString("play images/backmusic.mp3", 0, 0, 0);
isplay = true; //正在播放
//初始化自己的飛機
myplane.w = 94;
myplane.h = 107;
loadimage(&myplane.img[0], "images/plane0.jpg");
loadimage(&myplane.img[1], "images/plane1.jpg");
myplane.x = (WIDTH- myplane.w)/2;
myplane.y = HEIGHT - myplane.h;
myplane.isExist = true;
//初始化自己的子彈 9 21
loadimage(&bimg[0], "images/bullet0.jpg");
loadimage(&bimg[1], "images/bullet1.jpg");
for (int i = 0; i < 15; i++)
bullet[i].isExist = false;
loadimage(&eimg[0], "images/enemy0.jpg");
loadimage(&eimg[1], "images/enemy1.jpg");
for (int i = 0; i < 15; i++)
{
enemy[i].isExist = false;
if (rand() % 2 == 0)
enemy[i].vy = 1;
else
enemy[i].vy = 2;
}
t1 = GetTickCount();
}
繪制游戲背景
//3.繪制
void GameDraw() {
BeginBatchDraw();
//繪制背景圖片
putimage(0, 0, &backimg);
//繪制自己的飛機
if (myplane.isExist) { //如果自己的飛機是存在的
putimage(myplane.x, myplane.y, &myplane.img[0], SRCPAINT);
putimage(myplane.x, myplane.y, &myplane.img[1], SRCAND);
}
//繪制自己的子彈
for (int i = 0; i < 15; i++) {
if (bullet[i].isExist) { //存在的子彈
putimage(bullet[i].x, bullet[i].y, &bimg[0], SRCPAINT);
putimage(bullet[i].x, bullet[i].y, &bimg[1], SRCAND);
}
}
for (int i = 0; i < 15; i++) {
if (enemy[i].isExist) { //存在的子彈
putimage(enemy[i].x, enemy[i].y, &eimg[0], SRCPAINT);
putimage(enemy[i].x, enemy[i].y, &eimg[1], SRCAND);
}
}
EndBatchDraw();
}
游戲資料的更新
//4.資料的更新
void GameUpdate() {
//非阻塞的 絲滑的
if (GetAsyncKeyState(VK_UP)) myplane.y--;
if (GetAsyncKeyState(VK_DOWN)) myplane.y++;
if (GetAsyncKeyState(VK_LEFT)) myplane.x--;
if (GetAsyncKeyState(VK_RIGHT)) myplane.x++;
//按下某一個鍵的時候
char key=' ';
if (_kbhit()) { //檢測按鍵
key = _getch(); //接收按鍵
if (key == '1'){
if(isplay)
mciSendString("pause images/backmusic.mp3", 0, 0, 0);
else
mciSendString("play images/backmusic.mp3", 0, 0, 0);
isplay = !isplay;
}
else if (key == 32) //空格產生一個子彈
{
PlaySound("images/shoot.wav", NULL, SND_ASYNC | SND_FILENAME);
for (int i = 0; i < 15; i++) {
if (!bullet[i].isExist) //找到一個不存在的 100 50
{
bullet[i].x = myplane.x + (myplane.w - 9) / 2; //自己的飛機
bullet[i].y = myplane.y - 21;
bullet[i].isExist = true;
break;
}
}
}
}
//子彈自己移動
for (int i = 0; i < 15; i++) {
if (bullet[i].isExist)
{
bullet[i].y -= 2;
if (bullet[i].y < 0) //飛出去
bullet[i].isExist = false;
}
}
for (int i = 0; i < 15; i++) {
if (enemy[i].isExist)
{
enemy[i].y += enemy[i].vy;
if (enemy[i].y > HEIGHT) //飛出去
enemy[i].isExist = false;
}
}
t2 = GetTickCount();
if (t2 - t1 > 500)
{
//產生一個敵機
for (int i = 0; i < 15; i++)
if (!enemy[i].isExist) //找到一個不存在的 100 50
{
enemy[i].x = rand()%(HEIGHT-46); //自己的飛機
enemy[i].y = -33;
enemy[i].isExist = true;
break;
}
t1 = t2;
}
//子彈碰撞敵機 子彈消失 敵機消失
//陣列 敵機
for (int i = 0; i < 15; i++) //遍歷子彈
{
if (bullet[i].isExist) { //找到存在的子彈
for (int j = 0; j < 15; j++) //遍歷敵機
{
if (enemy[j].isExist) {
if (bullet[i].x+9>=enemy[j].x&&
bullet[i].x<= enemy[j].x+46&&
bullet[i].y + 21 >= enemy[j].y&&
bullet[i].y <= enemy[j].y+33) //判斷子彈和敵機有沒有發生碰撞
{
bullet[i].isExist = false;
enemy[j].isExist = false;
}
}
}
}
}
}
最后用主函式進行呼叫
int main(){
initgraph(WIDTH, HEIGHT);
GameInit(); //初始化資料
//游戲的程序
while (1){
GameDraw(); //不斷繪制界面
GameUpdate(); //資料也是不斷更新
Sleep(2);
}
return 0;
}
這樣我們自己的《雷霆戰機》就完成了,快去自己動手嘗試一下叭!!!
有什么問題可以回帖留言,我盡量回答,想要C/C++學習資料以及其他專案的原始碼的可以加群【1083227756】了解,想要對程式員的未來發展有興趣的也可加群閑聊,也可以關注微信公眾號:【狐貍的編碼時光】,希望和大家一起學習進步!!!
點擊下方鏈接更快拿到學習資料以及專案原始碼
https://jq.qq.com/?_wv=1027&k=JLh5Pqgc
https://jq.qq.com/?_wv=1027&k=JLh5Pqgc
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/343101.html
標籤:其他
