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和源代码提供下载:

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

  • 相关阅读:
    详谈JavaScript原型链
    清除浮动(常用的四种方式)
    Uncaught TypeError: Cannot set property ‘display‘ of undefined解决
    Linux虚拟机、服务器上安装MySQL
    使用pipeline构建mysql容器并发布到K8S
    Kubernetes数据持久化方案
    centos7配置nfs
    pipleline实现docker、k8s代理节点
    RabbitMQ-7 管理+构建集群
    RabbitMQ-6 在Spring和Springboot中实现
  • 原文地址:https://www.cnblogs.com/Random/p/1730074.html
Copyright © 2011-2022 走看看