zoukankan      html  css  js  c++  java
  • 初涉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/的(需要FQ过去。。- -!),我这里只是做了一个小应用,希望对一些像我这样刚入门的同学能有一些帮助。

    这里再把编译好的apk和源代码提供下载:

    点我下载安装程序                 点我下载源代码

  • 相关阅读:
    mysql修改数据表名
    HDU 5742 It's All In The Mind (贪心)
    HDU 5752 Sqrt Bo (数论)
    HDU 5753 Permutation Bo (推导 or 打表找规律)
    HDU 5762 Teacher Bo (暴力)
    HDU 5754 Life Winner Bo (博弈)
    CodeForces 455C Civilization (并查集+树的直径)
    CodeForces 455B A Lot of Games (博弈论)
    CodeForces 455A Boredom (DP)
    HDU 4861 Couple doubi (数论 or 打表找规律)
  • 原文地址:https://www.cnblogs.com/Random/p/1730074.html
Copyright © 2011-2022 走看看