package com.znv.linkup;
import android.graphics.Point;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextSwitcher;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewSwitcher;
import com.znv.linkup.core.Game;
import com.znv.linkup.core.GameSettings;
import com.znv.linkup.core.IGameAction;
import com.znv.linkup.core.card.Piece;
import com.znv.linkup.core.card.PiecePair;
import com.znv.linkup.core.card.path.LinkInfo;
import com.znv.linkup.core.config.GameAlign;
import com.znv.linkup.core.config.GameMode;
import com.znv.linkup.core.config.LevelCfg;
import com.znv.linkup.db.DbScore;
import com.znv.linkup.db.LevelScore;
import com.znv.linkup.util.AnimatorUtil;
import com.znv.linkup.util.Stopwatch;
import com.znv.linkup.util.StringUtil;
import com.znv.linkup.util.ToastUtil;
import com.znv.linkup.view.CardsView;
import com.znv.linkup.view.PathView;
import com.znv.linkup.view.dialog.FailDialog;
import com.znv.linkup.view.dialog.ResultInfo;
import com.znv.linkup.view.dialog.SuccessDialog;
import com.znv.linkup.view.dialog.TaskDialog;
import com.znv.linkup.view.dialog.TimeDialog;
import com.znv.linkup.view.handler.GameMsgHandler;
/**
* 游戏主界面活动处理类
*/
public class GameActivity extends BaseActivity implements IGameAction {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linkup);
Stopwatch sw = new Stopwatch();
sw.start();
Display mDisplay = getWindowManager().getDefaultDisplay();
Point size = new Point();
mDisplay.getSize(size);
curLevelCfg = levelCfgs.get(getIntent().getIntExtra("levelIndex", 0));
holder.tvLevel = (TextView) findViewById(R.id.tvLevel);
holder.tvRecord = (TextView) findViewById(R.id.maxScore);
holder.pbTime = (ProgressBar) findViewById(R.id.pbTime);
holder.tsScore = (TextSwitcher) findViewById(R.id.scoreText);
holder.flBackground = (FrameLayout) findViewById(R.id.rootFrame);
holder.startCoin = (ImageView) findViewById(R.id.startCoin);
holder.endCoin = (ImageView) findViewById(R.id.endCoin);
holder.tvCombo = (TextView) findViewById(R.id.tvCombo);
holder.tvAnimMsg = (TextView) findViewById(R.id.tvAnimMsg);
holder.screenWidth = size.x;
holder.screenHeight = size.y;
holder.screenCenter = new Point((int) (size.x * 0.5), (int) (size.y * 0.5));
holder.tools = findViewById(R.id.tools);
holder.btnPrompt = (Button) findViewById(R.id.prompt);
holder.btnRefresh = (Button) findViewById(R.id.refresh);
holder.btnAddTime = (Button) findViewById(R.id.addTime);
holder.tsScore.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView tv = new TextView(GameActivity.this);
tv.setTextSize(30);
tv.setTextColor(0xffff6347);
tv.setGravity(Gravity.CENTER);
return tv;
}
});
if (curLevelCfg.getLevelMode() == GameMode.Level || curLevelCfg.getLevelMode() == GameMode.ScoreTask) {
holder.tsScore.setInAnimation(this, R.anim.slide_in_up);
holder.tsScore.setOutAnimation(this, R.anim.slide_out_up);
}
pathView = new PathView(this);
holder.flBackground.addView(pathView, -1, -1);
cardsView = (CardsView) findViewById(R.id.cardsView);
failDialog = new FailDialog(this);
successDialog = new SuccessDialog(this);
timeDialog = new TimeDialog(this);
taskDialog = new TaskDialog(this);
sw.stop();
Log.e("game load1", String.valueOf(sw.getElapsedTime()));
sw.start();
start();
sw.stop();
Log.e("game load2", String.valueOf(sw.getElapsedTime()));
}
/**
* 随机播放背景音乐
*/
@Override
protected void playMusic() {
if (musicMgr != null) {
musicMgr.setBgMusicRes(R.raw.bgmusic);
musicMgr.play();
}
}
/**
* 开始游戏
*/
public void start() {
if (game != null) {
game.finish();
}
if (!curLevelCfg.isAdjust()) {
// 根据屏幕动态调整卡片大小及位置
adjustLevelCfg();
}
holder.btnPrompt.setText(String.valueOf(LevelCfg.globalCfg.getPromptNum()));
holder.btnRefresh.setText(String.valueOf(LevelCfg.globalCfg.getRefreshNum()));
holder.btnAddTime.setText(String.valueOf(LevelCfg.globalCfg.getAddTimeNum()));
holder.tvLevel.setText(curLevelCfg.getRankName() + "-" + curLevelCfg.getLevelName());
holder.pbTime.setMax(curLevelCfg.getLevelTime());
holder.flBackground.setBackgroundResource(ViewSettings.GameBgImageIds[curLevelCfg.getLevelBackground()]);
if (curLevelCfg.getLevelMode() == GameMode.Level) {
holder.tsScore.setText("0");
holder.tvRecord.setText(getString(R.string.game_level_record) + String.valueOf(curLevelCfg.getMaxScore()));
} else if (curLevelCfg.getLevelMode() == GameMode.Time) {
holder.pbTime.setVisibility(View.GONE);
holder.btnAddTime.setVisibility(View.GONE);
holder.tsScore.setText("00:00");
if (curLevelCfg.getMaxScore() == 0) {
holder.tvRecord.setText(getString(R.string.game_level_norecord));
} else {
holder.tvRecord.setText(getString(R.string.game_level_record) + StringUtil.secondToString(curLevelCfg.getMinTime()));
}
} else if (curLevelCfg.getLevelMode() == GameMode.ScoreTask) {
holder.pbTime.setVisibility(View.GONE);
holder.btnAddTime.setVisibility(View.GONE);
holder.tsScore.setText("0");
holder.tvRecord.setText(getString(R.string.game_level_task) + curLevelCfg.getScoreTask());
} else if (curLevelCfg.getLevelMode() == GameMode.TimeTask) {
holder.pbTime.setVisibility(View.GONE);
holder.btnAddTime.setVisibility(View.GONE);
holder.tsScore.setText("00:00");
holder.tvRecord.setText(getString(R.string.game_level_task) + StringUtil.secondToString(curLevelCfg.getTimeTask()));
} else if (curLevelCfg.getLevelMode() == GameMode.Star) {
holder.pbTime.setVisibility(View.GONE);
holder.btnAddTime.setVisibility(View.GONE);
holder.tsScore.setText(String.format("%d/%d", 0, curLevelCfg.getStars()));
if (curLevelCfg.getMaxScore() == 0) {
holder.tvRecord.setText(getString(R.string.game_level_norecord));
} else {
holder.tvRecord.setText(getString(R.string.game_level_record) + StringUtil.secondToString(curLevelCfg.getMinTime()));
}
}
game = new Game(curLevelCfg, this);
cardsView.setGame(game);
initAnimation();
game.start();
}
/**
* 处理开始动画
*/
private void initAnimation() {
// 从上面落下
// cardsView.setVisibility(View.GONE);
// Animator cardsAnim = ObjectAnimator.ofFloat(cardsView, "translationY", -holder.screenHeight, 0);
// cardsAnim.setDuration(750);
// cardsAnim.setStartDelay(50);
// cardsAnim.addListener(new AppearAnimator(cardsView));
// cardsAnim.start();
// 播放声音和动画
showAnimMsg(getString(R.string.game_ready_go), 30, 20);
soundMgr.readyGo();
// 工具条动画
// holder.tools.setVisibility(View.GONE);
// Animator toolsAnim = ObjectAnimator.ofFloat(holder.tools, "translationY", 100, 0);
// toolsAnim.setDuration(500);
// toolsAnim.setStartDelay(500);
// toolsAnim.addListener(new AppearAnimator(holder.tools));
// toolsAnim.start();
}
/**
* 根据屏幕动态调整卡片大小及位置
*/
private void adjustLevelCfg() {
// 上下保留一部分空间
int heightReserve = 60;
// 默认保留半个图标的边距
int levelWidth = holder.screenWidth / (curLevelCfg.getXSize() - 1);
// 每行大于6个游戏图标时不保留边距
if (curLevelCfg.getXSize() > 8) {
levelWidth = (int) (holder.screenWidth / (curLevelCfg.getXSize() - 1.6));
}
int levelHeight = (holder.screenHeight - heightReserve) / curLevelCfg.getYSize();
// 像素调整为2的倍数
int newSize = (Math.min(levelWidth, levelHeight) / 4) * 4;
int beginX = (holder.screenWidth - newSize * curLevelCfg.getXSize()) / 2;
int beginY = (holder.screenHeight - newSize * curLevelCfg.getYSize()) / 2;
curLevelCfg.setPieceWidth(newSize);
curLevelCfg.setPieceHeight(newSize);
curLevelCfg.setBeginImageX(beginX);
curLevelCfg.setBeginImageY(beginY);
curLevelCfg.setAdjust(true);
}
/**
* 下一关
*/
public void next() {
game.finish();
int nextLevelId = curLevelCfg.getLevelId() + 1;
curLevelCfg = levelCfgs.get(nextLevelId);
if (curLevelCfg != null) {
start();
} else {
// 通过所有关卡
showAnimMsg(getString(R.string.game_success), 30, 0);
onBackPressed();
}
}
/**
* 游戏失败时的处理
*/
@Override
public void onGameFail() {
handler.sendEmptyMessage(ViewSettings.FailMessage);
}
/**
* 游戏胜利时的处理
*/
@Override
public void onGameWin() {
// 激活下一关
int nextLevelId = curLevelCfg.getLevelId() + 1;
LevelCfg nextCfg = levelCfgs.get(nextLevelId);
if (nextCfg != null) {
nextCfg.setActive(true);
LevelScore nls = new LevelScore(nextLevelId);
nls.setIsActive(1);
DbScore.updateActive(nls);
}
int isRecord = 0;
int stars = 0;
if (curLevelCfg.getLevelMode() == GameMode.Level) {
// 保存记录和星级
if (game.getTotalScore() > curLevelCfg.getMaxScore()) {
// 新纪录
LevelScore cls = new LevelScore(curLevelCfg.getLevelId());
cls.setMaxScore(game.getTotalScore());
cls.setMinTime(game.getGameTime());
cls.setStar(curLevelCfg.getStar(game.getTotalScore()));
DbScore.updateScore(cls);
// 更新缓存
curLevelCfg.setLevelStar(cls.getStar());
curLevelCfg.setMinTime(cls.getMinTime());
curLevelCfg.setMaxScore(cls.getMaxScore());
isRecord = 1;
}
stars = curLevelCfg.getStar(game.getTotalScore());
} else if (curLevelCfg.getLevelMode() == GameMode.Time || curLevelCfg.getLevelMode() == GameMode.Star) {
if (curLevelCfg.getMinTime() == 0 || game.getGameTime() < curLevelCfg.getMinTime()) {
// 更新时间记录
LevelScore cls = new LevelScore(curLevelCfg.getLevelId());
cls.setMaxScore(game.getGameScore());
cls.setMinTime(game.getGameTime());
DbScore.updateScore(cls);
// 更新缓存
curLevelCfg.setMaxScore(cls.getMaxScore());
curLevelCfg.setMinTime(cls.getMinTime());
isRecord = 1;
}
stars = curLevelCfg.getStar(game.getGameScore());
} else if (curLevelCfg.getLevelMode() == GameMode.ScoreTask) {
if (game.getGameScore() >= curLevelCfg.getScoreTask()) {
if (game.getGameScore() > curLevelCfg.getMaxScore()) {
// 更新任务完成记录
LevelScore cls = new LevelScore(curLevelCfg.getLevelId());
cls.setMaxScore(game.getGameScore());
cls.setMinTime(game.getGameTime());
DbScore.updateScore(cls);
}
// 更新缓存
curLevelCfg.setMaxScore(game.getGameScore());
curLevelCfg.setMinTime(game.getGameTime());
// 是否完成任务
isRecord = 1;
}
stars = curLevelCfg.getStar(game.getGameScore());
} else if (curLevelCfg.getLevelMode() == GameMode.TimeTask) {
if (game.getGameTime() <= curLevelCfg.getTimeTask()) {
if (curLevelCfg.getMinTime() == 0 || game.getGameTime() < curLevelCfg.getMinTime()) {
// 更新任务完成记录
LevelScore cls = new LevelScore(curLevelCfg.getLevelId());
cls.setMaxScore(game.getGameScore());
cls.setMinTime(game.getGameTime());
DbScore.updateScore(cls);
}
// 更新缓存
curLevelCfg.setMaxScore(game.getGameScore());
curLevelCfg.setMinTime(game.getGameTime());
// 是否完成任务
isRecord = 1;
}
stars = curLevelCfg.getStar(game.getGameScore());
}
handler.sendMessage(handler.obtainMessage(ViewSettings.WinMessage, isRecord, stars));
}
/**
* 游戏提示
*/
public void onPrompt(PiecePair pair) {
if (pair == null) {
// 没有可消除时给出提示
Toast toast = ToastUtil.getToast(this, R.string.game_prompt_none);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 160);
toast.show();
} else {
cardsView.prompt(pair);
// 减少提示一次
LevelCfg.globalCfg.setPromptNum(LevelCfg.globalCfg.getPromptNum() - 1);
setGlobalCfg();
handler.sendEmptyMessage(ViewSettings.PromptMessage);
soundMgr.prompt();
}
}
/**
* 取消游戏提示
*/
public void onUnPrompt(PiecePair pair) {
if (pair != null) {
cardsView.unPrompt(pair);
}
}
/**
* 连击时的处理
*/
@Override
public void onCombo(int combo) {
if (combo % GameSettings.ComboMod == 0) {
String msg = String.valueOf(combo);
holder.tvCombo.setText(msg);
int msgWidth = msg.length() * holder.screenWidth / 50 + getResources().getDrawable(R.drawable.combo).getMinimumWidth() / 2;
Point startPoint = new Point(holder.screenCenter.x - msgWidth, (int) holder.tsScore.getY() + 100);
Point endPoint = new Point(startPoint.x, startPoint.y - 50);
animTranslate(holder.tvCombo, startPoint, endPoint, 1500, 0);
soundMgr.combo();
}
}
/**
* 屏幕中心显示文字动画
*
* @param msg
* 文字信息
* @param textSize
* 字体大小
*/
private void showAnimMsg(String msg, int textSize, int delay) {
setAnimMsgStyle(msg, textSize);
int msgWidth = msg.length() * holder.screenWidth / 50;
Point startPoint = new Point(holder.screenCenter.x - msgWidth, holder.screenCenter.y);
Point endPoint = new Point(startPoint.x, startPoint.y - 50);
animTranslate(holder.tvAnimMsg, startPoint, endPoint, 1500, delay);
}
/**
* 显示增加分数动画
*
* @param msg
* 文字信息
* @param textSize
* 字体大小
*/
private void showAddScore(String msg, int textSize) {
setAnimMsgStyle(msg, textSize);
int msgWidth = msg.length() * holder.screenWidth / 60;
Point startPoint = new Point(holder.screenCenter.x - msgWidth, (int) holder.tsScore.getY() + 100);
Point endPoint = new Point(startPoint.x, startPoint.y - 40);
animTranslate(holder.tvAnimMsg, startPoint, endPoint, 500, 0);
}
/**
* 设置动画文字的样式
*
* @param msg
* 文字信息
* @param textSize
* 字体大小
*/
private void setAnimMsgStyle(String msg, int textSize) {
holder.tvAnimMsg.setText(msg);
holder.tvAnimMsg.setTextSize(textSize);
}
/**
* 重排时的处理
*/
@Override
public void onRefresh() {
cardsView.createCards(false);
soundMgr.refresh();
// 减少重排一次
LevelCfg.globalCfg.setRefreshNum(LevelCfg.globalCfg.getRefreshNum() - 1);
setGlobalCfg();
handler.sendEmptyMessage(ViewSettings.RefreshMessage);
}
/**
* 选中时的处理
*/
public void onCheck(Piece piece) {
if (piece != null) {
cardsView.check(piece);
soundMgr.select();
}
}
/**
* 取消选中时的处理
*/
public void onUnCheck(Piece piece) {
if (piece != null) {
cardsView.unCheck(piece);
}
}
/**
* 变换时的处理
*/
@Override
public void onTranslate() {
if (curLevelCfg.getLevelAlign() != GameAlign.AlignNone) {
cardsView.createCards(false);
}
}
/**
* 处理游戏消除路径
*/
@Override
public void onLinkPath(LinkInfo linkInfo) {
pathView.showLines(linkInfo.getLinkPieces());
if (curLevelCfg.getLevelMode() == GameMode.Level || curLevelCfg.getLevelMode() == GameMode.ScoreTask || curLevelCfg.getLevelMode() == GameMode.Star) {
// 动画
Point startPoint1 = linkInfo.getLinkPieces().get(0).getCenter();
Point endPoint = new Point((int) (holder.tsScore.getLeft() + holder.tsScore.getWidth() * 0.5),
(int) (holder.tsScore.getTop() + holder.tsScore.getHeight() * 0.5));
Point startPoint2 = linkInfo.getLinkPieces().get(linkInfo.getLinkPieces().size() - 1).getCenter();
if (curLevelCfg.getLevelMode() == GameMode.Star) {
// 收集星星
holder.startCoin.setImageResource(R.drawable.star_32);
holder.endCoin.setImageResource(R.drawable.star_32);
if (linkInfo.getLinkPieces().get(0).isStar()) {
animTranslate(holder.startCoin, startPoint1, endPoint, 400, 0);
}
if (linkInfo.getLinkPieces().get(linkInfo.getLinkPieces().size() - 1).isStar()) {
animTranslate(holder.endCoin, startPoint2, endPoint, 400, 0);
}
} else {
// 收集金币
holder.startCoin.setImageResource(R.drawable.coin);
holder.endCoin.setImageResource(R.drawable.coin);
animTranslate(holder.startCoin, startPoint1, endPoint, 400, 0);
animTranslate(holder.endCoin, startPoint2, endPoint, 400, 0);
}
}
// 消除卡片
cardsView.erase(linkInfo.getLinkPieces().get(0));
cardsView.erase(linkInfo.getLinkPieces().get(linkInfo.getLinkPieces().size() - 1));
soundMgr.erase();
}
@Override
public void onErase() {
// 判断是否需要自动重排,改为异步任务执行
if (checkDeadLockTask != null) {
checkDeadLockTask.cancel(true);
checkDeadLockTask = null;
}
checkDeadLockTask = new CheckDeadLockTask();
checkDeadLockTask.execute();
}
/**
* 视图移动的动画
*
* @param view
* 要移动的视图
* @param start
* 起点
* @param end
* 终点
* @param duration
* 动画时长
*/
private void animTranslate(View view, Point start, Point end, int duration, int delay) {
AnimatorUtil.animTranslate(view, start.x, end.x, start.y, end.y, duration, delay, true);
}
/**
* 时间改变时的处理
*/
@Override
public void onTimeChanged(int time) {
handler.sendMessage(handler.obtainMessage(ViewSettings.TimeMessage, time, 0));
}
/**
* 分数改变时的处理
*/
@Override
public void onScoreChanged(int score) {
handler.sendMessage(handler.obtainMessage(ViewSettings.ScoreMessage, score, 0));
}
/**
* 暂停游戏时的处理
*/
@Override
public void onGamePause() {
}
/**
* 恢复游戏时的处理
*/
@Override
public void onGameResume() {
}
/**
* 处理back键
*/
@Override
public void onBackPressed() {
game.finish();
super.onBackPressed();
}
/**
* 暂停游戏
*/
@Override
protected void onPause() {
game.pause();
super.onPause();
}
/**
* 恢复游戏
*/
@Override
protected void onResume() {
game.resume();
super.onResume();
}
/**
* 提示按钮按下时的处理
*
* @param v
*/
public void prompt(View v) {
if (LevelCfg.globalCfg.getPromptNum() > 0) {
game.prompt();
} else {
// 没有可用道具时给出提示
Toast toast = ToastUtil.getToast(this, R.string.tool_no_prompt);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 160);
toast.show();
}
}
/**
* 重排按钮按下时的处理
*
* @param v
*/
public void refresh(View v) {
if (LevelCfg.globalCfg.getRefreshNum() > 0) {
game.refresh();
} else {
// 没有可用道具时给出提示
Toast toast = ToastUtil.getToast(this, R.string.tool_no_refresh);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 160);
toast.show();
}
}
/**
* 重排按钮按下时的处理
*
* @param v
*/
public void addTime(View v) {
if (LevelCfg.globalCfg.getAddTimeNum() > 0) {
// 减少加时间一次
LevelCfg.globalCfg.setAddTimeNum(LevelCfg.globalCfg.getAddTimeNum() - 1);
setGlobalCfg();
game.addGameTime(ViewSettings.AddTimeSeconds);
showAddTime();
} else {
// 没有可用道具时给出提示
Toast toast = ToastUtil.getToast(this, R.string.tool_no_addtime);
toast.setGravity(Gravity.BOTTOM | Gravity.CENTER, 0, 160);
toast.show();
}
}
/**
* 重排按钮按下时的处理
*
* @param v
*/
public void stop(View v) {
game.stop();
}
/**
* Handler的消息处理--显示时间
*
* @param seconds
* 显示的时间秒数
*/
public void showTime(int seconds) {
if (curLevelCfg.getLevelMode() == GameMode.Level) {
holder.pbTime.setProgress(seconds);
} else if (curLevelCfg.getLevelMode() == GameMode.Time || curLevelCfg.getLevelMode() == GameMode.TimeTask) {
holder.tsScore.setText(StringUtil.secondToString(seconds));
}
}
/**
* Handler的消息处理--显示分数
*/
public void showScore(int score) {
if (curLevelCfg.getLevelMode() == GameMode.Level || curLevelCfg.getLevelMode() == GameMode.ScoreTask) {
if (score > 0) {
// 显示增加分数动画
int lastScore = Integer.parseInt((String) ((TextView) holder.tsScore.getCurrentView()).getText());
String msg = "+" + String.valueOf(score - lastScore);
showAddScore(msg, 20);
}
holder.tsScore.setText(String.valueOf(score));
}
}
/**
* Handler的消息处理--显示失败
*/
public void showFail() {
if (curLevelCfg.getLevelMode() == GameMode.Level) {
failDialog.showDialog(game.getGameScore());
soundMgr.fail();
}
}
/**
* Handler的消息处理--显示胜利
*/
public void showSuccess(int isRecord, int stars) {
ResultInfo resultInfo = new ResultInfo();
resultInfo.setNewRecord(isRecord == 1);
resultInfo.setMaxScore(curLevelCfg.getMaxScore());
resultInfo.setMinTime(curLevelCfg.getMinTime());
resultInfo.setUpload(curLevelCfg.isUpload());
resultInfo.setLevel(curLevelCfg.getLevelId());
resultInfo.setScore(game.getGameScore());
resultInfo.setTime(game.getGameTime());
if (userInfo != null) {
resultInfo.setUserId(userInfo.getUserId());
}
resultInfo.setStars(stars);
if (curLevelCfg.getLevelMode() == GameMode.Level) {
resultInfo.setScore(game.getTotalScore());
successDialog.showDialog(resultInfo);
} else if (curLevelCfg.getLevelMode() == GameMode.Time || curLevelCfg.getLevelMode() == GameMode.Star) {
timeDialog.showDialog(resultInfo);
} else if (curLevelCfg.getLevelMode() == GameMode.ScoreTask) {
taskDialog.showDialog(resultInfo);
} else if (curLevelCfg.getLevelMode() == GameMode.TimeTask) {
taskDialog.showDialog(resultInfo);
}
soundMgr.win();
}
/**
* Handler的消息处理--显示提示数
*/
public void showPrompt() {
holder.btnPrompt.setText(String.valueOf(LevelCfg.globalCfg.getPromptNum()));
}
/**
* Handler的消息处理--显示重排数
*/
public void showRefresh() {
holder.btnRefresh.setText(String.valueOf(LevelCfg.globalCfg.getRefreshNum()));
}
/**
* Handler的消息处理--显示加时间数
*/
public void showAddTime() {
if (curLevelCfg.getLevelMode() == GameMode.Level) {
holder.btnAddTime.setText(String.valueOf(LevelCfg.globalCfg.getAddTimeNum()));
}
}
/**
* 获取当前游戏关卡配置
*
* @return 当前游戏关卡配置
*/
public LevelCfg getLevelCfg() {
return curLevelCfg;
}
private Game game;
private CardsView cardsView;
private FailDialog failDialog;
private SuccessDialog successDialog;
private TimeDialog timeDialog;
private TaskDialog taskDialog;
private LevelCfg curLevelCfg = null;
private LevelHolder holder = new LevelHolder();
private Handler handler = new GameMsgHandler(this);
private PathView pathView = null;
private CheckDeadLockTask checkDeadLockTask = null;
/**
* 界面信息缓存类
*
* @author yzb
*
*/
class LevelHolder {
TextView tvLevel;
TextView tvRecord;
ProgressBar pbTime;
TextSwitcher tsScore;
FrameLayout flBackground;
ImageView startCoin;
ImageView endCoin;
TextView tvCombo;
TextView tvAnimMsg;
int screenWidth;
int screenHeight;
Point screenCenter;
View tools;
Button btnPrompt;
Button btnRefresh;
Button btnAddTime;
}
/**
* 判断死锁的异步任务
*
* @author yzb
*
*/
private class CheckDeadLockTask extends AsyncTask<Void, Void, Boolean> {
@Override
protected Boolean doInBackground(Void... params) {
// 判断是否需要重排
return game.hasPieces() && game.isDeadLock();
}
@Override
protected void onPostExecute(Boolean needRefresh) {
super.onPostExecute(needRefresh);
if (needRefresh) {
refresh(null);
}
}
}
@Override
public void onStepChanged(int step) {
if (curLevelCfg.getLevelMode() == GameMode.Endless) {
holder.tsScore.setText(String.valueOf(step));
}
}
@Override
public void onStarChanged(int star) {
if (curLevelCfg.getLevelMode() == GameMode.Star) {
holder.tsScore.setText(String.format("%d/%d", star, curLevelCfg.getStars()));
}
}
}