青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Codejie's C++ Space

Using C++

I;P : How to track the achievement event

快捷鏈接

    下載地址

    相關隨筆

 

正文

    朋友 : 這I;P的成就咋搞的?

    我 : 不是我干的, 都是Google Play Service搞定的, 要看API文檔不~

    朋友 : 知道你沒個服務器搞這個, 我就想問問你怎么跟蹤成就事件的? 就是你怎么判斷成就完成了呢?

    我 : 啊, 這個啊...簡單的怕你罵我...

 

    開說 ---- 我覺得呢, 每個問題都有N多的解決方案, 但基于人性考慮呢, 簡單,好敲, 省力氣的, 才是好方案...

 

    成就事件跟蹤呢, 簡單考慮就是實時/定時事件點上更新成就所需數據, 并在指定的事件點上(也可以實時)進行檢查判斷, 以決定是否解鎖.

    因此, 我用了如下的類型存放成就所需數據:

 

		private Type(int id, int target, boolean inc, boolean global) {
			this.id = id;
			this.target = target;
			this.inc = inc;
			this.global = global;
		}


        id: 成就標識;

        target: 成就目標閾值;

        inc: 遞增類型(用于區別大于/小于);

        global: 全局成就類型(就是全關卡通用, 反之每次running后清零);

 

    有了上面的結構, 實例化各個成就數據, 然后在running過程中的每個事件中, 比如, Tary移動, 指令調用, 執行成功等等地方, 累計相應的成就值就好; 當執行成功時(這個是I;P成就的前提條件), 檢查每一個成就實例, 哪個滿足條件了, 就解鎖哪個. 很簡單不是? 下面是代碼:

 

package jie.android.ip.playservice;

import java.util.HashMap;

import jie.android.ip.PlayEventListener;
import jie.android.ip.utils.Utils;

public class PlayServiceTracker {
	
	private static final String Tag = PlayServiceTracker.class.getSimpleName();
	
	private static final int ID_MOVE_LEFT = 10;
	private static final int ID_MOVE_RIGHT = 11;
	private static final int ID_ACTION_EMPTY = 12;
	private static final int ID_ACTION_MAX = 13;
	private static final int ID_CALL_MAX = 14;
	private static final int ID_CHECK_MAX = 15;
	private static final int ID_STEP_MAX = 20;
	private static final int ID_EXECUTE_MAX_EXCEPTIN = 30;
	private static final int ID_EXECUTE_MAX_OVERFLOW = 31;
	private static final int ID_EXECUTE_MAX_FINISHED = 32;
	private static final int ID_EXECUTE_MAX_RESET = 33;
	private static final int ID_EXECUTE_MIN_SUCC = 34;
	private static final int ID_EVENT_NO_UNSOLVED = 40;
	
	public enum Type {
		MOVE_LEFT(ID_MOVE_LEFT, 50, true, false), MOVE_RIGHT(ID_MOVE_RIGHT, 50, true, false), ACTION_EMPTY(ID_ACTION_EMPTY, 30, true, false), 
		ACTION_MAX(ID_ACTION_MAX, 180, true, false), CALL_MAX(ID_CALL_MAX, 30, true, false), CHECK_MAX(ID_CHECK_MAX, 50, true, false),
		STEP_MAX(ID_STEP_MAX, 200, true, false),
		EXECUTE_MAX_EXCEPTION(ID_EXECUTE_MAX_EXCEPTIN, 10, true, true), EXECUTE_MAX_OVERFLOW(ID_EXECUTE_MAX_OVERFLOW, 10, true, true), EXECUTE_MAX_FINISHED(ID_EXECUTE_MAX_FINISHED, 10, true, true),
		EXECUTE_MAX_RESET(ID_EXECUTE_MAX_RESET, 10, true, true), EXECUTE_MIN_SUCC(ID_EXECUTE_MIN_SUCC, 1, false, true),
		EVENT_NO_UNSOLVED(ID_EVENT_NO_UNSOLVED, 1, true, true);
		
		private final int id;
		private final int target;
		private final boolean inc;
		private final boolean global;
		
		private Type(int id, int target, boolean inc, boolean global) {
			this.id = id;
			this.target = target;
			this.inc = inc;
			this.global = global;
		}
		
		public int getId() {
			return id;
		}
		public int getTarget() {
			return target;
		}
		
		public boolean isInc() {
			return inc;
		}
		
		public boolean isGlobal() {
			return global;
		}
	}
	
	public class Data {
		public int value;
		public int target;
		
		public boolean check() {
			return value >= target;
		}
	}
	
	private HashMap<Integer, Integer> mapData = new HashMap<Integer, Integer>();
	
	public PlayServiceTracker() {
		init();
	}
	
	private void init() {
		for (final Type type : Type.values()) {
			mapData.put(type.getId(), new Integer(0));
		}
	}
	
	public void update(final Type type) {
		mapData.put(type.getId(), mapData.get(type.getId()) + 1);
	}
	
	public void refresh(boolean all) {
		for (final Type type : Type.values()) {
			if (all || !type.isGlobal()) {
				mapData.put(type.getId(), new Integer(0));
			}
		}
	}
	
	public boolean check(final Type type) {
		final Integer val = mapData.get(type.getId());
		if (type.isInc()) {
			return (val >= type.getTarget());
		} else {
			return (val <= type.getTarget());
		}
	}

	public void check(final PlayEventListener playEventListener) {
		for (final Type type : Type.values()) {
			if (check(type)) {
				Utils.log(Tag, "PlayEvent is triggered - id = " + type.id);
				playEventListener.unlockTrackerAchievement(type.getId());
			}
		}
	}	
   }

 

    對了, 最后還好, 朋友只是鄙視了下, 沒打沒罵...

posted on 2014-04-24 20:23 codejie 閱讀(1312) 評論(0)  編輯 收藏 引用 所屬分類: I;P

公告

Using C++

導航

統計

留言簿(73)

隨筆分類(513)

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美美女bbbb| 欧美国产日产韩国视频| 韩国三级电影一区二区| 国产乱码精品一区二区三区不卡| 国产精品爱啪在线线免费观看| 欧美日韩国产麻豆| 欧美视频中文字幕在线| 国产精品久久久久影院色老大 | 99综合在线| 亚洲专区在线| 久久综合999| 国产精品久久国产愉拍| 亚洲最新在线视频| 亚洲影院色在线观看免费| 欧美一区1区三区3区公司| 美女诱惑一区| 国产精品乱码久久久久久| 一区二区亚洲| 99精品99久久久久久宅男| 欧美在线日韩| 亚洲激情女人| 亚洲一区二区黄色| 久久激情综合网| 欧美韩国一区| 99re热这里只有精品免费视频| 中文av字幕一区| 蜜桃精品久久久久久久免费影院| 国产精品久久久久一区二区三区| 亚洲国产精品小视频| 亚洲欧美国产77777| 欧美大片在线观看一区| 亚洲综合丁香| 欧美日韩在线一区| 一区二区三区在线看| 亚洲欧美成人网| 亚洲三级免费| 欧美成人国产| 在线播放不卡| 久久久久久久久久看片| 亚洲私人影吧| 欧美日韩一区二区视频在线| 亚洲国产精品高清久久久| 亚洲欧美日韩在线高清直播| 亚洲国产清纯| 久久米奇亚洲| 国产综合一区二区| 欧美一区二区三区成人| 一区二区三区高清视频在线观看| 麻豆av一区二区三区| 伊人婷婷久久| 久久这里只有| 久久久久网址| 在线观看三级视频欧美| 美女精品在线观看| 久久精品视频播放| 国产在线观看91精品一区| 欧美一区二区视频在线| 在线亚洲欧美| 国产精品美女诱惑| 欧美一区二区三区日韩视频| 在线亚洲欧美| 国产日韩欧美中文| 久久噜噜噜精品国产亚洲综合| 亚洲欧美日韩国产| 国产一本一道久久香蕉| 老司机精品导航| 嫩草影视亚洲| 一区二区高清在线观看| 99re热这里只有精品免费视频| 欧美日韩一区二区欧美激情| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲另类春色国产| 欧美成年网站| aⅴ色国产欧美| 夜夜嗨av一区二区三区免费区| 国产精品久久久| 久久国内精品自在自线400部| 欧美在线播放一区| 亚洲高清久久网| 日韩一级黄色大片| 国产乱码精品一区二区三区不卡| 久久尤物电影视频在线观看| 美女脱光内衣内裤视频久久网站| 亚洲精品视频在线| 一本色道久久88综合日韩精品| 国产美女在线精品免费观看| 久久夜色撩人精品| 欧美激情精品久久久| 中文日韩欧美| 久久久久国产精品www| 日韩系列欧美系列| 性欧美18~19sex高清播放| 亚洲精品视频在线观看免费| 亚洲午夜在线观看| 亚洲电影av在线| 亚洲视频每日更新| 黄色精品在线看| 亚洲二区在线观看| 国产欧美精品一区| 亚洲国产成人高清精品| 国产女主播在线一区二区| 欧美国产极速在线| 欧美精品日韩一本| 久久精品国产精品亚洲综合| 欧美不卡视频一区| 欧美一区国产一区| 欧美日韩和欧美的一区二区| 欧美在线|欧美| 欧美sm重口味系列视频在线观看| 亚洲欧美国产日韩天堂区| 久久午夜精品一区二区| 一本大道av伊人久久综合| 欧美自拍偷拍午夜视频| 小嫩嫩精品导航| 欧美日韩国产成人精品| 欧美二区乱c少妇| 国产亚洲午夜高清国产拍精品| 一本久久a久久精品亚洲| 国产在线精品二区| 一本久道久久久| 亚洲毛片在线看| 裸体素人女欧美日韩| 久久久久国产精品麻豆ai换脸| 欧美吻胸吃奶大尺度电影| 亚洲丰满少妇videoshd| 亚洲第一精品福利| 欧美一级在线亚洲天堂| 性xx色xx综合久久久xx| 国产精品福利网站| 中文av字幕一区| 亚洲欧美日本国产有色| 欧美性猛交xxxx乱大交蜜桃| 一本大道久久精品懂色aⅴ| 在线亚洲电影| 欧美午夜大胆人体| 小黄鸭精品密入口导航| 国产精品久久国产三级国电话系列| 99精品国产一区二区青青牛奶 | 国产精品久久久久秋霞鲁丝| 日韩视频―中文字幕| 国产精品99久久久久久白浆小说 | 在线观看一区二区精品视频| 久久超碰97中文字幕| 久热这里只精品99re8久| 韩国精品久久久999| 久久福利视频导航| 久久中文字幕一区| 亚洲国产日韩一区| 欧美精品一区二区高清在线观看| 最新国产精品拍自在线播放| 日韩视频在线一区二区| 欧美日韩在线观看一区二区三区 | 亚洲第一视频网站| 日韩一本二本av| 欧美三级网址| 欧美一区二区三区四区高清| 男人插女人欧美| 亚洲另类视频| 国产精品精品视频| 久久精品一区二区| 最新亚洲电影| 欧美一区二区三区日韩| 在线免费观看日本欧美| 欧美日韩国产成人| 欧美在线视频一区| 亚洲国产精品视频| 亚欧成人在线| 亚洲国产精品小视频| 国产精品每日更新在线播放网址| 久久久久久久久久看片| 亚洲精选一区二区| 久久人体大胆视频| 99成人在线| 国产一区二区三区在线观看免费| 奶水喷射视频一区| 中文一区字幕| 欧美国产在线电影| 久久aⅴ国产欧美74aaa| 亚洲精一区二区三区| 国产午夜精品全部视频在线播放| 女人天堂亚洲aⅴ在线观看| 亚洲欧美日韩在线| 亚洲人成绝费网站色www| 久久精品国产精品亚洲| 中文网丁香综合网| 亚洲人体1000| 精品成人国产| 国产精品自拍小视频| 欧美日韩国产精品自在自线| 裸体素人女欧美日韩| 久久精品国产综合| 亚洲女人天堂av| 亚洲视频中文| 亚洲深夜影院| 一个人看的www久久| 亚洲精品偷拍| 亚洲激情一区二区| 乱码第一页成人| 久久久精品日韩| 欧美亚洲自偷自偷|