public PlacedOrder(HOUSE _name, Region _regionFrom, Region _regionTo, ORDER_TYPE _order)
 {
     this.ownerPlayerName = _name;
     this.regionFrom = _regionFrom;
     this.regionTo = _regionTo;
     this.order = _order;
 }
예제 #2
0
        public Unit CreateShip(HOUSE h)
        {
            ID = 0;
            player = h;
            type = UNIT_TYPE.KNIGHT;
            defeated = false;
            attackPoint = 1;
            defendPoint = 1;
            cost = 1;

            return this;
        }
예제 #3
0
        public Unit CreateSoldier(HOUSE h)
        {
            ID = 0;
            player = h;
            type = UNIT_TYPE.SOLDIER;
            defeated = false;
            attackPoint = 1;
            defendPoint = 1;
            cost = 1;

            return this;
        }
예제 #4
0
        public Unit CreateMachine(HOUSE h)
        {
            ID = 0;
            player = h;
            type = UNIT_TYPE.MACHINE;
            defeated = false;
            attackPoint = 4; // akkor negy ha erod/varat tamad amugy 0
            defendPoint = 0;
            cost = 2;

            return this;
        }
예제 #5
0
 public void mustering(HOUSE playerName, string typeOfUnit)
 {
     CPlayer plyr = findPlayerByName(playerName);
     Assert.IsNull(plyr);
     if (typeOfUnit == "ship" || typeOfUnit == "trooper")
     {
         if (checkMusteringPoints(plyr, typeOfUnit))
             --plyr.musteringPoints;
     }
     else if (typeOfUnit == "siege" || typeOfUnit == "horseman")
     {
         if (checkMusteringPoints(plyr, typeOfUnit))
             plyr.musteringPoints -= 2;
     }
 }
예제 #6
0
        //erofassok alapjan szamola
        public float GetPlayerPoints( HOUSE h )
        {
            foreach (var p in m_lPlayerList)
            {
                if (p.playerHouse != h)
                    continue;

                float nscore = 0;
                nscore += p.numberOfCities * 2;
                nscore += m_lUnitsList.Where(u => (u.player == p.playerHouse) && ((u.type == UNIT_TYPE.KNIGHT) || (u.type == UNIT_TYPE.SOLDIER))).Count() * 1.75f;
                nscore += p.numberOfPowerTokens * 1.5f;
                nscore += (1 / p.positionOnSwordInfluencetrack + 1);
                nscore += (1 / ((p.positionOnRavenInfluencetrack +1) / 2));
                nscore += (1 / p.positionOnSwordInfluencetrack +1 );

                return nscore;
            }
            throw new IndexOutOfRangeException();
         }
예제 #7
0
        private void CheckWinner( HOUSE h )
        {
            int sum = 0;
            foreach (var item in m_lRegionList)
            {
                if (item.house == h)
                {
                    sum++;
                }
            }

            if (sum >= 7)
            {
                AddToOutput("================================");
                AddToOutput("Jatek nyertesek:\n");
                AddToOutput("The Winner with 7 castle is: " + h);
                throw new HaveWinnerException();
            }
        }
예제 #8
0
        private bool ReconcileIsBetter(HOUSE h)
        {
            //elso lepesbebn lemasoljuk az osszes adatot h ne basztassuk azokat

            int actualpos = PositionOnScoreBoard(h);

            //elrakjuk az eredeti pontokat hogy visszatudjuk allitani ha megse jo
            // HOUSE, SUPPLY, POWER
            List<Tuple<HOUSE, int, int>> eredeti = new List<Tuple<HOUSE, int, int>>();
            foreach (var item in m_lPlayerList)
            {
                eredeti.Add(new Tuple<HOUSE, int, int>(item.playerHouse, item.musteringPoints, item.numberOfPowerTokens));
            }

            //vegrehajtjuk
            Reconcile();

            int newPos = PositionOnScoreBoard(h);



            if (newPos <= actualpos)
            {//ha jobb pozicio lett reconcile után v ugyanaz akkor ROLLBACK és truereturn

                //parasztrolbekk
                for (int i = 0; i < m_lPlayerList.Count; i++)
                {
                    for (int j = 0; j < eredeti.Count; j++)
                    {
                        if (m_lPlayerList[i].playerHouse == eredeti[j].Item1)
                        {
                            m_lPlayerList[i].musteringPoints = eredeti[j].Item2; ;
                            m_lPlayerList[i].numberOfPowerTokens = eredeti[j].Item3;
                        }
                    }
                }

                return true;
            }
            else
            {
                //ha nem akkor ROLEBACK és FALSE
                //parasztrolbekk
                for (int i = 0; i < m_lPlayerList.Count; i++)
                {
                    for (int j = 0; j < eredeti.Count; j++)
                    {
                        if (m_lPlayerList[i].playerHouse == eredeti[j].Item1)
                        {
                            m_lPlayerList[i].musteringPoints = eredeti[j].Item2; ;
                            m_lPlayerList[i].numberOfPowerTokens = eredeti[j].Item3;
                        }
                    }
                }
                return false;
            }
            //return true;
        }
예제 #9
0
        //hivatalos szabalyzat szerint szamolva
        public int PositionOnScoreBoard(HOUSE h)
        {
            List<Tuple<HOUSE, int>> sorrend = new List<Tuple<HOUSE, int>>();


            foreach (var item in m_lPlayerList)
            {
                int score = 0;
                score += m_lRegionList.Where(r => (r.house == item.playerHouse && (r.castle || r.city))).Count();
                sorrend.Add(new Tuple<HOUSE, int>(item.playerHouse, score));
            }


            sorrend.Sort((x, y) => x.Item2.CompareTo(y.Item2));

            sorrend.Reverse();
            List<HOUSE> holtversenyzok = new List<HOUSE>();
            //akkor van holtverseny ha az elsonek a pontjaival egyenlo van valakinek
            //azert egyrol indul mert ha 0rol menne akkor mindig az elso belekerulne, mert egyenlo onmagaval
            for (int i = 1; i < sorrend.Count; i++)
            {
                if (sorrend[0].Item2 == sorrend[i].Item2)
                {
                    holtversenyzok.Add(sorrend[i].Item1);
                }
            }

            //nincs holtverseny
            if ( /*holtverseny == false*/ holtversenyzok.Count == 0)
            {
                for (int i = 0; i < sorrend.Count; i++)
                {
                    if (sorrend[i].Item1 == h)
                    {
                        return i;
                    }
                }
            }
            else
            {
                //elso lepesben a vegleges sorrend vege megvan a sorrendben
                //ezert a holtversenyzoket kiszedjuk onnan
                for (int i = 0; i < holtversenyzok.Count; i++)
                {
                    sorrend.RemoveAll(t => t.Item1 == holtversenyzok[i]);
                }
                //mos megnezzuk h kinekek van tobb tobb erodje
                List<Tuple<HOUSE, int>> sorrend2 = new List<Tuple<HOUSE, int>>();
                foreach (var item in m_lPlayerList)
                {
                    if (holtversenyzok.Contains(item.playerHouse))
                    {
                        int score = 0;
                        score += m_lRegionList.Where(r => (r.house == item.playerHouse && (r.castle))).Count();
                        sorrend2.Add(new Tuple<HOUSE, int>(item.playerHouse, score));
                    }
                }

                sorrend2.Sort((x, y) => x.Item2.CompareTo(y.Item2));
                sorrend2.Reverse();
                holtversenyzok.Clear();
                //akkor van holtverseny ha az elsonek a pontjaival egyenlo van valakinek
                for (int i = 1; i < sorrend2.Count; i++)
                {
                    if (sorrend2[0].Item2 == sorrend2[i].Item2)
                    {
                        holtversenyzok.Add(sorrend2[i].Item1);
                    }
                }

                //osszerakjuk a listat
                for (int i = 0; i < sorrend.Count; i++)
                {
                    foreach (var item in sorrend)
                    {
                        sorrend2.Add(item);
                    }
                }

                sorrend = sorrend2;
                //nincs holtverseny
                if ( /*holtverseny == false*/ holtversenyzok.Count == 0)
                {
                    for (int i = 0; i < sorrend.Count; i++)
                    {
                        if (sorrend[i].Item1 == h)
                        {
                            return i;
                        }
                    }

                }
                else
                {
                    //megminidg dontotetlen, iylenkor jonnek a supplykat nezuk amit ugye nem szamolunk, ezrt powertoken
                    //elso lepesben a vegleges sorrend vege megvan a sorrendben
                    //ezert a holtversenyzoket kiszedjuk onnan
                    for (int i = 0; i < holtversenyzok.Count; i++)
                    {
                        sorrend.RemoveAll(t => t.Item1 == holtversenyzok[i]);
                    }
                    //mos megnezzuk h kinekek van tobb tobb erodje
                    List<Tuple<HOUSE, int>> sorrend3 = new List<Tuple<HOUSE, int>>();
                    foreach (var item in m_lPlayerList)
                    {
                        if (holtversenyzok.Contains(item.playerHouse))
                        {
                            int score = 0;
                            score += m_lRegionList.Where(r => (r.house == item.playerHouse && (r.castle))).Count();
                            sorrend3.Add(new Tuple<HOUSE, int>(item.playerHouse, score));
                        }
                    }

                    sorrend3.Sort((x, y) => x.Item2.CompareTo(y.Item2));
                    sorrend3.Reverse();
                    holtversenyzok.Clear();
                    //akkor van holtverseny ha az elsonek a pontjaival egyenlo van valakinek
                    for (int i = 1; i < sorrend3.Count; i++)
                    {
                        if (sorrend3[0].Item2 == sorrend3[i].Item2)
                        {
                            holtversenyzok.Add(sorrend3[i].Item1);
                        }
                    }

                    //osszerakjuk a listat
                    for (int i = 0; i < sorrend.Count; i++)
                    {
                        foreach (var item in sorrend)
                        {
                            sorrend3.Add(item);
                        }
                    }
                    sorrend = sorrend3;
                    //nincs holtverseny
                    if ( /*holtverseny == false*/ holtversenyzok.Count == 0)
                    {
                        for (int i = 0; i < sorrend.Count; i++)
                        {
                            if (sorrend[i].Item1 == h)
                            {
                                return i;
                            }
                        }
                    }
                    else
                    {
                        //itt mar a holtverseny csak a az egysegek erejen mulik
                        //elso lepesben a vegleges sorrend vege megvan a sorrendben
                        //ezert a holtversenyzoket kiszedjuk onnan
                        for (int i = 0; i < holtversenyzok.Count; i++)
                        {
                            sorrend.RemoveAll(t => t.Item1 == holtversenyzok[i]);
                        }
                        //mos megnezzuk h kinekek van tobb tobb erodje
                        List<Tuple<HOUSE, int>> sorrend4 = new List<Tuple<HOUSE, int>>();
                        foreach (var item in m_lPlayerList)
                        {
                            if (holtversenyzok.Contains(item.playerHouse))
                            {
                                int score = 0;
                                score += m_lUnitsList.Where(u => (u.player == item.playerHouse)).Count();
                                sorrend4.Add(new Tuple<HOUSE, int>(item.playerHouse, score));
                            }
                        }

                        sorrend4.Sort((x, y) => x.Item2.CompareTo(y.Item2));
                        sorrend4.Reverse();
                        holtversenyzok.Clear();
                        //akkor van holtverseny ha az elsonek a pontjaival egyenlo van valakinek
                        for (int i = 1; i < sorrend4.Count; i++)
                        {
                            if (sorrend4[0].Item2 == sorrend4[i].Item2)
                            {
                                holtversenyzok.Add(sorrend4[i].Item1);
                            }
                        }

                        //osszerakjuk a listat
                        for (int i = 0; i < sorrend.Count; i++)
                        {
                            foreach (var item in sorrend)
                            {
                                sorrend4.Add(item);
                            }
                        }
                        sorrend = sorrend4;
                        //
                        //ez mar a veglegs igy feleslegs a vizsgalat
                        //if ( /*holtverseny == false*/ holtversenyzok.Count == 0)
                        {
                            for (int i = 0; i < sorrend.Count; i++)
                            {
                                if (sorrend[i].Item1 == h)
                                {
                                    return i;
                                }
                            }
                        }
                    }

                }
            }

            throw new Exception();
        }
예제 #10
0
 public PlacedOrderStruct(HOUSE _name, regionStruct _region, OrderStruct _order)
 {
     this.ownerPlayerName = _name;
     this.region = _region;
     this.order = _order;
 }
예제 #11
0
        public void Support(HOUSE player1, HOUSE player2, ref int tamadoPont, ref int vedoPont)
        {
           
            Random rnd = new Random();

            int res = rnd.Next(0, 3);

            switch (res)
            {
                case 0:
                    tamadoPont++;
                    break;
                case 1:
                    vedoPont++;
                    break;
                default:
                    break;
            }

        }
예제 #12
0
        public void ExecuteRaid(GameState gs, HOUSE h, ref List<PlacedOrder> raidList, ref List<PlacedOrder> attackList, ref List<PlacedOrder> consList, ref List<PlacedOrder> defList, ref List<PlacedOrder> supList, out string desc)
        {
            //azt tudjuk h akkor van pakolva raid ha mellettünk ellenség van
            //namármost megnézzük a raidlistában h melyik raidok a mieink
            //megnézzükh melyik meleltt van ellenség és random választunk

            List<PlacedOrder> amibolValaszthatunk = new List<PlacedOrder>();

            foreach (var item in raidList)
            {
                if (item.ownerPlayerName == h)
                {
                    if (!amibolValaszthatunk.Contains(item))
                    {
                        amibolValaszthatunk.Add(item);
                    }
                }
            }


            if (amibolValaszthatunk.Count > 0)
            {
                PlacedOrder vegrehajtando = amibolValaszthatunk[0];


                //keressük meg h hova táamadhatok

                List<Region> lehetsegesMegye = new List<Region>();

                //ellensege a megye v ellenseg van rajta

                foreach (var item in gs.UnitsList)
                {
                    if (item.player != h)
                    {
                        //szóval ellenség,... a kis gyenyó
                        if (vegrehajtando.regionFrom.neighbours.Contains(item.position))
                        {
                            //esmegszomszedos is
                            if (!lehetsegesMegye.Contains(item.position))
                            {
                                lehetsegesMegye.Add(item.position);
                            }
                        }
                    }
                }

                foreach (var item in gs.RegionList)
                {
                    if (vegrehajtando.regionFrom.neighbours.Contains(item))
                    {
                        if (item.house != h)
                        {
                            //ha nem a milyen de szomszedunk
                            if (!lehetsegesMegye.Contains(item))
                            {
                                lehetsegesMegye.Add(item);
                            }
                        }
                    }
                }

                if (lehetsegesMegye.Count > 0)
                {
                    vegrehajtando.regionTo = lehetsegesMegye[0];


                if (attackList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
                    {
                        attackList.Remove(attackList.Find(a => a.regionFrom == vegrehajtando.regionTo));
                        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
                        raidList.Remove(vegrehajtando);
                        return;
                    }

                    if (raidList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
                    {
                        raidList.Remove(raidList.Find(a => a.regionFrom == vegrehajtando.regionTo));
                        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
                        raidList.Remove(vegrehajtando);
                        return;
                    }

                    if (consList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
                    {
                        consList.Remove(consList.Find(a => a.regionFrom == vegrehajtando.regionTo));
                        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
                        raidList.Remove(vegrehajtando);
                        return;
                    }

                    if (defList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
                    {
                        defList.Remove(defList.Find(a => a.regionFrom == vegrehajtando.regionTo));
                        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
                        raidList.Remove(vegrehajtando);
                        return;
                    }

                    if (supList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
                    {
                        supList.Remove(supList.Find(a => a.regionFrom == vegrehajtando.regionTo));
                        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
                        raidList.Remove(vegrehajtando);
                        return;
                    }
                }

                if (raidList.Contains(vegrehajtando))
                {
                    raidList.Remove(vegrehajtando);
                }


            }


            //// most megnezzuk h melettunk hol van serreg
            ////erdemes azt megnezni hogy mi az amit csak egy parancscsal érek el, es mi az amit többel is,
            ////mert akkor zzal kell leszedni amivel csak egyszer erjuk el
            //
            //
            //List<regioPont> regioHanyszorerjukEl = new List<regioPont>();
            //
            //foreach (var item in amibolValaszthatunk)
            //{
            //    foreach (var n in item.regionFrom.neighbours)
            //    {
            //        foreach (var unit in gs.UnitsList)
            //        {
            //            //ha az akis paraszt nem a milyen és a szomszédos région áll akkor bizony hozzáadjuk a listhoz
            //            if (unit.player != h && unit.position == n)
            //            {
            //                regioPont newR;
            //                newR.regioFrom = item.regionFrom;
            //                newR.regioTo = n;
            //                newR.pont = 1;
            //                if ( regioHanyszorerjukEl.Where( a => a.regioTo == n).Count() > 0)
            //                {
            //                    int aktpont = regioHanyszorerjukEl.Find(a => a.regioTo == n).pont;
            //                    regioHanyszorerjukEl.Remove(regioHanyszorerjukEl.Find(a => a.regioTo == n));
            //                    newR.pont = aktpont;
            //                }
            //
            //                regioHanyszorerjukEl.Add(newR);
            //                break;
            //            }
            //        }
            //    }
            //}
            //
            ////namostmár megvan h mi hányszor erheto el,.. lehetoleg novekvo sorrendbe pakolva hasznaljuk
            //
            //regioHanyszorerjukEl = regioHanyszorerjukEl.OrderBy(i => i.pont).ToList();
            //
            ////novekvo sorrenben van
            //
            //
            //PlacedOrder vegrehajtando;
            //
            //if (regioHanyszorerjukEl.Count > 0)
            //{
            //    vegrehajtando = amibolValaszthatunk.Find(m => m.regionFrom == regioHanyszorerjukEl[0].regioFrom);
            //    if (vegrehajtando == null)
            //    {
            //        throw new Exception();
            //    }
            //
            //
            //    //vegrejatas
            //
            //    //mekkeressuk h odamilyen parancsot raktak és azt leszedjuk
            //
            //    if( attackList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0 )
            //    {
            //        attackList.Remove(attackList.Find(a => a.regionFrom == vegrehajtando.regionTo));
            //        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
            //        raidList.Remove(vegrehajtando);
            //        return;
            //    }
            //
            //    if (raidList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
            //    {
            //        raidList.Remove(raidList.Find(a => a.regionFrom == vegrehajtando.regionTo));
            //        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
            //        raidList.Remove(vegrehajtando);
            //        return;
            //    }
            //
            //    if (consList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
            //    {
            //        consList.Remove(consList.Find(a => a.regionFrom == vegrehajtando.regionTo));
            //        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
            //        raidList.Remove(vegrehajtando);
            //        return;
            //    }
            //
            //    if (defList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
            //    {
            //        defList.Remove(defList.Find(a => a.regionFrom == vegrehajtando.regionTo));
            //        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
            //        raidList.Remove(vegrehajtando);
            //        return;
            //    }
            //
            //    if (supList.Count(a => a.regionFrom == vegrehajtando.regionTo) > 0)
            //    {
            //        supList.Remove(supList.Find(a => a.regionFrom == vegrehajtando.regionTo));
            //        desc = h + " use " + vegrehajtando.order + " from: " + vegrehajtando.regionFrom.name + " to " + vegrehajtando.regionTo.name;
            //        raidList.Remove(vegrehajtando);
            //        return;
            //    }
            //
            //
            //}
            desc = " raiddalvmi baj van";
        }
예제 #13
0
        //paramlista: Gamestate, kivagyoken, ebbe pakolom a parancsaim
        public void PlaceOrders(GameState gs, HOUSE h, ref List<PlacedOrder> PlacedOrderList)
        {
            //from-to
            List<Tuple<Region, Region>> FinalAttackOrderList = new List<Tuple<Region, Region>>();
            List<Tuple<Region, Region>> FinalRaidOrderList = new List<Tuple<Region, Region>>();
            List<Tuple<Region, Region>> FinalDefenseOrderList = new List<Tuple<Region, Region>>();
            List<Tuple<Region, Region>> FinalSupportOrderList = new List<Tuple<Region, Region>>();//ezzel magunkat erosithetjuk, erdemes a tamadasok, vedekzesek melle rakni
            List<Tuple<Region, Region>> FinalKoronaOrderList = new List<Tuple<Region, Region>>();
            //raidhoz v vedekezeshez eltesszuk
            //olyan megye ami szomszedos, de rajta van elenseg
            //EZT ELTESSZUK KESOBBRE
            List<Region> EnemyNextToUs = new List<Region>();
            List<Region> SAJATMEGYE = new List<Region>();
            List<Region> SAJATMEGYESEREGGEL = new List<Region>();//nyilvan valoan csak ezekre rakunk majd attackott
            List<Region> sajatOsszesMEGYE = new List<Region>();
            List<Region> MEGYEELLENSEGESMeletttunk = new List<Region>();


            foreach (var item in gs.UnitsList)
            {
                if (item.player == h)
                {
                    if (!SAJATMEGYE.Contains(item.position) && !SAJATMEGYESEREGGEL.Contains(item.position) && !sajatOsszesMEGYE.Contains(item.position))
                    {
                        SAJATMEGYESEREGGEL.Add(item.position);
                        sajatOsszesMEGYE.Add(item.position);
                    }
                }
            }

            foreach (var item in gs.RegionList)
            {
                if ( item.house == h )
                {
                    if (!SAJATMEGYE.Contains(item) && !SAJATMEGYESEREGGEL.Contains(item) && !sajatOsszesMEGYE.Contains(item))
                    {
                        SAJATMEGYE.Add(item);
                        sajatOsszesMEGYE.Add(item);
                    }
                }
            }

            foreach (var item in gs.UnitsList)
            {
                if (item.player != h && item.player != HOUSE.NONE)
                {
                    for (int i = 0; i < sajatOsszesMEGYE.Count; i++)
                    {
                        if (sajatOsszesMEGYE[i].neighbours.Contains(item.position))
                        {
                            if (!MEGYEELLENSEGESMeletttunk.Contains(item.position))
                                MEGYEELLENSEGESMeletttunk.Add(item.position);
                        }
                    }

                }
            }


            // ATTACK:
            // itt csinálunk 2 db INFLUENCE MAP-ot:
            //     - 7 db város szempontjából (tobb korre is meg lehet nezni h melyikek a legfontosabbak)
            //     - ellenfelek hol halyezkednke el
            //      => ez lesz az influence map
            //      - megnezzuk hova tudunk mozogni a sereggekkel, mekkora eroval
            //      => goal map
            //      => vegeredmeny: influence map + goal map
            // ezután összelayerezzuk oket, 1:1-hez aranyban és az egyik kapott területek elfoglallása a cél.
            //annak a kornyekre teszunk attackot

            // RAID:
            // ellenseges terulet 1 tavolsagon belul
            // minnelnagyobb a sereg, annal valoszinubb h oda teszunk raidot
            //attackkal egyutt erdems hasznalni

            // DEFENSE:
            // akkor rakjuk ha melletunk nagyobb sereg van & varunk van a kornyeken
            //  
            // TAMOGATAS:
            // csak DEFENSE, v egyenlo nagysagu sereg melle rakjuk
            //  
            // KORONA: 
            //  tok biztonságos pozikra rakjuk ( tok feleslegsen
            //  
            //  



            //7db varoshoz lepesek:
            //  0. lepes: - tarolo lista megalkotasa
            //  0.2 lepes: sajat megyeink kivetele ebbol
            //  1. lepes: - minden megyehez 0-es float erteket rendelni, 
            //  2. lepes: - minden varhoz/kastelyhoz 2-es float ertek ( ha ellensege akkor 1e)sf
            //  3. lepes: - var/kastely megyek ertekeik felet adjak a szomszedos megy ertekehez
            //  4. lepes: - 3.lepes rekurziv ismeltles szomszedos megyekre
            //  5. lepes: - mostmar tudjuk merre kell terjeszkedni, erdemes megnezni hogy mi hol vagyunk es merre kell menni


            // 0. lepes
            //regio, pont, adotte mar pontot
            //mivel a tuple readonly ezért 1 struktba rakjuk
            List<HetVarosStruct> HetVarosList = new List<HetVarosStruct>();

                foreach (var item in gs.RegionList)
                {
                    //0 - 0.2 lepes:
                    if (!item.isSea && item.house != h)
                    {
                        HetVarosStruct v;
                        v.addotEMarPontot = false;
                        v.pont = 0.0f;
                        v.regio = item;
                        //1es lepes iis
                        HetVarosList.Add(v);
                    }
                }

                //2lepes
                for (int i = 0; i < HetVarosList.Count; i++)
                {
                    HetVarosStruct temp = HetVarosList[i];
                    if (HetVarosList[i].regio.castle || HetVarosList[i].regio.city)
                    {
                        //senkie mehet neki a ket pont
                        if (HetVarosList[i].regio.house == HOUSE.NONE)
                        {
                            temp.pont += 2.0f;
                        }
                        else
                        {//elensege
                            temp.pont += 1.0f;
                        }
                    }
                    HetVarosList.Remove(HetVarosList[i]);
                    HetVarosList.Insert(i, temp);


                }

                //3 REKKUrZIV pontosztas
                List<Region> pontOsztok = new List<Region>();
                List<Region> pontOsztokAkoviKorben = new List<Region>();

                foreach (var item in HetVarosList)
                {
                    //a megyek osztjak a pontokat a szomszedoknak
                    if (item.pont != 0.0f)
                        pontOsztok.Add(item.regio);
                }

                //ez eugye akkor áll meg ha minden nyomorult megye osztott pontot, az utolsó senkinek nem fog de nmebaj hadd legyen jó nekki is es oszthason pontot
                while (pontOsztok.Count > 0)
                {
                    pontOsztokAkoviKorben.Clear();

                    for (int i = 0; i < pontOsztok.Count; i++)
                    {
                        for (int j = 0; j < pontOsztok[i].neighbours.Count; j++)
                        {
                            for (int k = 0; k < HetVarosList.Count; k++)
                            {
                                if (HetVarosList[k].regio == pontOsztok[i].neighbours[j] && HetVarosList[k].addotEMarPontot == false)
                                {
                                    HetVarosStruct temp = HetVarosList[k];
                                    temp.pont = HetVarosList.Find(v => v.regio == pontOsztok[i]).pont / 2;
                                    HetVarosList.Remove(HetVarosList[k]);
                                    HetVarosList.Insert(k, temp);
                                    if (!pontOsztokAkoviKorben.Contains(temp.regio))
                                        pontOsztokAkoviKorben.Add(temp.regio);
                                }
                            }

                        }
                        //beallitjuk h ez a terulet mar ne kapjon pontot
                        for (int x = 0; x < HetVarosList.Count; x++)
                        {
                            if (HetVarosList[x].regio == pontOsztok[i])
                            {
                                HetVarosStruct temp = HetVarosList[x];
                                temp.addotEMarPontot = true;
                                HetVarosList.Remove(HetVarosList[x]);
                                HetVarosList.Insert(x, temp);
                            }
                        }
                    }
                    // fekeszulunk a kovi iteraciora
                    pontOsztok = pontOsztokAkoviKorben;
                }





            //egyerusitett orders: 1.0v
            // cons: egységek helyére, ha a terulet a mienk akkor megyunk tovább, random - OK
            // attak:ha milyenk a hely akkor megyunk tovabb, pl varra - OK
            // def: ha meletunk elenségvan és én vár vagyok -OK
            // sup: ha melettem nincs ellenseg es van melettem def - OK
            // raid: raid-def-sup komboba, ha melettem ellenségvan és van melettem def - OK



            for (int i = 0; i < SAJATMEGYESEREGGEL.Count; i++)
            {
                // milyenk
                if (SAJATMEGYESEREGGEL[i].house == h )
                {
                    Random rnd = new Random();
                    int number = rnd.Next(0, SAJATMEGYESEREGGEL[i].neighbours.Count);
                    if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[i]))
                    {
                        FinalAttackOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[i], SAJATMEGYESEREGGEL[i].neighbours[number]));
                        sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[i]);
                    }
                }
                else
                {
                    if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[i]))
                    {
                        FinalKoronaOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[i], null));
                        sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[i]);
                    }
                }
            }

            int max = sajatOsszesMEGYE.Count;
            for (int i = 0; i < max; i++)
            {
                //ha melettunk kozvetlenul ellenseg van akkor 
                if (MEGYEELLENSEGESMeletttunk.Contains(sajatOsszesMEGYE[i]))
                {
                    // ezt a sort kikommenteltem mert 1 nemtom miert van itt, 2 breakel
                    //if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[i]))
                    {
                        FinalDefenseOrderList.Add(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                        //sajatOsszesMEGYE.Remove(sajatOsszesMEGYE[i]);
                        //continue;
                    }
                }

                bool vanEmarMellettunkDef = false; // "az kizárt, mert nemtudom' " 

                foreach (var item in FinalDefenseOrderList)
                {
                    foreach (var item2 in sajatOsszesMEGYE[i].neighbours)
                    {
                        vanEmarMellettunkDef = true;
                    }

                }

                bool defensVanEMarRajtam = false;

                foreach (var item in FinalDefenseOrderList)
                {
                    if (item.Item1 == sajatOsszesMEGYE[i])
                    {
                        defensVanEMarRajtam = true;
                    }

                }

                //melettem def és meletem ellenseg is ÉS rajtam is defvan akkor le operalom a def-et, kap raidot, aztjólvan meg szupportot
                if (MEGYEELLENSEGESMeletttunk.Contains(sajatOsszesMEGYE[i]) && vanEmarMellettunkDef  && defensVanEMarRajtam )
                {
                    if (defensVanEMarRajtam)
                    {
                        FinalDefenseOrderList.Remove(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                        FinalRaidOrderList.Add(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                    }
                    else
                    {
                        FinalRaidOrderList.Add(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                        //sajatOsszesMEGYE.Remove(sajatOsszesMEGYE[i]);
                        continue;
                    }

                }
                else if (!MEGYEELLENSEGESMeletttunk.Contains(sajatOsszesMEGYE[i]) && vanEmarMellettunkDef)
                {
                    if (defensVanEMarRajtam)
                    {
                        FinalDefenseOrderList.Remove(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                        FinalSupportOrderList.Add(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                    }
                    else
                    {
                        FinalSupportOrderList.Add(new Tuple<Region, Region>(sajatOsszesMEGYE[i], null));
                        //sajatOsszesMEGYE.Remove(sajatOsszesMEGYE[i]);
                        continue;
                    }
                }
            }


            //////////////////////mostmar megvannak a pontok
            //////////////////////most megnezzuk h a megyeinknek, és az elerhetomegyeinknek mennyi pontja van
            ////////////////////List<Tuple<Region, float>> elerhetoMegyekEsPontok = new List<Tuple<Region, float>>();
            ////////////////////
            ////////////////////for (int j = 0; j < HetVarosList.Count; j++)
            ////////////////////{
            ////////////////////    for (int i = 0; i < SAJATMEGYESEREGGEL.Count; i++)
            ////////////////////    {
            ////////////////////        if (HetVarosList[j].regio == SAJATMEGYESEREGGEL[i])
            ////////////////////        {
            ////////////////////            if (elerhetoMegyekEsPontok.Find(a => a.Item1 == HetVarosList[j].regio) == null)
            ////////////////////            {
            ////////////////////                elerhetoMegyekEsPontok.Add(new Tuple<Region, float>(HetVarosList[j].regio, HetVarosList[j].pont));
            ////////////////////            }
            ////////////////////        }
            ////////////////////
            ////////////////////        for (int k = 0; k < SAJATMEGYESEREGGEL[i].neighbours.Count; k++)
            ////////////////////        {
            ////////////////////            if (HetVarosList[j].regio == SAJATMEGYESEREGGEL[i].neighbours[k])
            ////////////////////            {
            ////////////////////                if (elerhetoMegyekEsPontok.Find(a => a.Item1 == HetVarosList[j].regio) == null)
            ////////////////////                {
            ////////////////////                    elerhetoMegyekEsPontok.Add(new Tuple<Region, float>(HetVarosList[j].regio, HetVarosList[j].pont));
            ////////////////////                }
            ////////////////////            }
            ////////////////////        }
            ////////////////////    }
            ////////////////////}
            ////////////////////
            //////////////////////csokeno sorrenben
            ////////////////////elerhetoMegyekEsPontok = elerhetoMegyekEsPontok.OrderBy(item => item.Item2).ToList();
            ////////////////////elerhetoMegyekEsPontok.Reverse();
            ////////////////////
            ////////////////////
            ////////////////////for (int j = 0; j < SAJATMEGYESEREGGEL.Count; j++)
            ////////////////////{
            ////////////////////    if (SAJATMEGYESEREGGEL[j].castle || SAJATMEGYESEREGGEL[j].city)
            ////////////////////    {
            ////////////////////        if (SAJATMEGYESEREGGEL[j].house == HOUSE.NONE) //elfoglaltuk-e
            ////////////////////        {
            ////////////////////            //ha igen akkor megtamadjuk
            ////////////////////            //ha tehetünk rá parit
            ////////////////////            if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            ////////////////////            {
            ////////////////////                FinalKoronaOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], null));
            ////////////////////                sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            ////////////////////            }
            ////////////////////        }
            ////////////////////        else
            ////////////////////        {
            ////////////////////            //elvileg ez a mienk, es igy jó elsz
            ////////////////////            //megyunk tovabb
            ////////////////////            for (int i = 0; i < elerhetoMegyekEsPontok.Count; i++)
            ////////////////////            {
            ////////////////////                //mivel rendezet az elso ami okes arra megyunk
            ////////////////////                for (int k = 0; k < SAJATMEGYESEREGGEL[j].neighbours.Count; k++)
            ////////////////////                {
            ////////////////////                    if (SAJATMEGYESEREGGEL[j].neighbours[k].name == elerhetoMegyekEsPontok[i].Item1.name)
            ////////////////////                    {
            ////////////////////                        if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            ////////////////////                        {
            ////////////////////                            FinalAttackOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], elerhetoMegyekEsPontok[i].Item1));
            ////////////////////                            sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            ////////////////////                        }
            ////////////////////                    }
            ////////////////////                }
            ////////////////////            }
            ////////////////////        }
            ////////////////////    }
            ////////////////////    else
            ////////////////////    {
            ////////////////////        //nincsitlofaszse, megnezzuk hova erdemes lepni
            ////////////////////        for (int i = 0; i < elerhetoMegyekEsPontok.Count; i++)
            ////////////////////        {
            ////////////////////            //mivel rendezet az elso ami okes arra megyunk
            ////////////////////            for (int k = 0; k < SAJATMEGYESEREGGEL[j].neighbours.Count; k++)
            ////////////////////            {
            ////////////////////                if (SAJATMEGYESEREGGEL[j].neighbours[k].name == elerhetoMegyekEsPontok[i].Item1.name)
            ////////////////////                {
            ////////////////////                    if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            ////////////////////                    {
            ////////////////////                        FinalAttackOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], elerhetoMegyekEsPontok[i].Item1));
            ////////////////////                        sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            ////////////////////                    }
            ////////////////////                }
            ////////////////////            }
            ////////////////////        }    
            ////////////////////    }
            ////////////////////
            ////////////////////
            ////////////////////
            ////////////////////
            ////////////////////}




            //////    List<Region> kozvetlenMegyek = new List<Region>();
            //////    //levalogatjuk a szamunkra erdekeset, vagyhat amit tamadhatunk amit raidelhetunk amit esetleg foglalhatunk
            //////    for (int i = 0; i < HetVarosList.Count; i++)
            //////    {
            //////        if (IsSzomszedosMegyeE(HetVarosList[i].regio, sajatOsszesMEGYE))
            //////        {
            //////            if (!kozvetlenMegyek.Contains(HetVarosList[i].regio))
            //////            {
            //////                kozvetlenMegyek.Add(HetVarosList[i].regio);
            //////            }
            //////        }
            //////    }
            //////
            ////////elsore megnezzuk hogy van-e itt 2 pontos megye, mert azt tamadjuk
            //////List<Region> ketpontosMegye = new List<Region>();
            //////for (int i = 0; i < kozvetlenMegyek.Count; i++ )
            //////    {
            //////        for (int j = 0; j < HetVarosList.Count; j++)
            //////        {
            //////        if (kozvetlenMegyek[i].name == HetVarosList[j].regio.name && (HetVarosList[j].pont > 1 && HetVarosList[j].pont <= 2))
            //////            {
            //////                if( !ketpontosMegye.Contains(kozvetlenMegyek[i]))
            //////                    ketpontosMegye.Add((kozvetlenMegyek[i]));
            //////            }
            //////        }                    //if (HetVarosList.Where(a => a.regio == kozvetlenMegyek[i]).First().pont >= 2.0f) 
            //////    }
            //////
            //////
            //////for (int j = 0; j < SAJATMEGYESEREGGEL.Count; j++)
            //////{
            //////    if (SAJATMEGYESEREGGEL[j].castle || SAJATMEGYESEREGGEL[j].city)
            //////    {
            //////        if (SAJATMEGYESEREGGEL[j].house == HOUSE.NONE) //elfoglaltuk-e
            //////        {
            //////            //ha igen akkor megtamadjuk
            //////            //ha tehetünk rá parit
            //////            if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////            {
            //////                FinalKoronaOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], null));
            //////                sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////            }
            //////
            //////        }
            //////    }
            //////}
            //////
            //////
            //////
            //////            //na ezek abszolut támadhatóak,
            //////            //namármost figyelembe veszuk h alattunk 2 pontos megy van-e és ha igen és nem a mien akkor azt elfoglaljuk inkább ellenben mozgunk
            //////
            //////            for (int i = 0; i < ketpontosMegye.Count; i++)
            //////{
            //////    for (int j = 0; j < SAJATMEGYESEREGGEL.Count; j++)
            //////    {
            //////        if (ketpontosMegye[i].neighbours.Contains(SAJATMEGYESEREGGEL[j]))
            //////        {
            //////            if (SAJATMEGYESEREGGEL[j].castle || SAJATMEGYESEREGGEL[j].city)
            //////            {
            //////                if (SAJATMEGYESEREGGEL[j].house == h) //elfoglaltuk-e
            //////                {
            //////                    //ha igen akkor megtamadjuk
            //////                    //ha tehetünk rá parit
            //////                    if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////                    {
            //////                        FinalAttackOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], ketpontosMegye[i]));
            //////                        sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////                    }
            //////                    
            //////                }
            //////                else
            //////                {
            //////                    if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////                    {
            //////                        //ha nem a mienk akkor placeljuk
            //////                        FinalKoronaOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], null));
            //////                        sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////                    }
            //////                }
            //////            }
            //////            else
            //////            {
            //////                //amin allunk nincs ertekes pont
            //////                //hat megtamadjuk a msikat
            //////                if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////                {
            //////                    //ha nem a mienk akkor placeljuk
            //////                    FinalAttackOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], ketpontosMegye[i]));
            //////                    sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////                }
            //////            }
            //////        }
            //////    }
            //////}
            //////
            //////
            //////List<Region> egyvkevesebbpontosMegye = new List<Region>();
            //////for (int i = 0; i < kozvetlenMegyek.Count; i++)
            //////{
            //////    for (int j = 0; j < HetVarosList.Count; j++)
            //////    {
            //////        if (kozvetlenMegyek[i].name == HetVarosList[j].regio.name && (HetVarosList[j].pont > 1 && HetVarosList[j].pont <= 2))
            //////        {
            //////            if (!egyvkevesebbpontosMegye.Contains(kozvetlenMegyek[i]))
            //////                egyvkevesebbpontosMegye.Add((kozvetlenMegyek[i]));
            //////        }
            //////    }                    //if (HetVarosList.Where(a => a.regio == kozvetlenMegyek[i]).First().pont >= 2.0f) 
            //////}
            //////
            //////for (int i = 0; i < egyvkevesebbpontosMegye.Count; i++)
            //////{
            //////    for (int j = 0; j < SAJATMEGYESEREGGEL.Count; j++)
            //////    {
            //////        if (SAJATMEGYESEREGGEL[j].house == h)
            //////        {
            //////            if (MEGYEELLENSEGESMeletttunk.Contains(SAJATMEGYESEREGGEL[j]))
            //////            {
            //////                Region szomszedosmegyeamilehethtamad = null;
            //////                for (int k = 0; k < MEGYEELLENSEGESMeletttunk.Count; k++)
            //////                {
            //////                    if (MEGYEELLENSEGESMeletttunk[k].neighbours.Contains(SAJATMEGYESEREGGEL[j]))
            //////                    {
            //////                        szomszedosmegyeamilehethtamad = MEGYEELLENSEGESMeletttunk[k];
            //////                        break;
            //////                    }
            //////                }
            //////
            //////                if (szomszedosmegyeamilehethtamad != null)
            //////                {
            //////
            //////                    if (this.SeregemNagyobbE(gs, h, SAJATMEGYESEREGGEL[j], szomszedosmegyeamilehethtamad, false))
            //////                    {
            //////                        if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////                        {
            //////                            //ha nem a mienk akkor placeljuk
            //////                            FinalAttackOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], szomszedosmegyeamilehethtamad));
            //////                            sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////                        }
            //////                        
            //////                    }
            //////                    else
            //////                    {
            //////                        if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////                        {
            //////                            //ha nem a mienk akkor placeljuk
            //////                            FinalDefenseOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], null));
            //////                            sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////                        }
            //////                        
            //////                    }
            //////                }
            //////            }
            //////            else
            //////            {
            //////                if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////                {
            //////                    //ha nem a mienk akkor placeljuk
            //////                    FinalKoronaOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], null));
            //////                    sajatOsszesMEGYE.Remove(SAJATMEGYESEREGGEL[j]);
            //////                }
            //////            }
            //////        }
            //////    }
            //////}
            //////
            //////
            //////
            //////
            //////List<Region> egynelkevesebbpontosmegye = new List<Region>();
            //////for (int i = 0; i < kozvetlenMegyek.Count; i++)
            //////{
            //////    for (int j = 0; j < HetVarosList.Count; j++)
            //////    {
            //////        if (kozvetlenMegyek[i].name == HetVarosList[j].regio.name && (HetVarosList[j].pont <= 1))
            //////        {
            //////            if (!egynelkevesebbpontosmegye.Contains(kozvetlenMegyek[i]))
            //////                egynelkevesebbpontosmegye.Add((kozvetlenMegyek[i]));
            //////        }
            //////    }                    //if (HetVarosList.Where(a => a.regio == kozvetlenMegyek[i]).First().pont >= 2.0f) 
            //////}
            //////
            //////for (int i = 0; i < egynelkevesebbpontosmegye.Count; i++)
            //////{
            //////    for (int j = 0; j < SAJATMEGYESEREGGEL.Count; j++)
            //////    {
            //////        if (SAJATMEGYESEREGGEL[j] == egynelkevesebbpontosmegye[i])
            //////        {
            //////            if (sajatOsszesMEGYE.Contains(SAJATMEGYESEREGGEL[j]))
            //////            {
            //////                //ha nem a mienk akkor placeljuk
            //////                FinalKoronaOrderList.Add(new Tuple<Region, Region>(SAJATMEGYESEREGGEL[j], null));
            //////                sajatOsszesMEGYE.Remove(SAJATMEGYE[i]);
            //////            }
            //////        }
            //////    }
            //////
            //////}
            //////
            //////
            //////for (int i = 0; i < SAJATMEGYE.Count; i++)
            //////{
            //////    for (int j = 0; j < FinalDefenseOrderList.Count; j++)
            //////    {
            //////        if (SAJATMEGYE[i].neighbours.Contains(FinalDefenseOrderList[j].Item1))
            //////        {
            //////            if (sajatOsszesMEGYE.Contains(SAJATMEGYE[i]))
            //////            {
            //////                //ha nem a mienk akkor placeljuk
            //////                FinalSupportOrderList.Add(new Tuple<Region, Region>(SAJATMEGYE[i], null));
            //////                sajatOsszesMEGYE.Remove(SAJATMEGYE[i]);
            //////            }
            //////        }
            //////    }
            //////
            //////}



            //if (egyvkevesebbpontosMegye[i].neighbours.Contains(SAJATMEGYESEREGGEL[j]))
            //{
            //    //itt kellegy lista h hol van az ellenség hol van és azt megnézni h a szomszédos megyeken van-e elenség mert ott masszivan védekezni fogunk
            //   // if (egyvkevesebbpontosMegye[i].neighbours )
            //    {
            //
            //    }
            //}

            //               //utolsó lepesben megnezzuk h ebbol melyik van hozzank kozel
            //               List<Region> megkellTamadniVaros = new List<Region>();
            //
            //               // azt tudjuk hogy 2 pontot er 1db szabad varos, 1pontot 1 elfoglalt
            //               //legfontosabb elsokorben szomszedos megyekben 2 es 2+os varosok kersese
            //               //ha ilyen nincs akkor az egyeseknel 2 pont alatt az 1pontos megyek ahol van varos az az ELLENESEGE erre nagyon figyeljunk
            //               //ezekbol pickeljuk a bestet
            //               //csata parancshatasara az egysegek MOST EGYOTT MOZOGNAK
            //
            //               // sajat megyeink
            //               List<Region> OrderableRegions = new List<Region>();
            //
            //               foreach (var item in gs.RegionList.Where(r => r.house == h))
            //               {
            //                   OrderableRegions.Add(item);
            //               }
            //
            //               //kozvetlenul elerheto megyek
            //               // sajat megye, kozvetlen szomszedja, ponterteke
            //               List<Tuple<Region, Region, float>> NeighbourRegionsPOINT = new List<Tuple<Region, Region, float>>();
            //
            //               foreach (var item in SAJATMEGYE)
            //               {
            //                   foreach (var neighb in item.neighbours)
            //                   {
            //                       foreach (var v in HetVarosList)
            //                       {
            //                           if (v.regio == neighb)
            //                           {
            //                               //itt bejohet olyan hiba h 3 megye tamadhatja ugyanazt
            //                               //ezert fogjuk es megnezzuk h iylen tuple van-e mar es ha nincs akkor veszuk fe
            //                               if (NeighbourRegionsPOINT.Where(nrp => nrp.Item2 == neighb).Count() == 0)
            //                                   NeighbourRegionsPOINT.Add(new Tuple<Region, Region, float>(item, neighb, v.pont));
            //                           }
            //                       }
            //                   }
            //               }
            //
            //               //erdemes megnezni h a listazott es pontozott megyek szomszedjainak milyen ertekei vannak(ha csokkene akkor egyezes eseten erdemes a masikat pickeleni)
            //
            //               //csokenno rendezett sorrend
            //               NeighbourRegionsPOINT.OrderBy(np => np.Item3);
            //               NeighbourRegionsPOINT.Reverse();
            //
            //               for (int i = 0; i < NeighbourRegionsPOINT.Count; i++)
            //               {
            //
            //                   //elso es legfontosabb ha olyan helyen alnak az egysegekek ahol a terulet meg nem az enyem akkor koronazok
            //                   if (NeighbourRegionsPOINT[i].Item1.house == HOUSE.NONE && VanEIttEgysegem(gs,NeighbourRegionsPOINT[i].Item1, h) && SAJATMEGYE.Contains(NeighbourRegionsPOINT[i].Item1)) 
            //                   {
            //                       FinalKoronaOrderList.Add(NeighbourRegionsPOINT[i].Item1);
            //                       SAJATMEGYE.Remove(NeighbourRegionsPOINT[i].Item1);
            //                   }
            //
            //                   //ez egy kurvajo hely ennek a szomszedjara tuti rakunk tamadas parancsot
            //                   if (NeighbourRegionsPOINT[i].Item3 >= 2 && SAJATMEGYE.Contains(NeighbourRegionsPOINT[i].Item1))
            //                   {
            //                       FinalAttackOrderList.Add(NeighbourRegionsPOINT[i].Item1);
            //                       SAJATMEGYE.Remove(NeighbourRegionsPOINT[i].Item1);
            //                   }
            //
            //                   if (NeighbourRegionsPOINT[i].Item3 > 1 && SAJATMEGYE.Contains(NeighbourRegionsPOINT[i].Item1))
            //                   {
            //                       FinalAttackOrderList.Add(NeighbourRegionsPOINT[i].Item1);
            //                       SAJATMEGYE.Remove(NeighbourRegionsPOINT[i].Item1);
            //                   }
            //
            //                   //ellensegge, itt okoskodni kell majd !!
            //                   if (NeighbourRegionsPOINT[i].Item3 == 1 && NeighbourRegionsPOINT[i].Item2.house != HOUSE.NONE && SAJATMEGYE.Contains(NeighbourRegionsPOINT[i].Item1))
            //                   {
            //                       if (SeregemNagyobbE(gs, h, NeighbourRegionsPOINT[i].Item1, NeighbourRegionsPOINT[i].Item2, true))
            //                       {
            //                           //nagyobb a seregem daraljuk le
            //                           FinalAttackOrderList.Add(NeighbourRegionsPOINT[i].Item1);
            //                           SAJATMEGYE.Remove(NeighbourRegionsPOINT[i].Item1);
            //                       }
            //                       else
            //                       {
            //                           EnemyNextToUs.Add(NeighbourRegionsPOINT[i].Item2);
            //                       }
            //                   }
            //
            //                   //ezek nem olyan jó helyek de ezekre is rakunk
            //                   if (NeighbourRegionsPOINT[i].Item3 < 1 && SAJATMEGYE.Contains(NeighbourRegionsPOINT[i].Item1))
            //                   {
            //                       if (NeighbourRegionsPOINT[i].Item3 < 0.12f)
            //                       {
            //                           FinalKoronaOrderList.Add(NeighbourRegionsPOINT[i].Item1);
            //                       }
            //                       else
            //                       {
            //                           FinalAttackOrderList.Add(NeighbourRegionsPOINT[i].Item1);
            //                       }
            //                       
            //                       SAJATMEGYE.Remove(NeighbourRegionsPOINT[i].Item1);
            //                   }
            //               }
            //           }
            //
            //       //VEDEKEZES/RAID
            //
            //       //megnezzuk h mire tamadhat, ill kivesszuk a legvaloszinubbet
            //
            //       List<Region> veszelyeztettmegyeim = new List<Region>();
            //
            //               // nagyon fontos lesz az a megye, ahol van varam/varosom, van melette ellenseg az kap
            //               //na ezek a megyek alavetoen raidot kapnak, de a varosos megyek def + supportot a szomszedjai
            //               List<Region> jelentosenVeszelyeztettMegyek = new List<Region>();
            //
            //               foreach (var item in EnemyNextToUs)
            //               {
            //                  foreach (var neighb in item.neighbours)
            //                   {
            //                       if (!veszelyeztettmegyeim.Contains(item))
            //                       {
            //                           //RAIDmEZOK
            //                           veszelyeztettmegyeim.Add(item);
            //                       }
            //                   }
            //               }
            //
            //               foreach (var item in EnemyNextToUs)
            //               {
            //                   foreach (var neighb in item.neighbours)
            //                   {
            //                       //mienk és van rajta valami amit fájna elvesziteni,... ez egy ellegge szomoru dolog(lenne)
            //                       //ezert ezek lesznek a DEFFENSE MEZOK
            //                       if (neighb.house == h && (item.castle || item.city))
            //                       {
            //                           jelentosenVeszelyeztettMegyek.Add(neighb);
            //                       }
            //                   }
            //               }
            //
            //               //na már most 
            //               // az attacknal mar vettunk fel megyeket, na az ugy jó
            //               // aztán a raid-ot elvileg attol fuggetlenul pakoljuk le, az is jó
            //               // a DEFENSE jelentosege erosebb mint a RAID, ezert ha RAIDBAN es DEF-ben is van azonos megye a RAIDBOL kivesszuk
            //               // SUPPORT SZIGORUAN DEFFENSE MELLE megy kibaszott fontos, es sokat ha lehet
            //               // a maradekra az a retek koronas fos token aminek a nevet mindig elfeljtem
            //
            //               FinalDefenseOrderList = jelentosenVeszelyeztettMegyek;
            //
            //               foreach (var item in veszelyeztettmegyeim)
            //               {
            //                if (SAJATMEGYE.Contains(item))
            //                   {
            //                       FinalRaidOrderList.Add(item);
            //                      SAJATMEGYE.Remove(item);
            //                   }
            //               }
            //
            //               foreach (var item in jelentosenVeszelyeztettMegyek)
            //               {
            //                   foreach (var neighb in item.neighbours)
            //                   {
            //                   //if (!FinalDefenseOrderList.Contains(item) && !FinalRaidOrderList.Contains(item) && !FinalAttackOrderList.Contains(item))
            //                   if(SAJATMEGYE.Contains(item))
            //                   {
            //                           FinalSupportOrderList.Add(item);
            //                           SAJATMEGYE.Remove(item);
            //
            //                   }
            //               }
            //               }
            //
            //               // na marmost ha maradt meg megyem akkor teszunk ra koronat
            //               foreach (var item in gs.RegionList)
            //               {
            //                   if (item.house == h)
            //                   {
            //                       if (SAJATMEGYE.Contains(item))
            //                       {
            //                           FinalKoronaOrderList.Add(item);
            //                           SAJATMEGYE.Remove(item);
            //
            //                      }
            //                   }
            //               }
            //

            //namarmost fogjuk es placedorderekke alakitjuk oket
            foreach (var item in FinalAttackOrderList)
                {
                    if (!gs.m_lBannedOrders.Contains(ORDER_TYPE.ATTACK_PLUS))
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.ATTACK_PLUS));
                    else if (!gs.m_lBannedOrders.Contains(ORDER_TYPE.ATTACK_NORMAL))
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.ATTACK_PLUS));
                     else
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.ATTACK_PLUS));
            }

                foreach (var item in FinalDefenseOrderList)
                {
                    if (!gs.m_lBannedOrders.Contains(ORDER_TYPE.DEFEND_PLUSPLUS))
                       PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.DEFEND_PLUSPLUS));
                    else 
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.DEFEND_PLUS));

                }

                foreach (var item in FinalSupportOrderList)
                {
                    if (!gs.m_lBannedOrders.Contains(ORDER_TYPE.SUPPORT_PLUS))
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.SUPPORT_PLUS));
                    else
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.SUPPORT));

                }

                foreach (var item in FinalRaidOrderList)
                {
                    if (!gs.m_lBannedOrders.Contains(ORDER_TYPE.RAID_PLUS))
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.RAID_PLUS));
                    else
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.RAID));

                }

                foreach (var item in FinalKoronaOrderList)
                {
                    if (!gs.m_lBannedOrders.Contains(ORDER_TYPE.CONDSOLIDATE_PLUS))
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.CONDSOLIDATE_PLUS));
                    else
                        PlacedOrderList.Add(new PlacedOrder(h, item.Item1, item.Item2, ORDER_TYPE.CONDSOLIDATE));

                }



            }
예제 #14
0
        private bool VanEIttEgysegem(GameState gs, Region item2, HOUSE h)
        {
            foreach (var item in gs.UnitsList)
            {
                if (item.position.name == item2.name && item.player == h)
                {
                    return true;
                }
            }

            return false;
        }
예제 #15
0
        private bool SeregemNagyobbE(GameState gs, HOUSE h, Region sajatRegio, Region SzomszedosEllensegesRegio, bool VarostTamadokE)
        {
            int seregemEreje = 0;
            int ellensegEreje = 0;

            foreach (var item in gs.UnitsList)
            {
                if (item.position == SzomszedosEllensegesRegio )
                {
                    if (item.type == UNIT_TYPE.MACHINE)
                    {
                        ellensegEreje += 0;
                    }

                    ellensegEreje += item.attackPoint;
                }

                if (item.position == sajatRegio)
                {
                    if (item.type == UNIT_TYPE.MACHINE)
                    {
                        if (VarostTamadokE)
                        {
                            seregemEreje += item.attackPoint;
                        }
                        else
                        {
                            seregemEreje += 0;
                        }
                    }

                    seregemEreje += item.attackPoint;
                }
            }

            if (seregemEreje == ellensegEreje)
            {
                //akkor majd megraidoljuk
                return false;
            }

            if (seregemEreje > ellensegEreje)
            {
                //nyugodtan megtamadhatjuk a gecibe
                return true;
            }
            else
            {
                return false;
            }

           throw new Exception();
        }
예제 #16
0
 public CPlayer GetPlayerByHouse(HOUSE h)
 {
     foreach (var item in mPlayerList)
     {
         if (item.PlayerHouse == h)
         {
             return item;
         }
     }
     return null;
 }
예제 #17
0
 public CPlayer findPlayerByName(HOUSE requestedName)
 {
     CPlayer ret = null;
     foreach (var item in mPlayerList)
     {
         if (item.playerHouse == requestedName)
             ret = item;
     }
     return ret;
 }
예제 #18
0
    public unitStruct CreateKnight(HOUSE h)
    {
        ID = 0;
        player = h;
        type = UNIT_TYPE.KNIGHT;
        defeated = false;
        attackPoint = 2;
        defendPoint = 2;
        cost = 2;

        return this;
    }