private static void InitCards(BattleRecordData _recordData, IList <int> _mCards, IList <int> _oCards) { _recordData.mCards = new int[Math.Min(_mCards.Count, BattleConst.DECK_CARD_NUM)]; int[] tmpArr = new int[_mCards.Count]; for (int i = 0; i < _mCards.Count; i++) { tmpArr[i] = _mCards[i]; } BattlePublicTools.Shuffle(tmpArr, random.Next); Array.Copy(tmpArr, _recordData.mCards, _recordData.mCards.Length); _recordData.oCards = new int[Math.Min(_oCards.Count, BattleConst.DECK_CARD_NUM)]; tmpArr = new int[_oCards.Count]; for (int i = 0; i < _oCards.Count; i++) { tmpArr[i] = _oCards[i]; } BattlePublicTools.Shuffle(tmpArr, random.Next); Array.Copy(tmpArr, _recordData.oCards, _recordData.oCards.Length); }
public override bool Enter(Func <int, int> _getRandomValueCallBack, BattleCore _t, bool _u, AiSummonData _v) { Turrent[] turrentArr = _u ? _t.mTurrent : _t.oTurrent; int id = _t.GetCard(_u, _v.uid); IUnitSDS unitSDS = BattleCore.GetUnitData(id); for (int i = 0; i < BattleConst.MAP_HEIGHT; i++) { if (Array.IndexOf(unitSDS.GetRow(), i) != -1) { for (int m = 0; m < BattleConst.MAP_WIDTH; m++) { int unitPos = i * BattleConst.MAP_WIDTH + m; bool canSet = true; for (int n = 0; n < unitSDS.GetPos().Length; n++) { int posFix = unitSDS.GetPos()[n]; int x = posFix % BattleConst.MAP_WIDTH; if (m + x < BattleConst.MAP_WIDTH) { int pos = unitPos + posFix; if (turrentArr[pos] != null) { canSet = false; break; } } else { canSet = false; break; } } if (canSet) { int score = BattlePublicTools.GetUnitAttackTargetScore(_t, _u, id, unitPos, turrentTargetScore, baseTargetScore); if (score > 0) { _v.summonPosList.Add(new KeyValuePair <int, int>(unitPos, score)); } } } } } return(_v.summonPosList.Count > 0); }
private bool DoAction(out BattleAttackVO _vo) { Dictionary <KeyValuePair <int, int>, int> recDic = null; if (sds.GetAttackDamageAdd() > 0) { recDic = lastTargetDic; lastTargetDic = new Dictionary <KeyValuePair <int, int>, int>(); } List <int> result = BattlePublicTools.GetTurrentAttackTargetList(battleCore, parent.isMine, sds, pos); if (result != null) { Turrent[] oppTurrent = parent.isMine ? battleCore.oTurrent : battleCore.mTurrent; List <KeyValuePair <int, int> > damageDataList = new List <KeyValuePair <int, int> >(); for (int i = 0; i < result.Count; i++) { int targetPos = result[i]; if (targetPos < 0) { if (sds.GetAttackDamageAdd() > 0) { if (!lastTargetDic.ContainsKey(new KeyValuePair <int, int>(-1, -1))) { int lastTargetTime; if (recDic.TryGetValue(new KeyValuePair <int, int>(-1, -1), out lastTargetTime)) { lastTargetDic.Add(new KeyValuePair <int, int>(-1, -1), lastTargetTime); } else { lastTargetDic.Add(new KeyValuePair <int, int>(-1, -1), time); } } } int damage = DamageBase(); damageDataList.Add(new KeyValuePair <int, int>(-1, damage)); } else { Turrent targetTurrent = oppTurrent[targetPos]; if (sds.GetAttackDamageAdd() > 0) { if (!lastTargetDic.ContainsKey(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos))) { int lastTargetTime; if (recDic.TryGetValue(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos), out lastTargetTime)) { lastTargetDic.Add(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos), lastTargetTime); } else { lastTargetDic.Add(new KeyValuePair <int, int>(targetTurrent.parent.uid, targetTurrent.pos), time); } } } int damage = DamageTurrent(targetTurrent); damageDataList.Add(new KeyValuePair <int, int>(targetPos, damage)); } } _vo = new BattleAttackVO(parent.isMine, pos, damageDataList); return(true); } else { _vo = new BattleAttackVO(); return(false); } }