سورس بازی Ice Maze در اندروید
چهارشنبه 25 اسفند 1395در این بازی به این صورت است که یک توب در جهت بالا و پایین راست و چپ باید حرکت کنه تا به آتش ها برسه و هر چه قدر زودتر انجام بده امتیاز بیشتر و به مرحله بعدی بره هدف از این بازی حرکت بر روی محور x و محور y در اندروید است.
چون کلاس ها و لایه ها زیاداست من به عنوان نمونه یکی از آن ها را توضیح می دهم و اگر سوالی بود در انجمن اندروید بپرسید پاسخ داده خواهد شد
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="1000" />
این برای حرکت به سمت راست و چپ است در این نمونه از انیمیشن استفاده شده است.
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="1000" />
package com.bugfullabs.icemaze;
import javax.microedition.khronos.opengles.GL10;
import org.andengine.engine.camera.Camera;
import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy;
import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.FadeOutModifier;
import org.andengine.entity.modifier.IEntityModifier.IEntityModifierListener;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.entity.modifier.MoveYModifier;
import org.andengine.entity.scene.IOnSceneTouchListener;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.menu.MenuScene;
import org.andengine.entity.scene.menu.MenuScene.IOnMenuItemClickListener;
import org.andengine.entity.scene.menu.item.IMenuItem;
import org.andengine.entity.scene.menu.item.SpriteMenuItem;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.text.Text;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.font.StrokeFont;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.andengine.opengl.texture.region.TextureRegion;
import org.andengine.ui.activity.SimpleBaseGameActivity;
import org.andengine.util.HorizontalAlign;
import org.andengine.util.VerticalAlign;
import org.andengine.util.debug.Debug;
import org.andengine.util.modifier.IModifier;
import org.andengine.util.modifier.ease.EaseBackOut;
import org.andengine.util.modifier.ease.EaseSineIn;
import org.andengine.util.texturepack.TexturePack;
import org.andengine.util.texturepack.TexturePackLoader;
import org.andengine.util.texturepack.TexturePackTextureRegionLibrary;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.Display;
import android.view.KeyEvent;
import com.bugfullabs.icemaze.game.GameScene;
import com.bugfullabs.icemaze.game.IOnFinishListener;
import com.bugfullabs.icemaze.game.PlayerEntity;
import com.bugfullabs.icemaze.level.Level;
import com.bugfullabs.icemaze.level.LevelFileReader;
import com.bugfullabs.icemaze.level.LevelSceneFactory;
import com.bugfullabs.icemaze.util.AlignedText;
/**
*
* @author Bugful Labs
* @author Wojciech Gruszka
* @email wojciech@bugfullabs.pl
*
*/
//TODO: FADE TRANSITION BETWEEN LEVELS
public class GameActivity extends SimpleBaseGameActivity implements IOnMenuItemClickListener, IOnSceneTouchListener{
private static final int MENU_RESET = 0;
private static final int MENU_MAIN = 1;
private static final int MENU_RESUME = 2;
private int cameraHeight = 480;
private int cameraWidth = 800;
private Camera mCamera;
private GameScene mGameScene;
private MenuScene mPauseScene;
private int starCounter;
private TexturePack mMenuTexturePack;
private TexturePack mGameTexturePack;
private TexturePackTextureRegionLibrary mMenuTextures;
private BitmapTextureAtlas mFontTexture;
private StrokeFont mFont;
private BitmapTextureAtlas mBigFontTexture;
private StrokeFont mBigFont;
private Sprite mPauseButton;
private Sprite mRestartButton;
private Sprite mScoreBackground;
private int time;
private boolean timerStarted = false;
private boolean nextLevel = false;
private int tiles;
private Text mTime;
private Text mTiles;
private Text mTextScore;
private Text mTextHighScore;
private static Level level;
private SharedPreferences mSettings;
private SharedPreferences mScore;
private SharedPreferences.Editor mScoreEditor;
private int steering;
private boolean canExit = false;
private Text mCTiles;
private int maxTiles;
private boolean isKey = false;
private BitmapTextureAtlas bgTextureAtlas;
private TextureRegion bgTextureRegion;
private boolean isAnim = false;
private int objSize;
/* BASE ENGINE & GAME FUNCTIONS */
@Override
public EngineOptions onCreateEngineOptions() {
Display disp = getWindowManager().getDefaultDisplay();
cameraWidth = disp.getWidth();
cameraHeight = disp.getHeight();
objSize = cameraWidth/25;
int tmp = cameraHeight/15;
if(objSize <= tmp){
}else{
objSize = tmp;
}
mCamera = new Camera(0, 0 , cameraWidth, cameraHeight);
return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), mCamera);
}
@Override
protected void onCreateResources() {
TexturePackLoader tpl = new TexturePackLoader(getAssets(), getTextureManager());
/* FONT */
mFontTexture = new BitmapTextureAtlas(getTextureManager(), 512, 512, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
Typeface typeface = Typeface.createFromAsset(getAssets(), "font/FOO.ttf");
mFont = new StrokeFont(getFontManager(), mFontTexture, typeface, objSize, true, Color.WHITE, 2, Color.BLACK);
mFontTexture.load();
mFont.load();
mBigFontTexture = new BitmapTextureAtlas(getTextureManager() ,512, 512, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
typeface = Typeface.createFromAsset(getAssets(), "font/FOO.ttf");
mBigFont = new StrokeFont(getFontManager(), mBigFontTexture, typeface, objSize*2.2f, true, Color.WHITE, 2, Color.BLACK);
mBigFontTexture.load();
mBigFont.load();
/* MENU ITEMS */
try {
mMenuTexturePack = tpl.loadFromAsset("gfx/menu/gamemenu.xml", "gfx/menu/");
mMenuTexturePack.loadTexture();
mMenuTextures = mMenuTexturePack.getTexturePackTextureRegionLibrary();
Debug.i("DONE");
} catch (Exception e) {
e.printStackTrace();
}
/* GAME ITEMS */
try{
mGameTexturePack = tpl.loadFromAsset("gfx/game/" + level.getLevelTexture(), "gfx/game/");
mGameTexturePack.loadTexture();
}catch(Exception e){
e.printStackTrace();
}
/* BACKGROUND */
bgTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32, TextureOptions.REPEATING_BILINEAR_PREMULTIPLYALPHA);
bgTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(bgTextureAtlas, this, "gfx/game/bg.png", 0, 0);
bgTextureAtlas.load();
bgTextureRegion.setTextureSize(cameraWidth, cameraHeight);
}
@Override
protected Scene onCreateScene() {
if(level == null){
this.startActivity(new Intent(GameActivity.this, MainMenuActivity.class));
this.finish();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
}
/* SHARED PREFS CONFIG */
mSettings = getSharedPreferences(GameValues.SETTINGS_FILE, 0);
this.steering = mSettings.getInt("steering", GameValues.STEERING_TOUCH);
mScore = getSharedPreferences(GameValues.SCORE_FILE, 0);
mScoreEditor = mScore.edit();
isAnim = mSettings.getBoolean("anim", true);
/* STARS COUNTER */
starCounter = 0;
/* MENU SCENE */
createMenuScene();
/* TIMER */
time = 0;
getEngine().registerUpdateHandler(new TimerHandler(1.0f, true, new ITimerCallback() {
@Override
public void onTimePassed(TimerHandler pTimerHandler) {
if(timerStarted)
time++;
}
}));
/* GAME SCENE */
mGameScene = LevelSceneFactory.createScene(this, level, bgTextureRegion, mGameTexturePack);
//PAUSE BUTTON
mPauseButton = new Sprite(cameraWidth-objSize, 0, objSize, objSize, mMenuTextures.get(GameValues.PAUSE_ID), getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionUp()){
doPause();
return true;
}
return false;
}
};
mPauseButton.setZIndex(10);
mGameScene.registerTouchArea(mPauseButton);
mGameScene.attachChild(mPauseButton);
//RESTART BUTTON
mRestartButton = new Sprite(0, 0, objSize, objSize, mMenuTextures.get(GameValues.RESTART_ID), getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionUp()){
//ON Restart
onGameRestart();
}
return false;
}
};
mRestartButton.setZIndex(10);
mGameScene.registerTouchArea(mRestartButton);
mGameScene.attachChild(mRestartButton);
maxTiles = level.getTiles();
mCTiles = new Text(objSize, 0, mFont, getString(R.string.tiles) + ": 0/" + Integer.toString(maxTiles), 15, getVertexBufferObjectManager());
mCTiles.setZIndex(10);
mGameScene.attachChild(mCTiles);
mGameScene.setOnSceneTouchListener(this);
this.mGameScene.setTouchAreaBindingOnActionDownEnabled(true);
/* SCORE INFO */
mScoreBackground = new Sprite(60, -cameraHeight, cameraWidth-120, cameraHeight, mMenuTextures.get(GameValues.SCOREBG_ID),getVertexBufferObjectManager());
mScoreBackground.setZIndex(11);
//SCORES
/* 800x480
* BG - 680x380
*
mTime = new Text(40, 120, mFont, getString(R.string.time) + ": XX:XX", 12, getVertexBufferObjectManager());
mTiles = new Text(350, 120, mFont, getString(R.string.tiles) + ": XXX/XXX", 15, getVertexBufferObjectManager());
mTextScore = new Text(40, 170, mFont, getString(R.string.score) + ": XXXXX", 14, getVertexBufferObjectManager());
mTextHighScore = new Text(350, 170, mFont, getString(R.string.high) + ": XXXXX", 19, getVertexBufferObjectManager());
*
*/
/*
* 1024x768
* BG - 904x668
*
*/
AlignedText text = new AlignedText(0, cameraWidth/40, mBigFont, getString(R.string.great), HorizontalAlign.CENTER, VerticalAlign.CENTER, cameraWidth-120, 100, this);
mTime = new Text(40, text.getHeight() + cameraWidth/40 + 1.5f*objSize , mFont, getString(R.string.time) + ": XX:XX", 12, getVertexBufferObjectManager());
mTextScore = new Text(40, text.getHeight() + cameraWidth/40 + 2*objSize + mTime.getHeight(), mFont, getString(R.string.score) + ": XXXXX", 14, getVertexBufferObjectManager());
//x = ;
//y = ;
mTiles = new Text(mTextScore.getLineWidthMaximum() + 60 , text.getHeight() + cameraWidth/40 + 1.5f*objSize, mFont, getString(R.string.tiles) + ": XXX/XXX", 15, getVertexBufferObjectManager());
mTextHighScore = new Text(mTextScore.getLineWidthMaximum() + 60, text.getHeight() + cameraWidth/40 + 2*objSize + mTime.getHeight(), mFont, getString(R.string.high) + ": XXXXX", 19, getVertexBufferObjectManager());
float height = text.getHeight() + cameraWidth/40 + 2.5f*objSize + 2*mTime.getHeight() + (cameraWidth/6.25f) + cameraWidth/25;
if(mTextHighScore.getWidth() + mTextScore.getLineWidthMaximum() + 60 > mScoreBackground.getWidth()){
height = text.getHeight() + cameraWidth/40 + 3.0f*objSize + 3*mTime.getHeight() + (cameraWidth/6.25f) + cameraWidth/25;
mTextHighScore.setPosition(40, text.getHeight() + cameraWidth/40 + 2.5f*objSize + 2*mTime.getHeight());
}
mTime.setZIndex(12);
mTiles.setZIndex(12);
mTextScore.setZIndex(12);
text.setZIndex(13);
mScoreBackground.setHeight(height);
//BUTTONS
Sprite restart = new Sprite((mScoreBackground.getWidth()/2)-((cameraWidth/6.25f)*2), mScoreBackground.getHeight()-(cameraWidth/6.25f+cameraWidth/25), cameraWidth/6.25f, cameraWidth/6.25f, mMenuTextures.get(GameValues.RESTART_ID), getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionUp()){
onGameRestart();
mScoreBackground.registerEntityModifier(new MoveYModifier(1.7f, mScoreBackground.getY(), -(cameraHeight), EaseSineIn.getInstance()));
}
return true;
}
};
Sprite menu = new Sprite((mScoreBackground.getWidth()/2)-(cameraWidth/12.5f), mScoreBackground.getHeight()-(cameraWidth/6.25f+cameraWidth/25), cameraWidth/6.25f, cameraWidth/6.25f, mMenuTextures.get(GameValues.MENU_ID), getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionUp()){
GameActivity.this.startActivity(new Intent(GameActivity.this, MainMenuActivity.class));
GameActivity.this.finish();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
}
return true;
}
};
Sprite next = new Sprite((mScoreBackground.getWidth()/2)+(cameraWidth/6.25f), mScoreBackground.getHeight()-(cameraWidth/6.25f+cameraWidth/25), cameraWidth/6.25f, cameraWidth/6.25f, mMenuTextures.get(GameValues.NEXT_ID), getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionUp()){
mScoreBackground.registerEntityModifier(new MoveYModifier(1.7f, mScoreBackground.getY(), -(cameraHeight), new IEntityModifierListener() {
@Override
public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
}
@Override
public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
if(!nextLevel){
nextLevel = true;
nextLevel();
}
}
}, EaseSineIn.getInstance()));
}
return true;
}
};
mScoreBackground.attachChild(restart);
mScoreBackground.attachChild(menu);
mScoreBackground.attachChild(next);
mScoreBackground.attachChild(text);
mScoreBackground.attachChild(mTime);
mScoreBackground.attachChild(mTiles);
mScoreBackground.attachChild(mTextScore);
mScoreBackground.attachChild(mTextHighScore);
mGameScene.registerTouchArea(next);
mGameScene.registerTouchArea(menu);
mGameScene.registerTouchArea(restart);
mGameScene.sortChildren();
mGameScene.attachChild(mScoreBackground);
return mGameScene;
}
/* MENU */
protected void createMenuScene() {
this.mPauseScene = new MenuScene(this.mCamera);
final SpriteMenuItem resetMenuItem = new SpriteMenuItem(MENU_RESET, mMenuTextures.get(GameValues.RESTART_ID), getVertexBufferObjectManager());
resetMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mPauseScene.addMenuItem(resetMenuItem);
final SpriteMenuItem menuMenuItem = new SpriteMenuItem(MENU_MAIN, mMenuTextures.get(GameValues.MENU_ID), getVertexBufferObjectManager());
menuMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mPauseScene.addMenuItem(menuMenuItem);
final SpriteMenuItem resumeMenuItem = new SpriteMenuItem(MENU_RESUME, mMenuTextures.get(GameValues.BACK_ID), getVertexBufferObjectManager());
resumeMenuItem.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mPauseScene.addMenuItem(resumeMenuItem);
this.mPauseScene.buildAnimations();
this.mPauseScene.setBackgroundEnabled(false);
this.mPauseScene.setOnMenuItemClickListener(this);
Sprite next = new Sprite(menuMenuItem.getX() + 128 + 1, menuMenuItem.getY(), mMenuTextures.get(GameValues.NEXT_ID), getVertexBufferObjectManager()){
@Override
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if(pSceneTouchEvent.isActionUp()){
mGameScene.moveItems(new IOnFinishListener() {
@Override
public void onFinish() {
nextLevel();
doResume();
}
});
}
return true;
}
};
next.setBlendFunction(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
this.mPauseScene.attachChild(next);
this.mPauseScene.registerTouchArea(next);
this.mPauseScene.buildAnimations();
}
@Override
public boolean onMenuItemClicked(MenuScene pMenuScene, IMenuItem pMenuItem, float pMenuItemLocalX, float pMenuItemLocalY) {
switch (pMenuItem.getID()){
case MENU_MAIN:
this.startActivity(new Intent(this, MainMenuActivity.class));
this.finish();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
break;
case MENU_RESET:
onGameRestart();
doResume();
break;
case MENU_RESUME:
doResume();
return true;
}
return false;
}
@Override
public boolean onKeyDown(final int pKeyCode, final KeyEvent pEvent) {
if((pKeyCode == KeyEvent.KEYCODE_MENU || pKeyCode == KeyEvent.KEYCODE_BACK ) && pEvent.getAction() == KeyEvent.ACTION_DOWN) {
if(mGameScene != null){
if(this.mGameScene.hasChildScene()) {
doResume();
} else {
doPause();
}
return true;
}
}
return super.onKeyDown(pKeyCode, pEvent);
}
public void doPause() {
this.mGameScene.setChildScene(this.mPauseScene, false, true, true);
}
public void doResume() {
this.mGameScene.clearChildScene();
this.mPauseScene.reset();
}
/* STATICS */
public static void setLevel(Level lvl){
level = lvl;
}
/* GAME STEERING */
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent touchEvent) {
if(level.getPlayer() == null)
return false;
switch(steering){
case GameValues.STEERING_TOUCH:
if(touchEvent.getAction() == TouchEvent.ACTION_DOWN)
{
timerStarted = true;
float xDown = touchEvent.getX();
float yDown = touchEvent.getY();
float xPlayer = level.getPlayer().getX();
float yPlayer = level.getPlayer().getY();
if ((xDown + yPlayer) < (xPlayer + yDown)) {
if ((xDown - yPlayer) < (xPlayer - yDown)){
//LEFT
checkCollision(PlayerEntity.DIRECTION_LEFT);
}else if ((xDown - yPlayer) > (xPlayer - yDown)){
//DOWN
checkCollision(PlayerEntity.DIRECTION_UP);
}
}
else if ((xDown + yPlayer) > (xPlayer + yDown)) {
if ((xDown - yPlayer) > (xPlayer - yDown)) {
//RIGHT
checkCollision(PlayerEntity.DIRECTION_RIGHT);
}else if ((xDown - yPlayer) < (xPlayer - yDown)){
//UP
checkCollision(PlayerEntity.DIRECTION_DOWN);
}
}
}
break;
case GameValues.STEERING_SLIDE:
break;
}
return true;
}
private void checkCollision(int dir){
//boolean move = false;
final PlayerEntity player = level.getPlayer();
if(!player.isFinished())
return;
if(player.getColumn() < 0 || player.getRow() < 0 || player.getColumn() >= level.getWidth() || player.getRow() >= level.getHeight())
return;
final int col = player.getColumn();
final int row = player.getRow();
int nCol = col;
int nRow = row;
int id = GameValues.BLANK_ID;
switch(level.getItem(col, row)){
case GameValues.ONESTEP_ID:
id = GameValues.BLANK_ID;
break;
case GameValues.TWOSTEP_ID:
id = GameValues.ONESTEP_ID;
break;
case GameValues.END_UN_ID:
id = GameValues.END_UN_ID;
break;
case GameValues.END_ID:
id = GameValues.END_ID;
break;
case GameValues.TELEPORTGREEN_ID:
id = GameValues.TELEPORTGREEN_ID;
break;
case GameValues.TELEPORTRED_ID:
id = GameValues.TELEPORTRED_ID;
break;
case GameValues.STABLE_ID:
id = GameValues.STABLE_ID;
break;
}
switch(dir){
case PlayerEntity.DIRECTION_UP:
nRow = row+1;
break;
case PlayerEntity.DIRECTION_DOWN:
nRow = row-1;
break;
case PlayerEntity.DIRECTION_LEFT:
nCol = col-1;
break;
case PlayerEntity.DIRECTION_RIGHT:
nCol = col+1;
break;
}
final int nfCol = nCol;
final int nfRow = nRow;
final int nfId = id;
if(level.getItem(nCol, nRow) != GameValues.SOLID_ID &&
level.getItem(nCol, nRow) != GameValues.BLANK_ID &&
level.getAtts(nCol, nRow) != GameValues.LOCK_ID){
//MOVE
player.move(dir, new IOnFinishListener() {
@Override
public void onFinish() {
//TELEPORT
if(level.getItem(nfCol, nfRow) == GameValues.TELEPORTGREEN_ID)
{
Debug.d("TELEPORT: nfCol: " + Integer.toString(nfCol) + " nfRow: " + Integer.toString(nfRow));
int telID = level.getTeleportID(GameValues.GREEN_TELEPORT, nfCol, nfRow);
player.teleport(level.getLinikedTeleport(GameValues.GREEN_TELEPORT, telID)[0], level.getLinikedTeleport(GameValues.GREEN_TELEPORT, telID)[1]);
}
if(level.getItem(nfCol, nfRow) == GameValues.TELEPORTRED_ID)
{
Debug.d("TELEPORT: nfCol: " + Integer.toString(nfCol) + " nfRow: " + Integer.toString(nfRow));
int telID = level.getTeleportID(GameValues.RED_TELEPORT, nfCol, nfRow);
player.teleport(level.getLinikedTeleport(GameValues.RED_TELEPORT, telID)[0], level.getLinikedTeleport(GameValues.RED_TELEPORT, telID)[1]);
}
//END
if(level.getItem(nfCol, nfRow) == GameValues.END_ID && canExit){
onEnd();
}
}});
if(level.getAtts(nfCol, nfRow) == GameValues.KEY_ID){
isKey = true;
mGameScene.removeAttsItem(nfCol, nfRow);
level.setAtts(nfCol, nfRow, 0);
}
if(nfId == GameValues.ONESTEP_ID || nfId == GameValues.BLANK_ID)
tiles++;
mCTiles.setText(getString(R.string.tiles) + ": " + Integer.toString(tiles) + "/" + Integer.toString(maxTiles));
mGameScene.addItem(col, row, nfId);
level.setItem(col, row, nfId);
//STARS
if(level.getAtts(nfCol, nfRow) == GameValues.FLAME_ID){
level.setAtts(nfCol, nfRow, 0);
if(isAnim)
mGameScene.getItem(nfCol, nfRow, 1).registerEntityModifier(new MoveModifier(0.2f, nfCol*objSize, (cameraWidth-objSize)-objSize*(starCounter+1), nfRow*objSize, 0));
else
mGameScene.getItem(nfCol, nfRow, 1).setPosition((cameraWidth-objSize)-objSize*(starCounter+1), 0);
mGameScene.getItem(nfCol, nfRow, 1).setZIndex(10);
mGameScene.sortChildren();
starCounter++;
if(starCounter >= 3){
canExit = true;
level.setEndsActive(mGameScene, true);
}
}
}
if(level.getAtts(nCol, nRow) != 0){
switch(level.getAtts(nCol, nRow)){
case GameValues.LOCK_ID:
if(isKey){
mGameScene.removeAttsItem(nCol, nRow);
level.setAtts(nCol, nRow, 0);
player.move(dir, new IOnFinishListener() {
@Override
public void onFinish() {
}
});
if(nfId == GameValues.ONESTEP_ID || nfId == GameValues.BLANK_ID)
tiles++;
mCTiles.setText(getString(R.string.tiles) + ": " + Integer.toString(tiles) + "/" + Integer.toString(maxTiles));
mGameScene.addItem(col, row, nfId);
level.setItem(col, row, nfId);
}
break;
}
}
}
private void onEnd(){
timerStarted = false;
calculateScore();
if(isAnim){
level.getPlayer().registerEntityModifier(new FadeOutModifier(0.2f, new IEntityModifierListener() {
@Override
public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
}
@Override
public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
mGameScene.moveItems(new IOnFinishListener() {
@Override
public void onFinish() {
mScoreBackground.registerEntityModifier(new MoveYModifier(2.0f, mScoreBackground.getY(), (cameraHeight-mScoreBackground.getHeightScaled())/2, EaseBackOut.getInstance()));
}
});
}
}));
}else{
mScoreBackground.registerEntityModifier(new MoveYModifier(2.0f, mScoreBackground.getY(), (cameraHeight-mScoreBackground.getHeightScaled())/2, EaseBackOut.getInstance()));
}
time = 0;
tiles = 0;
}
private void calculateScore(){
String min;
String sec;
String max;
String get;
if(time/60 < 10)
min = "0" + Integer.toString(time/60);
else
min = Integer.toString(time/60);
if(time%60 < 10)
sec = "0" + Integer.toString(time%60);
else
sec = Integer.toString(time%60);
mTime.setText(getString(R.string.time) + ": " + min + ":" + sec);
get = Integer.toString(tiles);
max = Integer.toString(level.getTiles());
mTiles.setText(getString(R.string.tiles) + ": " + get + "/" + max);
float score;
score = ((float)tiles/(float)level.getTiles());
score *= 128000;
score += (1.0f/(float)time) * 12000;
Debug.i(Integer.toString(tiles));
Debug.i(Integer.toString(maxTiles));
if(tiles == maxTiles){
mScoreEditor.putBoolean("full" + Integer.toString(level.getLevelpackId()) + "_" + Integer.toString(level.getId()), true);
mScoreEditor.commit();
}
if(mScore.getInt("score" + Integer.toString(level.getLevelpackId()) + "_" + Integer.toString(level.getId()), 0) < (int) score){
mScoreEditor.putInt("score" + Integer.toString(level.getLevelpackId()) + "_" + Integer.toString(level.getId()), (int) score);
mScoreEditor.commit();
mTextHighScore.setText(getString(R.string.new_high));
}else{
mTextHighScore.setText(getString(R.string.high) + " :" + Integer.toString((int) mScore.getInt("score" + Integer.toString(level.getLevelpackId()) + "_" + Integer.toString(level.getId()), 0)));
}
mTextScore.setText(getString(R.string.score) + ": " + Integer.toString((int)score));
}
private void onGameRestart(){
timerStarted = false;
time = 0;
tiles = 0;
canExit = false;
isKey = false;
starCounter = 0;
mCTiles.setText(getString(R.string.tiles) + ": 0/" + Integer.toString(maxTiles));
level.getPlayer().detachSelf();
int id = level.getId();
int levelpack = level.getLevelpackId();
level = LevelFileReader.getLevelFromFile(this, "level_" + Integer.toString(levelpack) + "_" + Integer.toString(id));
LevelSceneFactory.redraw(this, mGameScene, level, mGameTexturePack);
}
private void nextLevel(){
final int levelID = level.getId();
final int levelpackID = level.getLevelpackId();
Debug.i("Level ID: " + Integer.toString(levelID));
Debug.i("Level ID + 1: " + Integer.toString(levelID+1));
timerStarted = false;
time = 0;
tiles = 0;
canExit = false;
isKey = false;
starCounter = 0;
level.getPlayer().detachSelf();
if(levelID < 15){
level = LevelFileReader.getLevelFromFile(GameActivity.this, "level_"+ Integer.toString(levelpackID) + "_" + Integer.toString(levelID+1));
if(level == null){
GameActivity.this.startActivity(new Intent(GameActivity.this, MainMenuActivity.class));
GameActivity.this.finish();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
}
maxTiles = level.getTiles();
mCTiles.setText(getString(R.string.tiles) + ": 0/" + Integer.toString(maxTiles));
if(isAnim)
LevelSceneFactory.redrawWithAnimations(GameActivity.this, mGameScene, level, mGameTexturePack);
else
LevelSceneFactory.redraw(GameActivity.this, mGameScene, level, mGameTexturePack);
}else{
GameActivity.this.startActivity(new Intent(GameActivity.this, MainMenuActivity.class));
GameActivity.this.finish();
overridePendingTransition(R.anim.fadein, R.anim.fadeout);
}
nextLevel = false;
}
public int getCameraWidth(){
return cameraWidth;
}
public int getCameraHeight(){
return cameraHeight;
}
public int getObjSize(){
return objSize;
}
}
در کلاس بالا امتیازات حساب شده است و حرکت جهات را نوشته شده است که توسط case جهات مشخص می شود.
خروجی به صورت زیر خواهد بود:

- Android
- 2k بازدید
- 7 تشکر