Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 初涉Android編程之無聊的“捏泡泡”游戲

初涉Android編程之無聊的“捏泡泡”游戲

編輯:Android開發實例

上周買了個HTC G6,終於換掉了用了3年5個月的索愛w710c。為了平時給自己寫一些比較實用的應用工具,於是便開始學習Android編程的相關知識。折騰了快一周吧,從學習搭環境到開發,雖然也遇到些讓人糾結的問題,還好都一一解決了。言歸正轉,這次寫的是一個Demo似的小應用,簡單得不能再簡單了,一共就三個類,主類Bubble繼承於Activity,然後就是Vacuole和Sound類,分別是泡泡對象和聲音的處理,類圖如下:

 

 

以下是具體的代碼

 

Bubble類 package randork.game;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TableLayout;
import android.widget.TableRow;

import randork.game.Sound;
import randork.game.Vacuole;

public class Bubble extends Activity {
    
private int cellCount=7;
    
private int rowCount=9;
    
private Vacuole[] vcl=new Vacuole[cellCount * rowCount];
    
private TableRow[] rows=new TableRow[rowCount];
    
private Sound sound;
    
  
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setContentView(R.layout.stage);
        sound
=new Sound(this);
        initRender();
    }
    
    
public boolean onCreateOptionsMenu(Menu menu) {
        
boolean result = super.onCreateOptionsMenu(menu);
        menu.add(
0,0,0,"重玩");
        menu.add(
0,1,1,"關於...");
        menu.add(
0,2,2,"退出");
        
return result;
      }

    
public boolean onOptionsItemSelected(MenuItem item) {
        
switch (item.getItemId()) {
            
case 0:
                reset();
                
return false;
            
case 1:
                about();
                
return false;
            
case 2:
                destory();
                
return false;
            
default:
                
return false;
        }
    }
    
    
public void onBackPressed(){
        destory();
        
super.onBackPressed();
    }
    
    
/**
     * 重新開始
     
*/
    
public void reset(){
        
int i,l=vcl.length;
        
for(i=0;i<l;i++){
            vcl[i].reset();
        }
    }
    
    
/**
     * 銷毀對象,釋放資源
     
*/
    
public void destory(){
        sound.destroy();
        
this.finish();
    }
    
    
/**
     * 初始化每一行的泡泡
     
*/
    
private void initRows(){
        
int i,l=rowCount;
        TableLayout container
=(TableLayout)findViewById(R.id.container2);
        
        
for(i=0;i<l;i++){
            rows[i]
=new TableRow(this);
            container.addView(rows[i]);
        }
    }
    
    
/**
     * 初始化內容的呈現
     
*/
    
private void initRender(){
        
int cr,i,l=vcl.length;
        initRows();
        
        
for(i=0;i<l;i++){
            cr
=(int)Math.ceil(i/cellCount);
            vcl[i]
=new Vacuole(this,sound);
            rows[cr].addView(vcl[i].renderer, 
4646);
        }
    }
    
    
/**
     * about對話框的定義
     
*/
    
private void about(){
        Dialog dialog 
= new Dialog(this);

        dialog.setContentView(R.layout.about);
        dialog.setTitle(
"隨機出品");
        dialog.show();
    }
}

 

 

Vacuole類 package randork.game;

import android.content.Context;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

import randork.game.Sound;

public class Vacuole {
    
    
public ImageView renderer;
    
public boolean isBombed=false;
    
private int idx=(int)Math.ceil(Math.random()*6)-1;
    
private Context context;
    
private Sound sound;
    
    
/**
     * 定義點擊的事件
     
*/
    
private OnTouchListener mCorkyListener = new OnTouchListener() {
        @Override
        
public boolean onTouch(View v, MotionEvent event) {
            
if(event.getAction()==MotionEvent.ACTION_DOWN){
                bomb();
            }
            
return false;
        }
    };
    
    
/**
     * 爆炸後的泡泡圖片資源
     
*/
    
private int intBombImages[]={
        R.drawable.bomb1,
        R.drawable.bomb2,
        R.drawable.bomb3,
        R.drawable.bomb4,
        R.drawable.bomb5,
        R.drawable.bomb6
    };
    
    
public Vacuole(Context c,Sound sd){
        context
=c;
        sound
=sd;
        initRenderer();
    }

    
/**
     * 泡泡爆炸,會隨機地顯示一個資源中的爆炸後的圖片,並播放聲音
     
*/
    
public void bomb(){
        
if(isBombed){
            
return;
        }
        renderer.setImageResource(intBombImages[idx]);
        sound.play();
        isBombed
=true;
    }
    
    
/**
     * 重新開始
     
*/
    
public void reset(){
        isBombed
=false;
        renderer.setImageResource(R.drawable.normal);
    }
    
    
/**
     * 初始化泡泡圖形的呈現
     
*/
    
private void initRenderer(){
        renderer
=new ImageView(context);
        renderer.setPadding(
2222);
        renderer.setImageResource(R.drawable.normal);
        renderer.setOnTouchListener(mCorkyListener);
    }
}

 

 

Sound類 package randork.game;

import android.content.Context;
import android.media.MediaPlayer;

public class Sound {
    private MediaPlayer mPlayers[]=new MediaPlayer[6];
    private Context context;
    
    public Sound(Context c){
        context=c;
        initMPlayers();
    }
    
    /**
     * 隨機播放一個爆炸的聲音
     */
    public void play(){
        int idx=(int)Math.ceil(Math.random()*6)-1;
        mPlayers[idx].start();
    }
    
    /**
     * 釋放mPlayer
     */
    public void destroy(){
        int i,l=mPlayers.length;
        for(i=0;i<l;i++){
            mPlayers[i].release();
        }
    }
    
    /**
     * 初始化播放聲音對象數組
     */
    private void initMPlayers(){
        mPlayers[0]=MediaPlayer.create(context,R.raw.sound1);
        mPlayers[1]=MediaPlayer.create(context,R.raw.sound2);
        mPlayers[2]=MediaPlayer.create(context,R.raw.sound3);
        mPlayers[3]=MediaPlayer.create(context,R.raw.sound4);
        mPlayers[4]=MediaPlayer.create(context,R.raw.sound5);
        mPlayers[5]=MediaPlayer.create(context,R.raw.sound6);
    }
}

 

這是程序運行界面

 

這篇博文只是說明了一個應用,並不是講解Android開發的基本原理,Android開發的相關還是建議大家看http://developer.android.com/的(需要翻牆過去。。- -!),我這裡只是做了一個小應用,希望對一些像我這樣剛入門的同學能有一些幫助。

這裡再把編譯好的apk和源代碼提供下載:

 

點我下載安裝程序                 點我下載源代碼

轉自:http://www.cnblogs.com/Random/archive/2010/05/07/1730074.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved