Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發之打地鼠(二、游戲設計和主界面設計)

Android游戲開發之打地鼠(二、游戲設計和主界面設計)

編輯:Android游戲開發

  游戲設計思路:

  主界面點擊開始游戲:進入打地鼠界面游戲中有12個地洞,游戲時間為30s(可以自己設置),每0.5s會有地鼠隨機出現在一個地洞中,玩家觸摸屏幕,打到地鼠加10分,否則不加分。30s後游戲結束,彈出窗口顯示獲得分數,需要玩家輸入姓名後,點擊確定保存到本地數據庫中。

  設計實現:每個地洞為一個ImageButton,開始設置背景為地洞圖片,地鼠出現則設置為地鼠圖片,給每個按鈕添加點擊事件,當玩家點擊按鈕時,如果打到地鼠,該按鈕設置打中地鼠圖片,否則設置沒打中地鼠的圖片。游戲結束開啟記錄窗口,記錄玩家信息。

  主界面點擊排行榜:如果沒有記錄,提示暫無排行,有記錄就跳轉界面,按分數從高到低顯示玩家信息。

  設計實現:通過對數據庫的查詢操作,返回一個ArrayList,如果ArrayList長度為0,則提示“暫無排行”,否則開啟一個新的Activity顯示玩家信息。

  主界面點擊關於:顯示游戲的相關信息。

  設計實現:Activity跳轉。

  主界面點擊退出:游戲退出

  設計實現:調用finish()函數。

  主界面點擊音樂圖標:游戲打開默認播放音樂,點擊圖標背景音樂和音效會關閉,再次點擊會播放背景音樂和音效。

  設計實現:一個ToggleButton(開關按鈕)背景設置成音樂圖標,點擊會觸發響應事件。

  按物理返回鍵游戲停止,在onDestroy()方法中做釋放資源等操作。

  注:游戲中所寫的Activity繼承BaseActivity,自己實現的一個繼承Activity的類。那麼為什麼要實現這麼一個類呢?在游戲的後期添加音效時,程序進入後台,背景音樂會一直播放,因為背景音樂在所有的Activity中都會播放,所以要在每個Activity的生命周期的回調函數中對音樂操作無疑是比較麻煩的,所以繼承自一個我們自己實現的BaseActivity,只需要在BaseActivity中來操作即可。

  BaseActivity的代碼如下:

Java代碼
  1. package cn.com.cyj.mouse.ui;    
  2.     
  3. import android.app.Activity;    
  4. import android.os.Bundle;    
  5.     
  6. /**  
  7.  *   
  8.  * @author cyj  
  9.  *   
  10.  */    
  11. public class BaseActivity extends Activity {    
  12.     // 音樂播放標記    
  13.     protected Boolean isLive = false;    
  14.     
  15.     @Override    
  16.     protected void onCreate(Bundle savedInstanceState) {    
  17.         super.onCreate(savedInstanceState);    
  18.     }    
  19.     
  20.     @Override    
  21.     protected void onResume() {    
  22.         super.onResume();    
  23.         // 如果進入後台前音樂是播放的,進入前台時繼續播放    
  24.         if (isLive) {    
  25.             MouseStart.controller.continuePlay();    
  26.         }    
  27.     }    
  28.     // 進入後台時系統調用    
  29.     @Override    
  30.     protected void onUserLeaveHint() {    
  31.         super.onUserLeaveHint();    
  32.         // 如果音樂在播放就暫停    
  33.         if (MouseStart.controller.isPlay()) {    
  34.             MouseStart.controller.pauseMusic();    
  35.             isLive = true;    
  36.         } else {    
  37.             isLive = false;    
  38.         }    
  39.     }    
  40. }    

       主界面代碼如下:

Java代碼
  1. package cn.com.cyj.mouse.ui;    
  2.     
  3. import android.content.Intent;    
  4. import android.os.Bundle;    
  5. import android.view.MotionEvent;    
  6. import android.view.View;    
  7. import android.view.View.OnClickListener;    
  8. import android.view.View.OnTouchListener;    
  9. import android.widget.ImageButton;    
  10. import android.widget.Toast;    
  11. import android.widget.ToggleButton;    
  12. import cn.com.cyj.mouse.R;    
  13. import cn.com.cyj.mouse.controller.Controller;    
  14. import cn.com.cyj.mouse.services.GameRun;    
  15.     
  16. /**  
  17.  * 游戲主界面  
  18.  *   
  19.  * @author cyj  
  20.  *   
  21.  */    
  22. public class MouseStart extends BaseActivity {    
  23.     // 開始游戲按鈕    
  24.     ImageButton start;    
  25.     // 排行榜按鈕    
  26.     ImageButton rank;    
  27.     // 關於按鈕    
  28.     ImageButton about;    
  29.     // 退出按鈕    
  30.     ImageButton exit;    
  31.     // 音樂開關    
  32.     ToggleButton music;    
  33.     Intent intent;    
  34.     // 只有能一個controller定義成靜態共別的Activity調用,之前在BaseActivity創建controller的對象每個子類都會有一個controller,出現問題    
  35.     public static Controller controller;    
  36.     
  37.     @Override    
  38.     protected void onCreate(Bundle savedInstanceState) {    
  39.         super.onCreate(savedInstanceState);    
  40.         setContentView(R.layout.activity_gamestart);    
  41.         controller = new Controller(this);    
  42.         /*  
  43.          * 初始化各個按鈕  
  44.          */    
  45.         start = (ImageButton) findViewById(R.id.startgame);    
  46.         rank = (ImageButton) findViewById(R.id.rank);    
  47.         about = (ImageButton) findViewById(R.id.about);    
  48.         exit = (ImageButton) findViewById(R.id.exit);    
  49.         music = (ToggleButton) findViewById(R.id.musical);    
  50.         /*  
  51.          * 給每個按鈕添加點擊事件  
  52.          */    
  53.         GameStartOnClick game = new GameStartOnClick();    
  54.         start.setOnClickListener(game);    
  55.         start.setOnTouchListener(game);    
  56.         rank.setOnClickListener(game);    
  57.         rank.setOnTouchListener(game);    
  58.         about.setOnClickListener(game);    
  59.         about.setOnTouchListener(game);    
  60.         exit.setOnClickListener(game);    
  61.         exit.setOnTouchListener(game);    
  62.         music.setOnClickListener(game);    
  63.         // 游戲開啟默認播放背景音樂    
  64.         controller.play();    
  65.     }    
  66.     
  67.     class GameStartOnClick implements OnClickListener, OnTouchListener {    
  68.     
  69.         @Override    
  70.         public void onClick(View v) {    
  71.             int id = v.getId();    
  72.             switch (id) {    
  73.             case R.id.startgame:    
  74.                 // 進入開始游戲Activity    
  75.                 intent = new Intent(MouseStart.this, GameRun.class);    
  76.                 intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);    
  77.                 MouseStart.this.startActivity(intent);    
  78.                 break;    
  79.             case R.id.rank:    
  80.                 // 通過控制類對象查詢全部玩家信息    
  81.                 if (!controller.query()) {    
  82.                     Toast.makeText(MouseStart.this, "暫無排行", Toast.LENGTH_SHORT)    
  83.                             .show();    
  84.                 }    
  85.                 break;    
  86.             case R.id.about:    
  87.                 // 打開關於Activity    
  88.                 intent = new Intent(MouseStart.this, About.class);    
  89.                 intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);    
  90.                 startActivity(intent);    
  91.                 break;    
  92.             case R.id.exit:    
  93.                 // 關閉Activity    
  94.                 finish();    
  95.                 break;    
  96.             case R.id.musical:    
  97.                 if (music.isChecked()) {    
  98.                     controller.stop();    
  99.                 } else {    
  100.                     controller.play();    
  101.                 }    
  102.                 break;    
  103.             default:    
  104.                 break;    
  105.             }    
  106.     
  107.         }    
  108.     
  109.         /**  
  110.          * 設置按鈕按下和抬起的效果  
  111.          */    
  112.         @Override    
  113.         public boolean onTouch(View v, MotionEvent event) {    
  114.             int id = v.getId();    
  115.             switch (id) {    
  116.             case R.id.startgame:    
  117.                 if (event.getAction() == MotionEvent.ACTION_DOWN) {    
  118.                     start.setBackgroundResource(R.drawable.startgamean);    
  119.                 }    
  120.                 if (event.getAction() == MotionEvent.ACTION_UP) {    
  121.                     start.setBackgroundResource(R.drawable.startgame);    
  122.                 }    
  123.                 break;    
  124.             case R.id.rank:    
  125.                 if (event.getAction() == MotionEvent.ACTION_DOWN) {    
  126.     
  127.                     rank.setBackgroundResource(R.drawable.rankan);    
  128.                 }    
  129.                 if (event.getAction() == MotionEvent.ACTION_UP) {    
  130.                     rank.setBackgroundResource(R.drawable.rank);    
  131.                 }    
  132.                 break;    
  133.             case R.id.about:    
  134.                 if (event.getAction() == MotionEvent.ACTION_DOWN) {    
  135.                     about.setBackgroundResource(R.drawable.aboutan);    
  136.                 }    
  137.                 if (event.getAction() == MotionEvent.ACTION_UP) {    
  138.                     about.setBackgroundResource(R.drawable.about);    
  139.                 }    
  140.                 break;    
  141.             case R.id.exit:    
  142.                 if (event.getAction() == MotionEvent.ACTION_DOWN) {    
  143.                     exit.setBackgroundResource(R.drawable.exitan);    
  144.                 }    
  145.                 if (event.getAction() == MotionEvent.ACTION_UP) {    
  146.                     exit.setBackgroundResource(R.drawable.exit);    
  147.                 }    
  148.                 break;    
  149.     
  150.             default:    
  151.                 break;    
  152.             }    
  153.             return false;    
  154.         }    
  155.     }    
  156.     
  157.     @Override    
  158.     protected void onDestroy() {    
  159.         // TODO Auto-generated method stub    
  160.         super.onDestroy();    
  161.         controller.close();    
  162.     }    
  163. }    

       順便貼一下About中的代碼:這個類比較簡單直接加載對應的xml文件就可以,一些介紹的話在xml中寫。

Java代碼
  1. package cn.com.cyj.mouse.ui;    
  2.     
  3. import android.os.Bundle;    
  4. import cn.com.cyj.mouse.R;    
  5. /**  
  6.  * 關於界面  
  7.  * @author cyj  
  8.  *  
  9.  */    
  10. public class About extends BaseActivity {    
  11.     @Override    
  12.     protected void onCreate(Bundle savedInstanceState) {    
  13.         super.onCreate(savedInstanceState);    
  14.         setContentView(R.layout.activity_about);    
  15.     }    
  16. }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved