码迷,mamicode.com
首页 > 其他好文 > 详细

未完成

时间:2015-06-03 23:22:04      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:

别踩白块:

齐岳:负责代码的实现(一)

blogs:http://www.cnblogs.com/July0207/

codes:

package com.orange.block;

import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;

import com.orange.engine.camera.ZoomCamera;
import com.orange.engine.options.PixelPerfectEngineOptions;
import com.orange.engine.options.PixelPerfectMode;
import com.orange.engine.options.ScreenOrientation;
import com.orange.res.FontRes;
import com.orange.res.RegionRes;
import com.orange.ui.activity.GameActivity;
import com.orange.block.res.Res;
import com.orange.block.scene.GameScene;
import com.orange.block.util.ConstantUtil;
import com.orange.block.util.LogUtil;

/**
 * 入口主Activity 类
 * @author lch<OGEngine@orangegame.cn>
 * @
 */
public class MainActivity extends GameActivity {
	@Override
	protected void onCreate(Bundle pSavedInstanceState) {
		super.onCreate(pSavedInstanceState);

	}

	@Override
	protected PixelPerfectEngineOptions onCreatePixelPerfectEngineOptions() {
		PixelPerfectEngineOptions pixelPerfectEngineOptions = new PixelPerfectEngineOptions(
				this, ZoomCamera.class);
		pixelPerfectEngineOptions
				.setScreenOrientation(ScreenOrientation.PORTRAIT_FIXED); // 设置竖屏
		pixelPerfectEngineOptions
				.setPixelPerfectMode(PixelPerfectMode.CHANGE_HEIGHT);// 适配模式,这里设置为“保持宽度不变,改变高”
		pixelPerfectEngineOptions.setDesiredSize(ConstantUtil.DESIRED_SIZE);// 参考尺寸

		return pixelPerfectEngineOptions;
	}

	@Override
	protected void onLoadResources() {
		// 加载相关初始的资源等
		LogUtil.d("开始加载资源...");
		RegionRes.loadTexturesFromAssets(Res.ALL_XML);
		FontRes.loadFont(128, 128,
				Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 40, true,
				Color.RED, ConstantUtil.FONT_NAME_TIMER);
		
		FontRes.loadFont(256, 512,
				Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 50, true,
				Color.BLACK, ConstantUtil.FONT_NAME_RESULT);

	}

	@Override
	protected void onLoadComplete() {
		// 加载资源完成后
		LogUtil.d("加载资源完成...");
		this.startScene(GameScene.class);// 启动游戏场景
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		this.getEngine().stop();
	}
	
	@Override
	protected synchronized void onResume() {
		super.onResume();
		this.getEngine().start();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		
		android.os.Process.killProcess(android.os.Process.myPid());
	}
}

  

package com.orange.block.util;

public class ConstantUtil {

	/**屏幕参考尺寸**/
	public static final float DESIRED_SIZE = 480;
	
	/**标示白颜色**/
	public static final int COLOR_WHITE = 0;
	/**标示黑颜色**/
	public static final int COLOR_BLACK = 1;
	
	/**游戏进行状态**/
	public static final int GAME_START = 1;
	/**游戏结束状态**/
	public static final int GAME_OVER = 2;
	
	/** 游戏总共有多少行 **/
	public static final int LINES_LEN = 50;
	
	/**字体颜色的 key**/
	public static final String FONT_NAME_TIMER = "timer";
	public static final String FONT_NAME_RESULT = "result";
}

  

package com.orange.block.util;

import android.util.Log;

/**
 * 
 * @author lch
 * 
 */
public class LogUtil {
	private static boolean showLogEnabled = true;
	private static final String TAG = "OG";

	public static void out(String msg) {
		if (showLogEnabled)
			System.out.println(msg);
	}

	public static void d(String msg) {
		if (showLogEnabled)
			Log.d(TAG, msg);
	}

	public static void i(String msg) {
		if (showLogEnabled)
			Log.i(TAG, msg);
	}

	public static void v(String msg) {
		if (showLogEnabled)
			Log.v(TAG, msg);
	}

	public static void w(String msg) {
		if (showLogEnabled)
			Log.w(TAG, msg);
	}

	public static void e(String msg) {
		if (showLogEnabled)
			Log.e(TAG, msg);
	}

}

  

package com.orange.block.util;

import android.content.Context;
import android.content.SharedPreferences.Editor;

/**
 * 保存到 SharedPreferences 的数据
 * 
 * @author lch
 * 
 */
public class SharedUtil {

	private static final String SHARED_OG = "Shared_og";

	private static final String RESULT_RECORD = "result_record";

	/**
	 * 保持最新的记录
	 * @param pContext
	 * @param pMillisPass
	 */
	public static void setRecord(Context pContext, long pMillisPass) {
		Editor edit = pContext.getSharedPreferences(SHARED_OG,
				Context.MODE_PRIVATE).edit();
		edit.putLong(RESULT_RECORD, pMillisPass);
		edit.commit();
	}

	/**
	 * 获取记录
	 * @param context
	 * @return
	 */
	public static long getRecord(Context context) {
		return context
				.getSharedPreferences(SHARED_OG, Context.MODE_PRIVATE)
				.getLong(RESULT_RECORD, 0);
	}

}

  

package com.orange.block.scene;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.view.KeyEvent;

import com.orange.content.SceneBundle;
import com.orange.entity.IEntity;
import com.orange.entity.modifier.ColorModifier;
import com.orange.entity.modifier.DelayModifier;
import com.orange.entity.modifier.IEntityModifier.IEntityModifierListener;
import com.orange.entity.modifier.LoopEntityModifier;
import com.orange.entity.modifier.MoveYModifier;
import com.orange.entity.modifier.ScaleModifier;
import com.orange.entity.modifier.SequenceEntityModifier;
import com.orange.entity.primitive.DrawMode;
import com.orange.entity.primitive.Mesh;
import com.orange.entity.scene.Scene;
import com.orange.entity.sprite.AnimatedSprite;
import com.orange.entity.text.Text;
import com.orange.res.FontRes;
import com.orange.util.color.Color;
import com.orange.util.modifier.IModifier;
import com.orange.block.control.TimerTool;
import com.orange.block.entity.Block;
import com.orange.block.entity.FailGroup;
import com.orange.block.entity.SuccGroup;
import com.orange.block.res.Res;
import com.orange.block.util.ConstantUtil;
import com.orange.block.util.LogUtil;

/**
 * 游戏场景
 * 
 * @author lch
 * 
 */
public class GameScene extends Scene {
	/** 块的宽 **/
	private float blockWidth = 0;
	/** 块的高 **/
	private float blockHight = 0;
	/** 用于装当前所有生成但未被删除的block **/
	private List<Block[]> blockList;
	/** 当前生成的块的行数 **/
	private int linesLength = 5;
	/** 游戏状态 **/
	private int gameStatus = ConstantUtil.GAME_START;
	/** 移动步数 **/
	private int moveNum = 0;
	/** 成功界面 **/
	private SuccGroup mSuccGroup;
	/** 失败界面 **/
	private FailGroup mFailGroup;
	/** 计时管理类 **/
	private TimerTool mTimerTool;

	/** 显示计时的Text **/
	private Text timerText;
	
	/**游戏提示语**/
	private AnimatedSprite game_tip;

	// 用于Z索引排序
	private static final int pZIndex_middle = 2;
	private static final int pZIndex_top = 3;

	public Text getTimerText() {
		return timerText;
	}

	public TimerTool getmTimerTool() {
		return mTimerTool;
	}

	@Override
	public void onSceneCreate(SceneBundle bundle) {
		super.onSceneCreate(bundle);
		// 镜头里显示的是4*4的块,所以用镜头宽的四分之一作为块宽
		blockWidth = this.getCameraWidth() / 4;
		blockHight = this.getCameraHeight() / 4;

		this.blockList = new ArrayList<Block[]>();
		mTimerTool = new TimerTool(this);
		initView();
	}

	private void initView() {
		// 初始化blocks
		initBlocks();

		timerText = new Text(getCameraCenterX(), 10,
				FontRes.getFont(ConstantUtil.FONT_NAME_TIMER), "00.000\"",
				"00:00.000\"".length(), getVertexBufferObjectManager());
		this.attachChild(timerText);
		timerText.setCentrePositionX(getCameraCenterX());
		timerText.setZIndex(pZIndex_top);

		mSuccGroup = new SuccGroup(getCameraWidth(), getCameraHeight(), this);
		mSuccGroup.setZIndex(pZIndex_middle);
		mSuccGroup.setVisible(false);
		this.attachChild(mSuccGroup);

		mFailGroup = new FailGroup(getCameraWidth(), getCameraHeight(), this);
		this.attachChild(mFailGroup);
		mFailGroup.setZIndex(pZIndex_middle);
		
		game_tip = new AnimatedSprite(0, 0, Res.GAME_TIP, getVertexBufferObjectManager());
		game_tip.setCentrePositionX(this.getCameraCenterX());
		game_tip.setBottomPositionY(this.getCameraBottomY()-60);
		this.attachChild(game_tip);
		game_tip.setZIndex(pZIndex_top);
		
	}

	/**
	 * 初始化blocks
	 */
	private void initBlocks() {
		Random mRandom = new Random();

		int blackIndex = 0;
		// 初始blocks,先创建4*5表格,使用时候再一行行增加
		for (int row = 0; row < linesLength; row++) {// 行
			// 一行blocks
			Block[] rowBolcks = new Block[4];
			// 随机一个黑块所在位置
			blackIndex = mRandom.nextInt(4);
			for (int column = 0; column < 4; column++) {// 列
				rowBolcks[column] = new Block(this, row, column, blockWidth,
						blockHight, blackIndex, getVertexBufferObjectManager());
				this.attachChild(rowBolcks[column]);
			}
			blockList.add(rowBolcks);
		}
	}

	/**
	 * 重来时,重置游戏相关
	 */
	public void resetGame() {
		gameStatus = ConstantUtil.GAME_START;
		linesLength = 5;
		moveNum = 0;
		mSuccGroup.showItems(false);
		timerText.setText("00.000\"");
		timerText.setVisible(true);
		mTimerTool.resetTimer();
		mSuccGroup.setVisible(false);
		game_tip.setVisible(true);
		deletBlocks();
		initBlocks();
		// 按Z索引排序一下上下层顺序
		this.sortChildren();
	}

	/**
	 * 创建添加新的一行
	 */
	private void createNewRowBolcks() {
		// 超出屏幕没用的部分移除掉
		if (blockList.size() > 5) {
			Block[] rowBolcks = blockList.get(0);
			for (Block block : rowBolcks) {
				block.detachSelf();
			}
			blockList.remove(0);
		}

		// 目前顶部的一行块的Y坐标
		float topBlocksY = blockList.get(blockList.size() - 1)[0].getY();

		// 一行块
		Block[] rowBolcks = new Block[4];
		int blackIndex = new Random().nextInt(4);
		for (int column = 0; column < 4; column++) {
			// 新创建 Block
			rowBolcks[column] = new Block(this, column, blockWidth, blockHight,
					blackIndex, getVertexBufferObjectManager());
			// 设置Y坐标
			rowBolcks[column].setBottomPositionY(topBlocksY - 1);
			// 设置已经是第几行
			rowBolcks[column].setRow(linesLength);
			this.attachChild(rowBolcks[column]);
		}
		blockList.add(rowBolcks);

		// 按Z索引排序一下上下层顺序
		this.sortChildren();

		// 当前生成的块的行数增加
		linesLength++;
	}

	/**
	 * 最后一个移动,游戏胜利
	 * 
	 * @param pBlock
	 */
	private void gameSucc(Block pBlock) {
		gameStatus = ConstantUtil.GAME_OVER;
		// 最后一个移动,游戏胜利
		moveDown(pBlock, 0);
		// 停止计时
		mTimerTool.stop();
		// 显示游戏胜利画面
		mSuccGroup.showItems(true);
		// 隐藏显示时间的Text
		timerText.setVisible(false);
	}

	/**
	 * 点击错误后弹出红色的失败界面,游戏失败
	 */
	private void gameFail() {
		gameStatus = ConstantUtil.GAME_OVER;
		// 游戏失败,停止计时
		mTimerTool.stop();
		// 隐藏显示时间的Text
		timerText.setVisible(false);
	}

	/**
	 * 游戏快到顶部时开始出现绿色的胜利界面
	 */
	private void showSuccGroup() {
		// 目前顶部的一行块的Y坐标
		float topBlocksY = blockList.get(blockList.size() - 1)[0].getY();
		mSuccGroup.setBottomPositionY(topBlocksY);
		mSuccGroup.setVisible(true);
	}

	/**
	 * 移除剩下的block,清空blockList
	 */
	private void deletBlocks() {
		for (Block[] rowBlocks : blockList) {
			for (Block block : rowBlocks) {
				this.detachChild(block);
			}
		}

		blockList.clear();
	}

	/**
	 * 点击到Block时进行的逻辑处理
	 * 
	 * @param pBlock
	 *            所点击的block
	 */
	public void touchBlock(Block pBlock) {

		if (gameStatus == ConstantUtil.GAME_START) {

			if (pBlock.getRow() == moveNum + 2) {// 表示是在底部往上数的倒数第三行
				// 判断是不是点击了该点击的黑块的上一格,如果是,我们也判定这是正确点击了,做出相应移动
				upBlockTouch(pBlock);
			} else if (pBlock.getRow() == moveNum + 1) {// 表示是在底部往上数的倒数第二行
				if (pBlock.getColorType() == ConstantUtil.COLOR_BLACK) {
					if (linesLength == moveNum + 2) {
						// 游戏胜利
						gameSucc(pBlock);
					} else {
						// 整体blocks下移
						moveDown(pBlock, 1);
					}

				} else if (pBlock.getColorType() == ConstantUtil.COLOR_WHITE) {
					// 误点了白块,游戏失败
					gameFail();
					// 失败时pBlock的一个闪红效果
					LoopEntityModifier loop = failAction();
					// 播放效果
					pBlock.registerEntityModifier(loop);
				}

			}

		}

	}

	/**
	 * 失败时pBlock的一个闪红效果
	 * @return
	 */
	private LoopEntityModifier failAction() {
		SequenceEntityModifier sequence = new SequenceEntityModifier(
				new ColorModifier(0.1f, Color.RED, Color.WHITE),
				new DelayModifier(0.07f), new ColorModifier(0.1f,
						Color.WHITE, Color.RED));
		LoopEntityModifier loop = new LoopEntityModifier(sequence,
				3, new IEntityModifierListener() {

					@Override
					public void onModifierStarted(
							IModifier<IEntity> pModifier,
							IEntity pItem) {
					}
					@Override
					public void onModifierFinished(
							IModifier<IEntity> pModifier,
							IEntity pItem) {
						//效果播放完毕,显示游戏失败界面
						mFailGroup.showView();
					}
				});
		return loop;
	}

	/**
	 * 判断是不是点击了该点击的黑块的上一格,如果是,我们也判定这是正确点击了,做出相应移动
	 * 
	 * @param pBlock
	 *            所被点击的块
	 */
	private void upBlockTouch(Block pBlock) {
		int touchColumn = pBlock.getColumn();
		for (Block[] blocks : blockList) {
			for (Block block : blocks) {
				if (block.getRow() == moveNum + 1
						&& block.getColorType() == ConstantUtil.COLOR_BLACK) {
					if (block.getColumn() == touchColumn) {
						// 整体blocks下移
						moveDown(block, 1);
					}
					return;
				}
			}

		}
	}

	/**
	 * 正确点击该点击的黑块,或者上一行的块,整体向下移动、创建新的一样块,改变黑块颜色
	 * 
	 * @param pBlock
	 * @param stepNum
	 *            一般为1,到最后出现绿色成功界面的最后一步为0
	 */
	private void moveDown(Block pBlock, int stepNum) {

		if(moveNum == 0){
			// 开始计时
			mTimerTool.start();
			// 隐藏提示文字
			game_tip.setVisible(false);
		}
		

		if (moveNum < ConstantUtil.LINES_LEN) {
			// 创建添加新的一行
			createNewRowBolcks();
		} else if (moveNum == ConstantUtil.LINES_LEN) {
			// 开始显示绿色胜利界面,即将胜利,但还没有胜利
			showSuccGroup();
		}

		// 被点击的黑块变灰
		pBlock.setColor(0.63f, 0.63f, 0.63f);
		pBlock.registerEntityModifier(new ScaleModifier(0.1f, 0.5f, 1.0f));

		// 移动步数加1
		moveNum++;
		// 需要移动的距离
		float moveDistance = this.getCameraHeight() - blockHight * stepNum
				- pBlock.getY();
		for (Block[] rowBlocks : blockList) {
			for (Block block : rowBlocks) {
				// 遍历,所有block向下移动指定距离
				moveToY(block, moveDistance);
			}
		}

		// 快到胜利出现绿色胜利界面时,胜利界面跟着移动
		if (mSuccGroup.isVisible()) {
			moveToY(mSuccGroup, moveDistance);
		}
	}

	/**
	 * 在Y轴方向上,由当前位置移动指定的距离
	 * 
	 * @param entity
	 *            要移动的实体
	 * @param moveDistance
	 *            需要移动的距离
	 */
	private void moveToY(IEntity entity, float moveDistance) {
		float pFromY = entity.getY();
		float pToY = pFromY + moveDistance;
		entity.registerEntityModifier(new MoveYModifier(0.1f, pFromY, pToY));
	}

	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			this.getActivity().finish();
			return true;
		}
		return false;
	}
	
	@Override
	public void onSceneResume() {
		super.onSceneResume();
		this.setIgnoreUpdate(false);
	}
	
	@Override
	public void onScenePause() {
		super.onScenePause();
		this.setIgnoreUpdate(true);
	}

	@Override
	public void onSceneDestroy() {
		super.onSceneDestroy();

		LogUtil.d("onSceneDestroy");
	}

	// ================================================================
	/**
	 * 获取镜头的 右边 x 坐标
	 */
	public float getCameraRightX() {
		return this.getCameraWidth();
	}

	/**
	 * 获取镜头的 中点 x 坐标
	 * 
	 * @return
	 */
	public float getCameraCenterX() {
		return this.getCameraWidth() * 0.5f;
	}

	/**
	 * 获取镜头底部Y坐标
	 * 
	 * @return
	 */
	public float getCameraBottomY() {
		return this.getCameraHeight();
	}

	/**
	 * 获取镜头中心Y坐标
	 * 
	 * @return
	 */
	public float getCameraCenterY() {
		return this.getCameraHeight() * 0.5f;
	}

}

  

池彬宁:负责代码的实现(二)

blogs:www.cnblogs.com/Spr1ngxx  

codes:

package com.orange.block.res;

public class Res {

	public static final String XML_GFX_GAME = "gfx/game.xml";

	public static final String[] ALL_XML = new String[]{
		Res.XML_GFX_GAME
	};

	public static final String BTN_AGAIN = "btn_again";

	public static final String BTN_BACK = "btn_back";

	public static final String BTN_START = "btn_start";

	public static final String GAME_MODEL = "game_model";

	public static final String GAME_TIP = "game_tip";

	public static final String GAME_TITEL = "game_titel";

}

  

package com.orange.block.entity;

import com.orange.entity.primitive.Rectangle;
import com.orange.input.touch.TouchEvent;
import com.orange.opengl.vbo.VertexBufferObjectManager;
import com.orange.util.color.Color;
import com.orange.block.scene.GameScene;
import com.orange.block.util.ConstantUtil;

/**
 * 单个块元素
 * 
 * @author lch
 * 
 */
public class Block extends Rectangle {
	// 游戏场景
	private GameScene mGameScene;
	// 此block的颜色类型,白色还是黑色?
	private int colorType;
	// block 所在的行
	private int row;
	// block 所在的列
	private int column;

	// ======================get&set========================
	public int getRow() {
		return row;
	}
	public void setRow(int row) {
		this.row = row;
	}
	public int getColumn() {
		return column;
	}
	public int getColorType() {
		return colorType;
	}
	// =====================================================

	/**
	 * 构造器1,初始化blocks时用到
	 * @param pGameScene 游戏场景
	 * @param row block所在的行
	 * @param column block所在的列
	 * @param pWidth block的宽
	 * @param pHeight block的高
	 * @param blackIndex 用来确定是否是黑块,如果blackIndex == column时设为黑块
	 * @param pVertexBufferObjectManager
	 */
	public Block(GameScene pGameScene, int row, int column, float pWidth,
			float pHeight, int blackIndex,
			VertexBufferObjectManager pVertexBufferObjectManager) {
		super(column * pWidth, (3 - row) * pHeight, pWidth - 1, pHeight - 1,
				pVertexBufferObjectManager);
		this.mGameScene = pGameScene;
		this.row = row;
		this.column = column;
		if (row == 0) {
			// 第一行设置为黄块
			this.setColor(Color.YELLOW);
		} else {
			// 初始化block的颜色数据,是白块还是黑块?
			initBlockData(column, blackIndex);
		}
		// 设置可以相应触碰事件
		this.setIgnoreTouch(false);
	}

	/**
	 * 构造器2,新增blocks时用到
	 * @param pGameScene 游戏场景
	 * @param column block所在的列
	 * @param pWidth block的宽
	 * @param pHeight block的高
	 * @param blackIndex 来确定是否是黑块,如果blackIndex == column时设为黑块
	 * @param pVertexBufferObjectManager
	 */
	public Block(GameScene pGameScene, int column, float pWidth, float pHeight,
			int blackIndex, VertexBufferObjectManager pVertexBufferObjectManager) {
		super(column * pWidth, 0, pWidth - 1, pHeight - 1,
				pVertexBufferObjectManager);
		this.mGameScene = pGameScene;
		this.column = column;
		// 初始化block的颜色数据,是白块还是黑块?
		initBlockData(column, blackIndex);
		// 设置可以相应触碰事件
		this.setIgnoreTouch(false);
	}
	
	/**
	 * 初始化block的颜色数据,是白块还是黑块?
	 * @param column
	 * @param blackIndex
	 */
	private void initBlockData(int column, int blackIndex) {
		if (blackIndex == column) {
			// 设置为黑块
			this.setColor(Color.BLACK);
			this.colorType = ConstantUtil.COLOR_BLACK;
		} else {
			// 设置为白块
			this.setColor(Color.WHITE);
			this.colorType = ConstantUtil.COLOR_WHITE;
		}
	}

	@Override
	public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
			float pTouchAreaLocalX, float pTouchAreaLocalY) {
		// 触碰事件监听
		if (pSceneTouchEvent.isActionDown()) {
			// 点击到Block时进行的逻辑处理
			mGameScene.touchBlock(this);
		}
		return true;
	}
}

  

package com.orange.block.entity;

import android.app.AlertDialog;
import android.content.DialogInterface;

import com.orange.entity.group.EntityGroup;
import com.orange.entity.modifier.ScaleModifier;
import com.orange.entity.primitive.Rectangle;
import com.orange.entity.sprite.AnimatedSprite;
import com.orange.entity.sprite.ButtonSprite;
import com.orange.entity.sprite.ButtonSprite.OnClickListener;
import com.orange.entity.text.Text;
import com.orange.res.FontRes;
import com.orange.util.color.Color;
import com.orange.block.control.TimerTool;
import com.orange.block.res.Res;
import com.orange.block.scene.GameScene;
import com.orange.block.util.ConstantUtil;
import com.orange.block.util.SharedUtil;

/**
 * 失败界面
 * 
 * @author lch
 * 
 */
public class FailGroup extends EntityGroup {

    private GameScene mGameScene;
    private Rectangle bgRect;

    private AnimatedSprite titelSprite;
    private AnimatedSprite modelSprite;

    private ButtonSprite btn_back; // 返回按钮
    private ButtonSprite btn_again;// 重来按钮

    private Text txt_big;
    private Text txt_small;

    public FailGroup(float pWidth, float pHeight, GameScene pGameScene) {
        super(pWidth, pHeight, pGameScene);
        this.mGameScene = pGameScene;
        initView();
    }

    private void initView() {
        // 背景
        bgRect = new Rectangle(0, 0, this.getWidth(), this.getHeight(),
                this.getVertexBufferObjectManager());
        this.attachChild(bgRect);
        bgRect.setColor(Color.RED);
        // 标题 “别踩白块儿”
        titelSprite = new AnimatedSprite(0, 10, Res.GAME_TITEL,
                this.getVertexBufferObjectManager());
        titelSprite.setRightPositionX(this.getRightX() - 10);
        this.attachChild(titelSprite);

        // 模式 “经典模式”
        modelSprite = new AnimatedSprite(0, 150, Res.GAME_MODEL,
                this.getVertexBufferObjectManager());
        modelSprite.setCentrePositionX(this.getCentreX());
        this.attachChild(modelSprite);

        // 大字
        txt_big = new Text(0, modelSprite.getBottomY() + 130,
                FontRes.getFont(ConstantUtil.FONT_NAME_RESULT), "", 15,
                this.getVertexBufferObjectManager());
        this.attachChild(txt_big);
        txt_big.setScale(1.9f);
        // 小字
        txt_small = new Text(0, txt_big.getBottomY() + 30,
                FontRes.getFont(ConstantUtil.FONT_NAME_RESULT), "", 15,
                this.getVertexBufferObjectManager());
        this.attachChild(txt_small);
        txt_small.setScale(0.7f);
        // 返回按钮
        btn_back = new ButtonSprite(80, 0, Res.BTN_BACK,
                this.getVertexBufferObjectManager());
        btn_back.setBottomPositionY(this.getBottomY() - 50);
        btn_back.setIgnoreTouch(false);
        this.attachChild(btn_back);
        btn_back.setOnClickListener(onClickListener);
        // 重来按钮
        btn_again = new ButtonSprite(0, 0, Res.BTN_AGAIN,
                this.getVertexBufferObjectManager());
        btn_again.setRightPositionX(this.getRightX() - 80);
        btn_again.setBottomPositionY(this.getBottomY() - 50);
        btn_again.setIgnoreTouch(false);
        this.attachChild(btn_again);
        btn_again.setOnClickListener(onClickListener);
        
        resetView();
    }
    
    

    public void showView() {
        setBtnEnable(true);
        this.setVisible(true);
        updateBigTxt("失败了!");

        if (SharedUtil.getRecord(getActivity()) > 0) {
            TimerTool mTimerTool = mGameScene.getmTimerTool();
            updateSmallTxt("最佳: "
                    + mTimerTool.millisToTimer(SharedUtil
                            .getRecord(getActivity())));
        }
        
        ScaleModifier scaleModifier = new ScaleModifier(0.2f, 0.0f, 1.0f);
        this.registerEntityModifier(scaleModifier);

    }

    private void updateBigTxt(String pText) {
        txt_big.setText(pText);
        txt_big.setCentrePositionX(this.getCentreX());
    }

    private void updateSmallTxt(String pText) {
        txt_small.setText(pText);
        txt_small.setCentrePositionX(this.getCentreX());
    }

    private OnClickListener onClickListener = new OnClickListener() {

        @Override
        public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
                float pTouchAreaLocalY) {
            if (btn_back == pButtonSprite) {
                showDialog();
            } else if (btn_again == pButtonSprite) {
                resetView();
                mGameScene.resetGame();
            }

        }

    };
    
    private void resetView(){
        this.setScale(0);
        this.setVisible(false);
        setBtnEnable(false);
    }

    private void setBtnEnable(boolean isEnable) {
        btn_back.setEnabled(isEnable);
        btn_again.setEnabled(isEnable);
    }
    
    /**
     * 退出游戏确认对话框
     */
    private void showDialog() {
        getActivity().runOnUiThread(new Runnable() {

            @Override
            public void run() {

                new AlertDialog.Builder(getActivity())
                        .setTitle("退出游戏")
                        .setMessage("是否要退出游戏!")
                        .setPositiveButton("确定",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        getActivity().finish();

                                    }
                                }).setNegativeButton("取消", null).show();
            }
        });
    }
}
package com.orange.block.entity;

import android.app.AlertDialog;
import android.content.DialogInterface;

import com.orange.entity.group.EntityGroup;
import com.orange.entity.primitive.Rectangle;
import com.orange.entity.sprite.AnimatedSprite;
import com.orange.entity.sprite.ButtonSprite;
import com.orange.entity.sprite.ButtonSprite.OnClickListener;
import com.orange.entity.text.Text;
import com.orange.res.FontRes;
import com.orange.util.color.Color;
import com.orange.block.control.TimerTool;
import com.orange.block.res.Res;
import com.orange.block.scene.GameScene;
import com.orange.block.util.ConstantUtil;
import com.orange.block.util.SharedUtil;

/**
 * 成功界面
 * 
 * @author lch
 * 
 */
public class SuccGroup extends EntityGroup {

    private GameScene mGameScene;
    private Rectangle bgRect;

    private AnimatedSprite titelSprite;
    private AnimatedSprite modelSprite;

    private ButtonSprite btn_back; // 返回按钮
    private ButtonSprite btn_again;// 重来按钮

    private Text txt_big;
    private Text txt_small;

    public SuccGroup(float pWidth, float pHeight, GameScene pGameScene) {
        super(pWidth, pHeight, pGameScene);
        initView();
        this.mGameScene = pGameScene;
    }

    private void initView() {
        // 背景
        bgRect = new Rectangle(0, 0, this.getWidth(), this.getHeight(),
                this.getVertexBufferObjectManager());
        this.attachChild(bgRect);
        bgRect.setColor(Color.GREEN);
        // 标题 “别踩白块儿”
        titelSprite = new AnimatedSprite(0, 10, Res.GAME_TITEL,
                this.getVertexBufferObjectManager());
        titelSprite.setRightPositionX(this.getRightX() - 10);
        this.attachChild(titelSprite);
        titelSprite.setVisible(false);

        // 模式 “经典模式”
        modelSprite = new AnimatedSprite(0, 150, Res.GAME_MODEL,
                this.getVertexBufferObjectManager());
        modelSprite.setCentrePositionX(this.getCentreX());
        this.attachChild(modelSprite);
        modelSprite.setVisible(false);

        // 大字
        txt_big = new Text(0, modelSprite.getBottomY() + 100,
                FontRes.getFont(ConstantUtil.FONT_NAME_RESULT), "", 15,
                this.getVertexBufferObjectManager());
        this.attachChild(txt_big);
        txt_big.setScale(1.5f);
        txt_big.setVisible(false);
        // 小字
        txt_small = new Text(0, txt_big.getBottomY() + 10,
                FontRes.getFont(ConstantUtil.FONT_NAME_RESULT), "", 15,
                this.getVertexBufferObjectManager());
        this.attachChild(txt_small);
        txt_small.setScale(0.7f);
        txt_small.setVisible(false);
        // 返回按钮
        btn_back = new ButtonSprite(80, 0, Res.BTN_BACK,
                this.getVertexBufferObjectManager());
        btn_back.setBottomPositionY(this.getBottomY() - 50);
        btn_back.setIgnoreTouch(false);
        this.attachChild(btn_back);
        btn_back.setOnClickListener(onClickListener);
        btn_back.setVisible(false);
        // 重来按钮
        btn_again = new ButtonSprite(0, 0, Res.BTN_AGAIN,
                this.getVertexBufferObjectManager());
        btn_again.setRightPositionX(this.getRightX() - 80);
        btn_again.setBottomPositionY(this.getBottomY() - 50);
        btn_again.setIgnoreTouch(false);
        this.attachChild(btn_again);
        btn_again.setOnClickListener(onClickListener);
        btn_again.setVisible(false);
    }

    public void showItems(boolean pVisible) {
        titelSprite.setVisible(pVisible);
        modelSprite.setVisible(pVisible);
        txt_big.setVisible(pVisible);
        txt_small.setVisible(pVisible);
        btn_back.setVisible(pVisible);
        btn_again.setVisible(pVisible);

        if (pVisible) {
            TimerTool mTimerTool = mGameScene.getmTimerTool();
            updateBigTxt(mTimerTool.millisToTimer(mTimerTool
                    .getMillisPass()));

            long mMillisPass = mTimerTool.getMillisPass();

            if (mMillisPass < SharedUtil.getRecord(getActivity())
                    || SharedUtil.getRecord(getActivity()) == 0) {
                // 新记录
                updateSmallTxt("新记录");
                SharedUtil.setRecord(getActivity(), mMillisPass);

            } else {

                updateSmallTxt("最佳: "
                        + mTimerTool.millisToTimer(SharedUtil
                                .getRecord(getActivity())));
            }
        }

    }

    public void updateBigTxt(String pText) {
        txt_big.setText(pText);
        txt_big.setCentrePositionX(this.getCentreX());
    }

    public void updateSmallTxt(String pText) {
        txt_small.setText(pText);
        txt_small.setCentrePositionX(this.getCentreX());
    }

    private OnClickListener onClickListener = new OnClickListener() {

        @Override
        public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
                float pTouchAreaLocalY) {
            if (btn_back == pButtonSprite) {
                showDialog();
            } else if (btn_again == pButtonSprite) {
                mGameScene.resetGame();
            }

        }
    };

    /**
     * 退出游戏确认对话框
     */
    private void showDialog() {
        getActivity().runOnUiThread(new Runnable() {

            @Override
            public void run() {

                new AlertDialog.Builder(getActivity())
                        .setTitle("退出游戏")
                        .setMessage("是否要退出游戏!")
                        .setPositiveButton("确定",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        getActivity().finish();

                                    }
                                }).setNegativeButton("取消", null).show();
            }
        });
    }
}

 

贺邦:负责代码的调试与测试

blogs:http://www.cnblogs.com/L1nke/

codes:

 1 public class Test { 
 2 private int fAmount;
 3 private String fCurrency;
 4 
 5 public Test(int amount, String currency) { 
 6 fAmount= amount; 
 7 fCurrency= currency; 
 8 } 
 9 
10 public int amount() { 
11 return fAmount; 
12 } 
13 
14 public String currency() { 
15 return fCurrency; 
16 } 
17 
18 public Test add(Test m) { 
19 return new Test(amount()+m.amount(), currency()); 
20 } 
21 
22 public boolean equals(Object anObject) { 
23 if (anObject instanceof Test) { 
24 Test aMoney= (Test)anObject; 
25 return aMoney.currency().equals(currency()) 
26 && amount() == aMoney.amount(); 
27 } 
28 return false; 
29 } 
30 } 

 

步骤

耗时

百分比

需求分析

 20min  3.8%

设计

50min   9.6%

代码实现

300min   57.7%

测试

120min   23.1%

分析总结

 30min  5.8%

未完成

标签:

原文地址:http://www.cnblogs.com/Spr1ngxx/p/4550434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!