原創 雷電小遊戲app設計

2021-10-08 23:14:23 字數 2463 閱讀 5315

相信雷電是很多人的童年回憶,本文就嘗試用android studio做乙個簡單的雷電小遊戲。

遊戲介面如下:

專案結構如下:

遊戲目前的場景比較簡單,為我軍飛機對戰敵軍boss飛機。我軍飛機目前只有普通子彈攻擊一種方式,我軍飛機的移動方式為手指在螢幕上移動控制。為了增加遊戲難度,為敵軍飛機設計了三種攻擊模式:

1)boss飛機滿血量為1000.當boss飛機血量大於600時,boss飛機會左右移動,對我軍飛機進行規律地雷射攻擊;

2)boss飛機血量在[300,600]之間時,boss飛機移動會加速,會左右移動,追蹤我軍飛機並進行向無規律地雷射攻擊;

3)boss飛機血量小於300時,會啟動死亡撞擊模式,一邊攻擊,一邊試圖撞擊我軍飛機。死亡撞擊演示gif如下:

敵軍飛機被擊毀後,會掉落物品,遊戲中設計了小水晶作為掉落物品,我軍飛機獲取後處於無敵狀態,被光罩籠罩。為後續的設計做鋪墊。

總結發現,在上述場景中,出現了飛機、掉落物品、子彈、**效果等概念,將其抽象為類。

工程部分uml圖如下:

飛機和敵機相撞,會導致我軍飛機被擊毀,另外飛機獲取物品時也要做碰撞檢測、子彈擊中飛機時,還是要做碰撞檢測。這些邏輯有共通之處,可以抽出乙個公共的類,具有檢測碰撞的公共方法。這樣就避免了在**到處去寫和修改碰撞的邏輯。該公共類如下:

package com.example.demonstar.common;

import android.content.context;

import android.graphics.bitmap;

public class commonobject

public commonobject(context context, int positionx, int positiony)

public boolean iscollided(commonobject object)

protected boolean detectcollision(commonobject object)

if (isvertexinarea(this.positionx, this.positiony, object))

if (isvertexinarea(this.positionx + this.skin.getwidth(), this.positiony, object))

if (isvertexinarea(this.positionx, this.positiony + this.skin.getheight(), object))

if (isvertexinarea(this.positionx + this.skin.getwidth(), this.positiony + this.skin.getheight(), object))

return false;

}protected boolean isvertexinarea(int abscissa, int ordinate, commonobject object)

protected boolean isabscissainrange(int abscissa, commonobject object)

protected boolean isordinateinrange(int ordinate, commonobject object)

public int getpositionx()

public void setpositionx(int positionx)

public int getpositiony()

public void setpositiony(int positiony)

public bitmap getskin()

public void setskin(bitmap skin)

public context getcontext()

public void setcontext(context context)

}​

iscollided(commonobject object)就是檢測碰撞的公共方法。

以上圖來說明一下碰撞檢測的邏輯:

飛機總是需要乙個原始去繪製到畫布上的,碰撞檢測實際上是在檢測之間有無重疊。考慮我軍飛機進入敵機區域的情形:當我軍飛機點陣圖的任意乙個頂點位於abcd的範圍時,即可認為檢測到碰撞的發生。敵機進入我軍飛機hijk區域時,同樣也會發生碰撞。

雷電遊戲設計思路

雷電遊戲 1 物件導向 敵人飛機,子彈,自己,都有座標 移動 血量等屬性,定義乙個抽象類,飛機等子類都繼承於他。2 將所有需要用到的和聲音等,都放在乙個util類中,方便更改,都宣告為static靜態屬性,這樣可以通過類名直接呼叫,通過構造方法來對其賦值,這樣遊戲開始時只需要呼叫一次構造方法,即只生...

c c 設計2048小遊戲

相信很多剛學程式設計的小夥伴在有了一定知識儲備後手開始癢癢了,是不是等著寫出人生第乙個2048呢 下面就由同是初學者的我給大家分享乙個簡單2048遊戲 首先,我們需要乙個4乘4二維陣列來儲存每個格仔的數字,然後需要乙個列印數字的函式,接下來就是玩家操作了,所以我們還需要乙個能夠上下左右滑動的函式,那...

小遊戲 簡易版寶可夢 原創

精靈寶可夢大家都有印象吧,耗時一星期做的第一版,話不多說,直接上 include include include include include include include include include using namespace std int w 100 int dx 50 10 dg...