Exemplo n.º 1
0
        public Playfield(Playfield p, int timeShift = 0)
        {
            //this.pID = prozis.getPid();
            this.ownerIndex = p.ownerIndex;
            this.BattleTime = p.BattleTime;
            this.home       = p.home;
            this.ownMana    = p.ownMana;
            this.enemyMana  = p.enemyMana;

            copyCards(p.ownHandCards, p.nextCard, p.prevCard);

            copyBoardObj(p.ownMinions, this.ownMinions);
            copyBoardObj(p.enemyMinions, this.enemyMinions);

            copyBoardObj(p.ownAreaEffects, this.ownAreaEffects);
            copyBoardObj(p.enemyAreaEffects, this.enemyAreaEffects);

            copyBoardObj(p.ownBuildings, this.ownBuildings);
            copyBoardObj(p.enemyBuildings, this.enemyBuildings);

            copyBoardObj(p.ownTowers, this.ownTowers);
            copyBoardObj(p.enemyTowers, this.enemyTowers);

            this.ownKingsTower     = new BoardObj(p.ownKingsTower);
            this.ownPrincessTower1 = new BoardObj(p.ownPrincessTower1);
            this.ownPrincessTower2 = new BoardObj(p.ownPrincessTower2);

            this.enemyKingsTower     = new BoardObj(p.enemyKingsTower);
            this.enemyPrincessTower1 = new BoardObj(p.enemyPrincessTower1);
            this.enemyPrincessTower2 = new BoardObj(p.enemyPrincessTower2);

            initTowers();

            this.ownDeck   = p.ownDeck;
            this.enemyDeck = p.enemyDeck;

            this.ownGroup   = p.ownGroup;
            this.enemyGroup = p.enemyGroup;
            //enemyHandCards = prozis.enemyHandCards;

            if (p.needPrint)
            {
                this.needPrint = true;
                this.pIdHistory.AddRange(p.pIdHistory);
                this.pIdHistory.Add(pID);
            }
            this.nextEntity  = p.nextEntity;
            this.suddenDeath = p.suddenDeath;


            this.evaluatePenality = p.evaluatePenality;
            this.ruleWeight       = p.ruleWeight;
            this.rulesUsed        = p.rulesUsed;

            this.playactions.AddRange(p.playactions);

            if (timeShift != 0)
            {
                TimeMachine.Instance.setTimeShift(this, timeShift);
            }
        }
Exemplo n.º 2
0
        public group getGroup(bool own, int lowHPlimit = 70, boPriority priority = boPriority.byTotalNumber, int radius = 3000)
        {
            group           retval = null;
            group           Group;
            BoardObj        bo;
            List <BoardObj> listMobs      = own ? this.ownMinions : this.enemyMinions;
            List <BoardObj> listBuildings = own ? this.ownBuildings : this.enemyBuildings;
            List <BoardObj> listTowers    = own ? this.ownTowers : this.enemyTowers;
            int             val           = -1;
            int             tmpval        = 0;
            int             count         = listMobs.Count;

            for (int i = 0; i < count; i++)
            {
                bo    = listMobs[i];
                Group = new group(own, bo.Position, listMobs, lowHPlimit, false, radius);
                Group.addToGroup(listBuildings, false);
                Group.addToGroup(listTowers, true);
                switch (priority)
                {
                case boPriority.byTotalNumber:
                    tmpval = Group.lowHPbo.Count + Group.avgHPbo.Count + Group.hiHPbo.Count;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byLowHpNumber:
                    tmpval = Group.lowHPbo.Count;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byAvgHpNumber:
                    tmpval = Group.avgHPbo.Count;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byHiHpNumber:
                    tmpval = Group.hiHPbo.Count;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byTotalBuildingsDPS:
                    tmpval = Group.lowHPboBuildingsDPS + Group.avgHPboBuildingsDPS + Group.hiHPboBuildingsDPS;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byTotalAirDPS:
                    tmpval = Group.lowHPboAirDPS + Group.avgHPboAirDPS + Group.hiHPboAirDPS;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byTotalAirAreaDPS:
                    tmpval = Group.lowHPboAirAreaDPS + Group.avgHPboAirAreaDPS + Group.hiHPboAirAreaDPS;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byTotalGroundDPS:
                    tmpval = Group.lowHPboGroundDPS + Group.avgHPboGroundDPS + Group.hiHPboGroundDPS;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byTotalGroundAreaDPS:
                    tmpval = Group.lowHPboGroundAreaDPS + Group.avgHPboGroundAreaDPS + Group.hiHPboGroundAreaDPS;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;

                case boPriority.byTotalAirTransport:
                    tmpval = Group.lowHPboAirTransport + Group.avgHPboAirTransport + Group.hiHPboAirTransport;
                    if (tmpval > val)
                    {
                        val = tmpval; retval = Group;
                    }
                    break;
                }
            }

            return(retval);
        }
Exemplo n.º 3
0
        public Handcard getOppositeCard(Playfield p, group Group, int canWaitMissingMana = 3, int gangSize = 5)
        {
            Handcard bestCard = null;
            int      bestVal  = int.MinValue;
            int      tmpVal;

            foreach (Handcard hc in p.ownHandCards)
            {
                if (canWaitMissingMana >= hc.manacost - p.ownMana)
                {
                    tmpVal = 0;
                    int numAirTransport = Group.lowHPboAirTransport + Group.avgHPboAirTransport + Group.hiHPboAirTransport;
                    int groupSize       = Group.lowHPbo.Count + Group.avgHPbo.Count + Group.hiHPbo.Count;
                    if (hc.card.aoeAir)
                    {
                        tmpVal += 3;
                    }
                    if (hc.card.type == boardObjType.MOB)
                    {
                        tmpVal += 2;
                    }
                    if (hc.card.Transport == transportType.AIR)
                    {
                        tmpVal += 3;
                    }
                    if (numAirTransport > 0)
                    {
                        if (hc.card.TargetType == targetType.ALL)
                        {
                            tmpVal += 20;
                        }
                        if (Group.lowHPboAirTransport >= gangSize && hc.card.aoeAir)
                        {
                            tmpVal += 5;
                        }
                    }
                    if (groupSize > numAirTransport)
                    {
                        if (Group.lowHPbo.Count - Group.lowHPboAirTransport >= gangSize)
                        {
                            if (hc.card.aoeAir)
                            {
                                tmpVal += 15;
                            }
                            if (hc.card.aoeGround)
                            {
                                tmpVal += 15;
                            }
                        }
                        if (hc.card.TargetType == targetType.GROUND)
                        {
                            tmpVal += 15;
                        }
                        if (hc.card.TargetType == targetType.ALL)
                        {
                            tmpVal += 15;
                        }
                    }
                    foreach (BoardObj tmp in Group.hiHPbo)
                    {
                        if (OppositeDB.ContainsKey(tmp.card.name))
                        {
                            var opp = OppositeDB[tmp.card.name];
                            if (opp.ContainsKey(hc.card.name))
                            {
                                tmpVal += opp[hc.card.name] / 10;
                            }
                        }
                    }
                    foreach (BoardObj tmp in Group.avgHPbo)
                    {
                        if (OppositeDB.ContainsKey(tmp.card.name))
                        {
                            var opp = OppositeDB[tmp.card.name];
                            if (opp.ContainsKey(hc.card.name))
                            {
                                tmpVal += opp[hc.card.name] / 10;
                            }
                        }
                    }
                    foreach (BoardObj tmp in Group.lowHPbo)
                    {
                        if (OppositeDB.ContainsKey(tmp.card.name))
                        {
                            var opp = OppositeDB[tmp.card.name];
                            if (opp.ContainsKey(hc.card.name))
                            {
                                tmpVal += opp[hc.card.name] / 15;
                            }
                        }
                    }
                    if (bestVal < tmpVal)
                    {
                        bestVal              = tmpVal;
                        bestCard             = hc;
                        bestCard.val         = tmpVal;
                        bestCard.missingMana = hc.manacost - p.ownMana;
                    }
                }
            }
            return(bestCard);
        }