首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

范例17-无敌抢钱鸡

2012-08-09 
实例17--无敌抢钱鸡? 随着转化的进行,难度也在增加,这次的实例我弄了一天,当然有些时间是在弄其他的,随着

实例17--无敌抢钱鸡

? 随着转化的进行,难度也在增加,这次的实例我弄了一天,当然有些时间是在弄其他的,随着代码量的增加,要更加理解源代码的结构,我这次采用uml弄出他们的各个类图和结构,这样让我更了解原作者的思想...然后再用android的方法的实现,当然因为都是java开发的,有些类是直接用的,这次还是使用了我本来的写的android_midp包,在androidSprite类中添加了碰撞方法.

下面是效果图:


范例17-无敌抢钱鸡
?
范例17-无敌抢钱鸡
?
范例17-无敌抢钱鸡
?
范例17-无敌抢钱鸡

MainView.java

package com.wjh.demon_17;import java.util.Random;import com.wjh.midp_me.GameView;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.Log;import android.view.MotionEvent;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.SurfaceHolder.Callback;public class MainView extends SurfaceView implements Callback,Runnable{public static final int GAME_UI= 0;//进入用户界面public static final int GAME_GAMING= 1;//进行游戏public static final int GAME_END= 2;//游戏结束public static final int GAME_STATE_NUM = 3;//状态总数private int m_nState= GAME_UI;//存储当前的游戏状态private booleanm_bRunning;//控制线程运行private MyBackm_Back;//游戏背景private MyUIm_UI;//用户界面private ChickSpritem_Chick;//管理小鸡对象private GoodsSpritem_Goods[];//管理物品对象private intm_nScore = 0;//当前得分private intm_nTime = 60 * 10;//游戏总时间private Randomm_Random;private int screenStartX = 0;//游戏界面开始坐标Xprivate int screenStartY = 0;//游戏界面开始坐标Yprivate int screenWidth = 0;//游戏界面宽度private int screenHeight =0;//游戏界面高度private Context context ;int keyState = 0;Thread gameThread = null;SurfaceHolder holder = null;public MainView(Context context) {super(context);// TODO Auto-generated constructor stubthis.context = context;setFocusable(true);setFocusableInTouchMode(true);holder = this.getHolder();holder.addCallback(this);}private void initView(){m_Random = new Random();m_Back = new MyBack(context);m_UI = new MyUI(context);screenStartX = (getWidth() - m_Back.getBackImageWidth())/2;screenStartY = (getHeight()-m_Back.getBackImageHeight())/2;screenWidth = screenStartX+m_Back.getBackImageWidth();screenHeight = screenStartY+m_Back.getBackImageHeight();try{//读取小鸡精灵图片,并设置小鸡的初始位置Bitmap img = BitmapFactory.decodeResource(getResources(), R.drawable.chick);m_Chick = new ChickSprite( img, 31, 29);m_Chick.setRefPixelPosition( getWidth() / 2, screenHeight- 18 );//读取物品图片,屏幕上最多同时掉落6个物品img = BitmapFactory.decodeResource(getResources(), R.drawable.goods);m_Goods = new GoodsSprite[6];for( int n = 0; n < m_Goods.length; n ++ )m_Goods[n] = new GoodsSprite( img, 19, 19 );}catch (Exception ex){} setState(GAME_UI);//设置游戏状态}private void setState( int state ){//设置当前的游戏状态if( state < 0 || state >= GAME_STATE_NUM )return;m_nState = state;}@Overridepublic void run() {// TODO Auto-generated method stubwhile(m_bRunning){input();logic();doDraw();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//开始游戏主线程public void start(){if(gameThread == null){gameThread = new Thread(this);gameThread.start();m_bRunning = true;}}//停止游戏主线程public void stop(){m_bRunning = false;if(gameThread != null){try {gameThread.join();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private int getKeyStates(){return keyState;}private void setKeyStates(int keyStates){this.keyState = keyStates;}//输入判断public void input(){//根据不同的游戏状态,处理按键操作int keyStates = getKeyStates();switch( m_nState ){case GAME_UI://进入用户界面m_UI.Input(keyStates);if( m_UI.getState() == MyUI.UI_HIDE )//当用户界面被隐藏时进入游戏setState(GAME_GAMING);break;case GAME_GAMING://进入游戏if( m_nTime <= 0 )//如果游戏超时return;m_Chick.Input(keyStates,screenStartX,screenStartY,screenWidth,screenStartY);break;}}//逻辑判断public void logic(){//根据不同的游戏状态,处理逻辑操作switch( m_nState ){case GAME_UI://进入用户界面break;case GAME_GAMING://进入游戏m_Chick.Logic();for( int n = 0; n < m_Goods.length; n ++ )m_Goods[n].Logic(screenHeight-10);Collides();//碰撞检测CreateGoods();//随机生成新物品m_nTime --;if( m_nTime <= 0 )//如果游戏超时setState(GAME_END);break;}}private void Collides(){//碰撞检测for( int n = 0; n < m_Goods.length; n ++ ){if( m_Chick.collidesWith(m_Goods[n]) ){//如果小鸡与物品发生碰撞,即小鸡接到了物品switch( m_Goods[n].getType() ){case GoodsSprite.GODDS_GOLD://接到金元宝m_nScore += 5;//增加5个积分点break;case GoodsSprite.GODDS_DIAMOND://接到钻石m_nScore += 10;//增加10个积分点break;case GoodsSprite.GODDS_FRUIT://接到圆形水果会被砸倒m_Chick.setState( ChickSprite.CHICK_DOWN );break;}m_Goods[n].setVisible(false);//让物品消失}}}private void CreateGoods(){//随机产生新物品//以1比20的概率产生新物品int rand = m_Random.nextInt() % 10;//rand在-10~10之间if( rand != 0 )return;for( int n = 0; n < m_Goods.length; n ++ ){if( m_Goods[n].isVisible() == false ){//随机设置新物品的种类及初始位置int type = Math.abs( m_Random.nextInt());type = type % GoodsSprite.GODDS_TYPE_NUM;m_Goods[n].setType(type);int x = m_Random.nextInt() % (screenWidth-screenStartX-10);x = Math.abs(x)+screenStartX;m_Goods[n].StartDrop( x,screenStartY+10);break;}}}public void doDraw(){Canvas c = null;try{c = holder.lockCanvas();synchronized (holder) {paint(c);}}finally{if(c != null){holder.unlockCanvasAndPost(c);}}}//画图public void paint(Canvas canvas){//用黑色清屏Paint backpaint = new Paint();backpaint.setColor(Color.BLACK);canvas.drawRect(0, 0, getWidth(), getHeight(), backpaint);Paint forePaint = new Paint();forePaint.setColor(Color.RED);forePaint.setTextSize(20);switch( m_nState ){case GAME_UI://显示标题界面m_UI.Paint(canvas, forePaint,getWidth(), getHeight());break;case GAME_GAMING://显示游戏画面m_Back.Paint(canvas, forePaint,getWidth(), getHeight());m_Chick.paint(canvas,forePaint);for( int n = 0; n < m_Goods.length; n ++ )m_Goods[n].paint(canvas,forePaint);//显示文字信息StringBuffer strText = new StringBuffer();strText.append("Time:");strText.append(m_nTime / 10);strText.append("     Score:");strText.append(m_nScore);canvas.drawText( strText.toString(),20,20,forePaint);break;case GAME_END://显示结束信息m_Back.Paint(canvas,forePaint, getWidth(), getHeight());StringBuffer strEndText = new StringBuffer();strEndText.append("游戏结束,本次得分:");strEndText.append(m_nScore);canvas.drawText( strEndText.toString(), 20, getHeight()/2,forePaint );break;}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder holder) {// TODO Auto-generated method stubinitView();start();}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stubstop();}float x1 = 0;float x2 = 0;@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubswitch(event.getAction()){case MotionEvent.ACTION_DOWN:setKeyStates(GameView.ACTION_FIRE);x1 = event.getX();x2 = 0;break;case MotionEvent.ACTION_UP:x2 =event.getX();if(x2-x1>50){setKeyStates(GameView.ACTION_RIGHT);}else if(x1-x2>50){setKeyStates(GameView.ACTION_LEFT);}x1= 0;x2 = 0;break;default :break;}return true;}}

?源代码:Demon_17.rar

apk文件(后缀改为apk):Demon_17.zip

热点排行