飛機大戰
以下是程序代碼的下載地址:https://download.csdn.net/detail/u010878441/6490515
好了,下麵就開始進行遊戲的總體設計
遊戲的界麵主要有三個界麵組成,分別為:遊戲開始前的準備界麵ReadyView,遊戲進行時的界麵MainView和遊戲結束時的界麵EndView。
界麵視圖分別如下:
因為JAVA編程是麵向對象的思想,所以我們要對遊戲中的對象進行抽象。該遊戲中的所有能夠移動的物體都可看做是一個對象,它們有共同的屬性和方法,如:橫坐標、縱坐標、寬度、高度、邏輯方法、繪圖方法等。因此我們把它們的所有共同的屬性和方法封裝成一個抽象的GameObject類,該類將會是遊戲中所有對象的父類。
GameObject類:
- /*遊戲對象類*/
- abstract public class GameObject {
- protected int currentFrame; // 當前動畫幀
- protected int speed; // 對象的速度
- protected float object_x; // 對象的橫坐標
- protected float object_y; // 對象的縱坐標
- protected float object_width; // 對象的寬度
- protected float object_height; // 對象的高度
- protected float screen_width; // 屏幕的寬度
- protected float screen_height; // 屏幕的高度
- protected boolean isAlive; // 判斷是否存活
- protected Paint paint; // 畫筆對象
- protected Resources resources; // 資源類
- // 構造函數
- public GameObject(Resources resources) {
- this.resources = resources;
- this.paint = new Paint();
- }
- // 設置屏幕寬度和高度
- public void setScreenWH(float screen_width, float screen_height) {
- this.screen_width = screen_width;
- this.screen_height = screen_height;
- }
- // 初始化數據//參數分別為:速度增加的倍數,x中心坐標,y中心坐標
- public void initial(int arg0,float arg1,float arg2){}
- // 初始化圖片資源的
- protected abstract void initBitmap();
- // 對象的繪圖方法
- public abstract void drawSelf(Canvas canvas);
- // 釋放資源的方法
- public abstract void release();
- // 檢測碰撞的方法
- public boolean isCollide(GameObject obj) {
- return true;
- }
- // 對象的邏輯方法
- public void logic(){}
- //getter和setter方法
- public int getSpeed(){
- return speed;
- }
- public void setSpeed(int speed){
- this.speed = speed;
- }
- public float getObject_x() {
- return object_x;
- }
- public void setObject_x(float object_x) {
- this.object_x = object_x;
- }
- public float getObject_y() {
- return object_y;
- }
- public void setObject_y(float object_y) {
- this.object_y = object_y;
- }
- public float getObject_width() {
- return object_width;
- }
- public void setObject_width(float object_width) {
- this.object_width = object_width;
- }
- public float getObject_height() {
- return object_height;
- }
- public void setObject_height(float object_height) {
- this.object_height = object_height;
- }
- public boolean isAlive() {
- return isAlive;
- }
- public void setAlive(boolean isAlive) {
- this.isAlive = isAlive;
- }
- }
接著我們要看下,遊戲中對象有玩家控製的飛機、小型的敵機、中型的敵機、大型的敵機、BOSS敵機、單發子彈、雙發子彈、BOSS的子彈、導彈物品和子彈物品。所以我們又可以將它們分成:玩家的飛機類(因為玩家飛機的實現和敵機的實現有些不同,所以分開實現)、敵機類EnemyPlane(包括小型的、中型的、大型的和BOSS)、子彈類Bullet和物品類GameGoods,這些遊戲對象類都是繼承GameObject類。
敵機類EnemyPlane:
- /*敵機類*/
- public class EnemyPlane extends GameObject{
- protected int score; // 對象的分值
- protected int blood; // 對象的當前血量
- protected int bloodVolume; <span style="white-space:pre"> </span> // 對象總的血量
- protected boolean isExplosion; // 判斷是否爆炸
- protected boolean isVisible; // 對象是否為可見狀態
- public EnemyPlane(Resources resources) {
- super(resources);
- // TODO Auto-generated constructor stub
- initBitmap(); // 初始化圖片資源
- }
- //初始化數據
- @Override
- public void initial(int arg0,float arg1,float arg2){
- }
- // 初始化圖片資源
- @Override
- public void initBitmap() {
- // TODO Auto-generated method stub
- }
- // 對象的繪圖函數
- @Override
- public void drawSelf(Canvas canvas) {
- // TODO Auto-generated method stub
- }
- // 釋放資源
- @Override
- public void release() {
- // TODO Auto-generated method stub
- }
- // 對象的邏輯函數
- @Override
- public void logic() {
- // TODO Auto-generated method stub
- }
- // 被攻擊的邏輯函數
- public void attacked(int harm) {
- // TODO Auto-generated method stub
- }
- // 檢測碰撞
- @Override
- public boolean isCollide(GameObject obj) {
- return true;
- }
- // 判斷能否被檢測碰撞
- public boolean isCanCollide() {
- // TODO Auto-generated method stub
- return false;
- }
- //getter和setter方法
- public int getScore() {
- // TODO Auto-generated method stub
- return score;
- }
- public void setScore(int score) {
- // TODO Auto-generated method stub
- this.score = score;
- }
- public int getBlood() {
- // TODO Auto-generated method stub
- return blood;
- }
- public void setBlood(int blood) {
- // TODO Auto-generated method stub
- this.blood = blood;
- }
- public int getBloodVolume() {
- // TODO Auto-generated method stub
- return bloodVolume;
- }
- public void setBloodVolume(int bloodVolume) {
- // TODO Auto-generated method stub
- this.bloodVolume = bloodVolume;
- }
- public boolean isExplosion() {
- // TODO Auto-generated method stub
- return isExplosion;
- }
- }
敵機類增加了分值、血量、兩個判斷標記屬性及其getter和setter方法。
子彈類Bullet:
- /*子彈基類*/
- public class Bullet extends GameObject{
- protected int harm;
- public Bullet(Resources resources) {
- super(resources);
- // TODO Auto-generated constructor stub
- initBitmap();
- }
- @Override
- protected void initBitmap() {
- // TODO Auto-generated method stub
- }
- @Override
- public void drawSelf(Canvas canvas) {
- // TODO Auto-generated method stub
- }
- @Override
- public void release() {
- // TODO Auto-generated method stub
- }
- // 檢測碰撞的方法
- @Override
- public boolean isCollide(GameObject obj) {
- return true;
- }
- //getter和setter方法
- public int getHarm() {
- // TODO Auto-generated method stub
- return harm;
- }
- public void setHarm(int harm) {
- // TODO Auto-generated method stub
- this.harm = harm;
- }
- }
子彈類增加了傷害值及其getter和setter方法。
物品類GameGoods:
- /*物品類*/
- public class GameGoods extends GameObject{
- protected Bitmap bmp;
- private int direction; //物品的方向
- public GameGoods(Resources resources) {
- super(resources);
- // TODO Auto-generated constructor stub
- initBitmap();
- }
- // 初始化數據
- @Override
- public void initial(int arg0,float arg1,float arg2){
- }
- // 初始化圖片資源的
- @Override
- protected void initBitmap() {
- // TODO Auto-generated method stub
- }
- // 對象的繪圖方法
- @Override
- public void drawSelf(Canvas canvas) {
- // TODO Auto-generated method stub
- }
- // 釋放資源的方法
- @Override
- public void release() {
- // TODO Auto-generated method stub
- }
- // 對象的邏輯函數
- @Override
- public void logic() {
- }
- // 檢測碰撞
- @Override
- public boolean isCollide(GameObject obj) { return false;
- <span style="white-space:pre"> </span>}
- }
玩家的飛機類除了繼承GameObject類以外,還要實現一個IMyPlane接口。
IMyPlane接口
- public interface IMyPlane {
- public float getMiddle_x();
- public void setMiddle_x(float middle_x);
- public float getMiddle_y();
- public void setMiddle_y(float middle_y);
- public boolean isChangeBullet();
- public void setChangeBullet(boolean isChangeBullet);
- //發射子彈的方法
- public void shoot(Canvas canvas,List<EnemyPlane> planes);
- //初始化子彈的方法
- public void initButtle();
- //更換子彈的方法
- public void changeButtle();
- }
玩家飛機類MyPlane:
- /*玩家飛機的類*/
- public class MyPlane extends GameObject implements IMyPlane{
- private float middle_x; // 飛機的中心坐標
- private float middle_y;
- private long startTime; // 開始的時間
- private long endTime; // 結束的時間
- private boolean isChangeBullet; // 標記更換了子彈
- private Bitmap myplane; // 飛機飛行時的圖片
- private Bitmap myplane2; // 飛機爆炸時的圖片
- private List<Bullet> bullets; // 子彈的序列
- private MainView mainView;
- private GameObjectFactory factory;
- public MyPlane(Resources resources) {
- super(resources);
- // TODO Auto-generated constructor stub
- }
- public void setMainView(MainView mainView) {
- this.mainView = mainView;
- }
- // 設置屏幕寬度和高度
- @Override
- public void setScreenWH(float screen_width, float screen_height) {
- }
- // 初始化圖片資源的
- @Override
- public void initBitmap() {
- // TODO Auto-generated method stub
- }
- // 對象的繪圖方法
- @Override
- public void drawSelf(Canvas canvas) {
- // TODO Auto-generated method stub
- }
- // 釋放資源的方法
- @Override
- public void release() {
- // TODO Auto-generated method stub
- }
- //發射子彈
- @Override
- public void shoot(Canvas canvas,List<EnemyPlane> planes) {
- // TODO Auto-generated method stub
- }
- //初始化子彈
- @Override
- public void initButtle() {
- // TODO Auto-generated method stub
- }
- //更換子彈
- @Override
- public void changeButtle() {
- // TODO Auto-generated method stub
- }
- //判斷子彈是否超時
- public void isBulletOverTime(){
- }
- //getter和setter方法
- public void setStartTime(long startTime) {
- this.startTime = startTime;
- }
- @Override
- public boolean isChangeBullet() {
- return isChangeBullet;
- }
- @Override
- public void setChangeBullet(boolean isChangeBullet) {
- this.isChangeBullet = isChangeBullet;
- }
- @Override
- public float getMiddle_x() {
- return middle_x;
- }
- @Override
- public void setMiddle_x(float middle_x) {
- this.middle_x = middle_x;
- this.object_x = middle_x - object_width/2;
- }
- @Override
- public float getMiddle_y() {
- return middle_y;
- }
- @Override
- public void setMiddle_y(float middle_y) {
- this.middle_y = middle_y;
- this.object_y = middle_y - object_height/2;
- }
- }
android遊戲開發——微信打飛機(二):
https://blog.csdn.net/u010878441/article/details/12564871
最後更新:2017-04-03 08:26:14