Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android游戲 >> Android游戲開發 >> Android游戲開發之打地鼠(五

Android游戲開發之打地鼠(五

編輯:Android游戲開發

  游戲的基本功能都已經實現了,最後來說一說排行榜的顯示和游戲音效的添加。

  排行榜的顯示主要用的Android中一個比較重要的控件ListView。ListView的使用還是比較簡單的,第一步在布局文件中建立一個ListView的節點,在代碼中通過ID得到該控件。第二步給該控件設置一個適配器,適配器寫一個類,該類繼承BaseAdapter並實現未實現的方法,一共有4個為實現的方法,getCount()獲得數據總數,getItem(int position)根據位置獲得某條數據,getItemId(int position)根據位置獲得某條數據id,getView(),得到相應位置的Item視圖。可以通過contentView對ListView進行優化,如果contentView為空,通過inflate填充view,否則不填充,這樣減少了填充次數,提高了效率。代碼如下:

Java代碼
  1. package cn.com.cyj.mouse.ui;    
  2.     
  3. import java.util.ArrayList;    
  4.     
  5. import android.content.Intent;    
  6. import android.os.Bundle;    
  7. import android.view.View;    
  8. import android.view.ViewGroup;    
  9. import android.widget.BaseAdapter;    
  10. import android.widget.ListView;    
  11. import android.widget.TextView;    
  12. import cn.com.cyj.mouse.R;    
  13. import cn.com.cyj.mouse.enity.Gamer;    
  14.     
  15. /**  
  16.  * 顯示玩家排行榜  
  17.  *   
  18.  * @author cyj  
  19.  *   
  20.  */    
  21. public class ShowRank extends BaseActivity {    
  22.     
  23.     ListView lv;    
  24.     ArrayList<Gamer> gamerList;    
  25.     TextView gamerName;    
  26.     TextView gamerScore;    
  27.     
  28.     @Override    
  29.     protected void onCreate(Bundle savedInstanceState) {    
  30.         super.onCreate(savedInstanceState);    
  31.         setContentView(R.layout.activity_showrank);    
  32.     
  33.         gamerList = new ArrayList<Gamer>();    
  34.         Intent intent = getIntent();    
  35.         gamerList = (ArrayList<Gamer>) intent.getSerializableExtra("gamerlist");    
  36.         // 初始化listview對象    
  37.         lv = (ListView) findViewById(R.id.lv);    
  38.         // 給listview對象添加適配器    
  39.         lv.setAdapter(new MyAdapter());    
  40.     }    
  41.     
  42.     class MyAdapter extends BaseAdapter {    
  43.     
  44.         // 獲得數據總數    
  45.         @Override    
  46.         public int getCount() {    
  47.             return gamerList.size();    
  48.         }    
  49.     
  50.         // 根據位置獲得某條數據    
  51.         @Override    
  52.         public Object getItem(int position) {    
  53.             return null;    
  54.         }    
  55.     
  56.         // 根據位置獲得某條數據id    
  57.         @Override    
  58.         public long getItemId(int position) {    
  59.             // TODO Auto-generated method stub    
  60.             return 0;    
  61.         }    
  62.     
  63.         @Override    
  64.         public View getView(int position, View contentView, ViewGroup parent) {    
  65.             View v = contentView;    
  66.             if (v == null) {    
  67.                 // 通過inflate填充view    
  68.                 v = View.inflate(ShowRank.this, R.layout.list_item, null);    
  69.                 gamerName = (TextView) v.findViewById(R.id.gamername);    
  70.                 gamerScore = (TextView) v.findViewById(R.id.gamerscore);    
  71.             }    
  72.     
  73.             Gamer gamer = gamerList.get(position);    
  74.             gamerName.setText(gamer.getName());    
  75.             gamerScore.setText(gamer.getScore() + "");    
  76.             return v;    
  77.         }    
  78.     
  79.     }    
  80. }

  一個游戲沒有音效無可厚非,但是有了音效會更有樂趣。本游戲采用了MediaPlayer+SoundPool的形式,前者播放背景音樂,後者播放游戲的打擊音效,關於MediaPlayer的使用,沒有什麼比官方的圖來的更簡單粗暴了,這裡不再贅述。SoundPool的使用,第一步new SoundPool();第二步load(),通常用一個HashMap存放音樂文件id和load的映射;第三步play()。代碼如下:

Java代碼
  1. package cn.com.cyj.mouse.services;    
  2.     
  3. import java.util.HashMap;    
  4. import java.util.Map;    
  5.     
  6. import android.content.Context;    
  7. import android.media.AudioManager;    
  8. import android.media.MediaPlayer;    
  9. import android.media.SoundPool;    
  10. import cn.com.cyj.mouse.R;    
  11. /**  
  12.  * 處理游戲的背景音樂和音效  
  13.  * @author cyj  
  14.  *  
  15.  */    
  16. public class MusicService {    
  17.     
  18.     // 用來播放背景音樂    
  19.     MediaPlayer player;    
  20.     // 用來播放音效    
  21.     SoundPool pool;    
  22.     Context context;    
  23.     // 存放音效    
  24.     Map<Integer, Integer> soundMap;    
  25.     public MusicService(Context context) {    
  26.         this.context = context;    
  27.         initMedia();    
  28.         initSound();    
  29.     }    
  30.     private void initSound() {    
  31.         pool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);    
  32.         soundMap = new HashMap<Integer, Integer>();    
  33.         // 加載音效文件並放入hashmap中    
  34.         soundMap.put(R.raw.dismistake, pool.load(context, R.raw.dismistake, 1));    
  35.         soundMap.put(R.raw.hathit, pool.load(context, R.raw.hathit, 1));    
  36.     }    
  37.     /**  
  38.      * 通過resId播放在hashmap中對應的要播放的音效  
  39.      * @param resId hashMap的key  
  40.      */    
  41.     public void playSound(int resId){    
  42.         // 獲得map的value即對應音效    
  43.         Integer soundId = soundMap.get(resId);    
  44.         if(soundId != null){    
  45.             pool.play(soundId, 1, 1, 1, 0, 1);    
  46.         }    
  47.     }    
  48.     private void initMedia(){    
  49.         // 第一次播放不用prepare    
  50.         player = MediaPlayer.create(context, R.raw.bg);    
  51.         // 循環播放    
  52.         player.setLooping(true);    
  53.     }    
  54.     public void play() {    
  55.         // 播放背景音樂    
  56.         player.start();    
  57.     }    
  58.     /**  
  59.      * 停止播放  
  60.      */    
  61.     public void stop() {    
  62.         if (player.isPlaying()) {    
  63.             player.stop();    
  64.             try {    
  65.                 player.prepare();    
  66.                 // stop後再次start會繼續播放,設置從0開始播放    
  67.                 player.seekTo(0);    
  68.             } catch (Exception e) {    
  69.                 // TODO Auto-generated catch block    
  70.                 e.printStackTrace();    
  71.             }     
  72.         }    
  73.     }    
  74.     /**  
  75.      * 暫停播放  
  76.      */    
  77.     public void pause(){    
  78.         if(player.isPlaying()){    
  79.             player.pause();    
  80.         }       
  81.     }    
  82.     /**  
  83.      * 游戲退出釋放資源  
  84.      */    
  85.     public void close() {    
  86.         if(player == null)    
  87.             return ;    
  88.         if(player.isPlaying()){    
  89.             // 停止播放    
  90.             player.stop();    
  91.         }    
  92.         // 釋放資源,無法使用。mediaPlayer引用還在    
  93.         player.release();    
  94.         player = null;    
  95.     }     
  96.     /**  
  97.      * 繼續播放音樂  
  98.      */    
  99.     public void continuePlay() {    
  100.         player.start();    
  101.     }    
  102.     /**  
  103.      * 判斷背景音樂是否在播放  
  104.      * @return  
  105.      */    
  106.     public Boolean isNowPlay(){    
  107.         if(player.isPlaying()){    
  108.             return true;    
  109.         }    
  110.         return false;    
  111.     }    
  112. }    

  游戲中的控制類,該類處理玩家對界面的操作和游戲響應,把界面操作和游戲邏輯分開設計,降低耦合性。代碼如下:

Java代碼
  1. package cn.com.cyj.mouse.controller;    
  2.     
  3. import java.util.ArrayList;    
  4.     
  5. import android.content.Context;    
  6. import android.content.Intent;    
  7. import android.os.Bundle;    
  8. import cn.com.cyj.mouse.database.GamerDatabase;    
  9. import cn.com.cyj.mouse.enity.Gamer;    
  10. import cn.com.cyj.mouse.services.MusicService;    
  11. import cn.com.cyj.mouse.ui.ShowRank;    
  12. /**  
  13.  * 游戲中的控制類  
  14.  * @author cyj  
  15.  *  
  16.  */    
  17. public class Controller {    
  18.     ArrayList<Gamer> gamerList;    
  19.     GamerDatabase gamerDatabase;    
  20.     Context context;    
  21.     MusicService musicService;    
  22.     
  23.     public Controller(Context context) {    
  24.         this.context = context;    
  25.         gamerDatabase = new GamerDatabase(context);    
  26.         musicService = new MusicService(context);    
  27.         gamerList = new ArrayList<Gamer>();    
  28.     }    
  29.     
  30.     /**  
  31.      * 插入數據  
  32.      *   
  33.      * @param gamer  
  34.      *            玩家對象  
  35.      * @return true 插入玩家成功;false 插入玩家失敗  
  36.      */    
  37.     public Boolean insert(Gamer gamer) {    
  38.         if (gamerDatabase.insertGamer(gamer))    
  39.             return true;    
  40.         return false;    
  41.     }    
  42.     
  43.     /**  
  44.      * 查詢所有玩家信息  
  45.      *   
  46.      * @return true 有玩家信息; false 沒有玩家信息  
  47.      */    
  48.     public Boolean query() {    
  49.         gamerList = gamerDatabase.queryGamerAll();    
  50.         if (gamerList.size() == 0)    
  51.             return false;    
  52.         Intent intent = new Intent(context, ShowRank.class);    
  53.         Bundle bundle = new Bundle();    
  54.         // 裝入被序列化的玩家信息列表,將數據傳到新的Activity    
  55.         bundle.putSerializable("gamerlist", gamerList);    
  56.         intent.putExtras(bundle);    
  57.         intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);    
  58.         context.startActivity(intent);    
  59.         return true;    
  60.     }    
  61.     /**  
  62.      * 播放音樂  
  63.      */    
  64.     public void play() {    
  65.         musicService.play();    
  66.     }    
  67.     /**  
  68.      * 關閉音樂  
  69.      */    
  70.     public void stop() {    
  71.         musicService.stop();    
  72.     }    
  73.     /**  
  74.      * 暫停音樂  
  75.      */    
  76.     public void pauseMusic() {    
  77.         musicService.pause();    
  78.     }    
  79.     /**  
  80.      * 繼續播放  
  81.      */    
  82.     public void continuePlay() {    
  83.         musicService.continuePlay();    
  84.     }    
  85.     /**  
  86.      *  游戲結束釋放資源  
  87.      */    
  88.     public void close() {    
  89.         musicService.close();    
  90.     }    
  91.     /**  
  92.      * 播放音效  
  93.      * @param resId 音樂文件資源id  
  94.      */    
  95.     public void playSound(int resId) {    
  96.         musicService.playSound(resId);    
  97.     }    
  98.         
  99.     /**  
  100.      * 判斷音樂是否在播放  
  101.      * @return true音樂正在播放,false音樂已經停止  
  102.      */    
  103.     public Boolean isPlay(){    
  104.         if(musicService.isNowPlay()){    
  105.             return true;    
  106.         }    
  107.         return false;    
  108.     }    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved