예제 #1
0
        public override List<int> askerTransferiYap(GameData f1)
        {
            bool break2 = false;
            List<int> veriler = new List<int>();
            foreach (Bolge b in f1.players[f1.turn].bolgeler)
            {
                if (getKomsuDusmanSayisi(b) == 0)
                {
                    if (b.ordu.askerSayisi > 1)
                    {
                        if (getDostSayisi(b) > 0)
                        {
                            //Once nereden transfer yapacagimizi belirledik
                            veriler.Add(b.index);

                            foreach (Bolge komsu in b.komsular)
                            {
                                if (komsu.sahip == b.sahip)
                                {
                                    veriler.Add(komsu.index);
                                    veriler.Add(1);
                                    veriler.Add(komsu.ordu.askerSayisi + b.ordu.askerSayisi - 1);
                                    break2 = true;
                                    break;
                                }
                            }
                            if (break2)
                                break;
                        }
                    }
                }
            }
            return veriler;
        }
예제 #2
0
        public override List<int> divideArmies(int index1, int index2,GameData f1)
        {
            List<int> sonuc = new List<int>();

            int toplam = f1.bolgeler[index1].ordu.askerSayisi + f1.bolgeler[index2].ordu.askerSayisi;

            sonuc.Add(toplam - 1);
            sonuc.Add(1);

            return sonuc;
        }
 /// <summary>
 /// Oyuncunun sahip olduğu bölgeler içinden en fazla sayıda asker bulunduran bölgenin indexini gönderir.
 /// </summary>
 /// <param name="f1">Oyun Verisi</param>
 /// <returns>En Güçlü Bölge İndexi</returns>
 public int getEnGucluBolgemIndex(GameData f1)
 {
     int max = 0;
     Bolge bolge = null;
     foreach (Bolge b in f1.players[f1.turn].bolgeler)
     {
         if (b.ordu.askerSayisi >= max)
         {
             max = b.ordu.askerSayisi;
             bolge = b;
         }
     }
     return bolge.index;
 }
예제 #4
0
 public override bool devam(GameData f1)
 {
     foreach (Bolge b in f1.players[f1.turn].bolgeler)
     {
         foreach (Bolge komsu in b.komsular)
         {
             if (b.ordu.askerSayisi > komsu.ordu.askerSayisi && b.sahip!=komsu.sahip)
             {
                 return true;
             }
         }
     }
     return false;
 }
예제 #5
0
        public override List<int> getTerritoriesIndexToPlaceNewArmies(GameData f1)
        {
            List<int> gonderilecekler = new List<int>();

            int orduyuNereyeKoyalim = bolgelerimdenRastgeleSec(f1);

            int k=f1.players[f1.turn].yeniAskerler;

            for (int i = 0; i <k ; i++)
            {
                gonderilecekler.Add(orduyuNereyeKoyalim);
            }

            return gonderilecekler;
        }
        /// <summary>
        /// Oyuncunun bölgeleri içinden rastgele seçilen bölgenin indexini gönderir.
        /// </summary>
        /// <param name="f1">Oyun Verisi</param>
        /// <returns>Rastgele Bölge İndexi</returns>
        public int bolgelerimdenRastgeleSec(GameData f1)
        {
            List<int> benimBolgeIndexleri = new List<int>();

            foreach (Bolge b in f1.bolgeler)
            {
                if (b.sahip==f1.players[f1.turn])
                {
                    benimBolgeIndexleri.Add(b.index);
                }
            }

            Random r = new Random();

            return benimBolgeIndexleri[r.Next(0, benimBolgeIndexleri.Count - 1)];
        }
예제 #7
0
        //Ne olduğunun önemi yok saldırı yapılmayacak
        public override List<int> getSavasBolgeIndexleri(GameData f1)
        {
            List<int> sonuc = new List<int>();

            foreach (Bolge b in f1.players[f1.turn].bolgeler)
            {
                foreach (Bolge komsu in b.komsular)
                {
                    if (b.ordu.askerSayisi > komsu.ordu.askerSayisi && b.sahip != komsu.sahip)
                    {
                        sonuc.Add(b.index);
                        sonuc.Add(komsu.index);
                    }
                }
            }
            return sonuc;
        }
예제 #8
0
 public override bool askerTransferiYapacakmisin(GameData f1)
 {
     foreach (Bolge b in f1.players[f1.turn].bolgeler)
     {
         if (getKomsuDusmanSayisi(b) == 0)
         {
             if (b.ordu.askerSayisi > 1)
             {
                 if (getDostSayisi(b) > 0)
                 {
                     return true;
                 }
             }
         }
     }
     return false;
 }
예제 #9
0
 abstract public List <int> askerTransferiYap(GameData form1);
예제 #10
0
 public override bool askerTransferiYapacakmisin(GameData f1)
 {
     return false;
 }
예제 #11
0
 /// <summary>
 /// İlk başta tüm oyunculara verilen ilk askerler dağıtılırken her oyuncuya tek tek
 /// askerlerini nereye koyması gerektiği sorulur bu metod ilk ordunun koyulması gereken bolgenin indexini dondurur
 /// </summary>
 /// <param name="form1"></param>
 /// <returns>ilk ordunun koyulması gereken bolgenin indexini dondurur</returns>
 abstract public int getTerritoryToPlaceFirstArmies(GameData form1);
예제 #12
0
 /// <summary>
 /// Kullanıcının hamle yapmaya devam edip etmeyeceğini belirler.
 /// </summary>
 /// <param name="form1"></param>
 /// <returns>Devam etmek istiyorsa true devam etmek istemiyorsa false.</returns>
 abstract public bool devam(GameData form1);
예제 #13
0
        public override List<int> divideArmies(int index1, int index2,GameData f1)
        {
            List<int> sonuc = new List<int>();

            int toplam = f1.bolgeler[index1].ordu.askerSayisi + f1.bolgeler[index2].ordu.askerSayisi;

            if ((toplam % 2) == 0)
            {
                sonuc.Add(toplam / 2);
                sonuc.Add(toplam / 2);
            }
            else
            {
                sonuc.Add(toplam / 2);
                sonuc.Add((toplam / 2) + 1);
            }

            return sonuc;
        }
예제 #14
0
        bool southAmericaSinirindaDusmanVarMi(GameData f1)
        {
            //13 ve 8
            if (f1.bolgeler[13].sahip != f1.players[f1.turn])
            {
                return true;
            }
            if (f1.bolgeler[8].sahip != f1.players[f1.turn])
            {
                return true;
            }

            return false;
        }
예제 #15
0
        public override List<int> getTerritoriesIndexToPlaceNewArmies(GameData f1)
        {
            List<int> gonderilecekler = new List<int>();
            Random r=new Random();

            List<Bolge> komsuluktaDusmanOlanBolgeler = new List<Bolge>();

            foreach (Bolge bb in f1.players[f1.turn].bolgeler)
            {
                if (getKomsuDusmanSayisi(bb) > 0)
                {
                    komsuluktaDusmanOlanBolgeler.Add(bb);
                }
            }

            int z = r.Next(0, komsuluktaDusmanOlanBolgeler.Count - 1);

            int orduyuNereyeKoyalim = komsuluktaDusmanOlanBolgeler[z].index;

            int k=f1.players[f1.turn].yeniAskerler;

            for (int i = 0; i <k ; i++)
            {
                gonderilecekler.Add(orduyuNereyeKoyalim);
            }
            return gonderilecekler;
        }
예제 #16
0
 public override int getTerritoryToPlaceFirstArmies(GameData f1)
 {
     return(f1.players[f1.turn].bolgeler[0].index);
 }
예제 #17
0
 public override bool saldiracanMi(GameData f1)
 {
     return(devam(f1));
 }
예제 #18
0
 /// <summary>
 /// Bu metod savaş yapılacak bolgelerin indexlerini belirlemek içindir.
 /// </summary>
 /// <returns>Metod geriye iki elemanlı bir liste döndürür.
 /// Birinci eleman nereden saldırı yapılacağını ikinci eleman ise nereye saldırı yapılacağını gösterir.
 /// Burada iki bolgenin komsu olmasına dikkat edilmelidir.saldırılar varsayılan olarak Doordie şeklinde yapılacaktır.
 /// Listenin 3. elemanı -1 olarak gönderilirse saldırı attack şeklinde yapılacaktır </returns>
 abstract public List <int> getSavasBolgeIndexleri(GameData form1);
예제 #19
0
 public override int requestTerritory(GameData f1)
 {
     return(rastgeleBolgeSec(f1));
 }
 /// <summary>
 /// Oyuncu bir bölgeyi igal ettikten sonra o bölge ile kendi bölgesi arasındaki
 /// askerleri nasıl paylaştıracağına bu metod vasıtasıyla karar verir.
 /// </summary>
 /// <param name="index1">Saldırının gerçekleştiği bölgenin index'i</param>
 /// <param name="index2">İşgal edilen bölgenin index'i</param>
 /// <returns>Geriye iki elemanlı bir liste döndürülecek birinci eleman index1 ile belirttiğimiz
 /// bolgede kalacak asker sayısını ikinci eleman ise index2
 /// ile belirttiğimiz bolgede kalacak eleman sayısını gostermelidir.</returns>
 public abstract List<int> divideArmies(int index1, int index2, GameData form1);
 /// <summary>
 /// Kullanıcının hamle yapmaya devam edip etmeyeceğini belirler.
 /// </summary>
 /// <param name="form1"></param>
 /// <returns>Devam etmek istiyorsa true devam etmek istemiyorsa false.</returns>
 public abstract bool devam(GameData form1);
예제 #22
0
 /// <summary>
 /// Oyuncu bir bölgeyi igal ettikten sonra o bölge ile kendi bölgesi arasındaki
 /// askerleri nasıl paylaştıracağına bu metod vasıtasıyla karar verir.
 /// </summary>
 /// <param name="index1">Saldırının gerçekleştiği bölgenin index'i</param>
 /// <param name="index2">İşgal edilen bölgenin index'i</param>
 /// <returns>Geriye iki elemanlı bir liste döndürülecek birinci eleman index1 ile belirttiğimiz
 /// bolgede kalacak asker sayısını ikinci eleman ise index2
 /// ile belirttiğimiz bolgede kalacak eleman sayısını gostermelidir.</returns>
 abstract public List <int> divideArmies(int index1, int index2, GameData form1);
예제 #23
0
        bool southAmericaBendeMi(GameData f1)
        {
            if (f1.bolgeler[9].sahip != f1.players[f1.turn])
            {
                return false;
            }
            if (f1.bolgeler[10].sahip != f1.players[f1.turn])
            {
                return false;
            }
            if (f1.bolgeler[11].sahip != f1.players[f1.turn])
            {
                return false;
            }
            if (f1.bolgeler[12].sahip != f1.players[f1.turn])
            {
                return false;
            }

            return true;
        }
예제 #24
0
        public override List<int> getTerritoriesIndexToPlaceNewArmies(GameData f1)
        {
            List<int> gonderilecekler = new List<int>();
            int orduyuNereyeKoyalim = -1;

            if (getKomsuDusmanSayisi(f1.bolgeler[getEnGucluBolgemIndex(f1)]) > 0)
            {
                orduyuNereyeKoyalim = getEnGucluBolgemIndex(f1);
            }
            else
            {
                foreach (Bolge b in f1.players[f1.turn].bolgeler)
                {
                    if (getDahaGucluDusmanSayisi(b) > 0)
                    {
                        orduyuNereyeKoyalim = b.index;
                    }
                }
            }

            if (orduyuNereyeKoyalim == -1)
            {
                foreach (Bolge b in f1.players[f1.turn].bolgeler)
                {
                    if (getKomsuDusmanSayisi(b) > 0)
                    {
                        orduyuNereyeKoyalim = b.index;
                    }
                }
            }

            int k=f1.players[f1.turn].yeniAskerler;
            for (int i = 0; i <k ; i++)
            {
                gonderilecekler.Add(orduyuNereyeKoyalim);
            }
            return gonderilecekler;
        }
예제 #25
0
        int southAmericadaToprakVarMi(GameData f1)
        {
            //9 10 11 12
            if (f1.bolgeler[9].sahip == f1.players[f1.turn])
            {
                return 9;
            }
            if (f1.bolgeler[10].sahip == f1.players[f1.turn])
            {
                return 10;
            }
            if (f1.bolgeler[11].sahip == f1.players[f1.turn])
            {
                return 11;
            }
            if (f1.bolgeler[12].sahip == f1.players[f1.turn])
            {
                return 12;
            }

            return -1;
        }
예제 #26
0
        public override int getTerritoryToPlaceFirstArmies(GameData f1)
        {
            foreach (Bolge b in f1.players[f1.turn].bolgeler)
            {
                if (getKomsuDusmanSayisi(b) > 0)
                {
                    return b.index;
                }
            }

            return f1.players[f1.turn].bolgeler[0].index;
        }
예제 #27
0
        public override bool devam(GameData f1)
        {
            durum3SaldiriIndexleri.Clear();
            if (southAmericaBendeMi(f1))
            {
                //Ordusu diğerlerinin toplamından buyuk olduğunda her tarafa saldıracak...
                if (getToplamDusmanSayisi(f1)/2 < f1.players[f1.turn].getTotalNumberOfArmies())
                {
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        foreach (Bolge komsu in b.komsular)
                        {
                            if (b.ordu.askerSayisi > komsu.ordu.askerSayisi && b.sahip != komsu.sahip)
                            {
                                return true;
                            }
                        }
                    }
                    return false;
                }
                else
                {
                    return false;
                }
            }
            else//Güney Amerikayı ele geçirmeye çalışacak...
            {
                if (southAmericadaToprakVarMi(f1)!=-1)
                {
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        if (getKomsuDusmanSayisi(b) > 0)
                        {
                            foreach (Bolge b2 in b.komsular)
                            {
                                if (b2.sahip != b.sahip)
                                {
                                    if (b.ordu.askerSayisi > b2.ordu.askerSayisi+10 && buBolgeGuneyAmerikadaMi(b2))
                                    {
                                        return true;
                                    }
                                }
                            }

                        }
                    }
                }
                else//Guney Amerikada Toprak yoksa...
                {
                    Graph graph = new Graph();
                    foreach (Bolge b in f1.bolgeler)
                    {
                        graph.AddNode(b.index.ToString());
                    }

                    foreach (Bolge b in f1.bolgeler)
                    {
                        foreach (Bolge b2 in b.komsular)
                        {
                            if (b2.sahip != f1.players[f1.turn])
                            {
                                graph.AddConnection(b.index.ToString(), b2.index.ToString(), b2.ordu.askerSayisi, false);
                            }
                        }
                    }

                    var calculator = new DistanceCalculator();
                    var distances = calculator.CalculateDistances(graph, getEnGucluBolgemIndex(f1).ToString());  // Start from "G"

                    String temp = "";

                    //SA Sınırları
                    List<int> gaSinirlari = new List<int>();
                    gaSinirlari.Add(0);
                    gaSinirlari.Add(0);

                    foreach (var d in distances)
                    {
                        temp += d.Key + " - " + d.Value + "-";
                        if (d.Key == "9")
                        {
                            gaSinirlari[0] = (int)d.Value;
                        }
                        if (d.Key == "11")
                        {
                            gaSinirlari[1] = (int)d.Value;
                        }
                    }

                    int min = gaSinirlari.Min();
                    int minIndex = gaSinirlari.IndexOf(min);

                    int minBolgeIndex = 0;
                    if (minIndex == 0)
                    {
                        minBolgeIndex = 9;
                    }
                    if (minIndex == 1)
                    {
                        minBolgeIndex = 11;
                    }

                    List<String> gidilecekyol = new List<String>();

                    //calculator = new DistanceCalculator();

                    gidilecekyol = calculator.getYol(getEnGucluBolgemIndex(f1).ToString(), minBolgeIndex.ToString(), graph);

                    if (f1.bolgeler[getEnGucluBolgemIndex(f1)].ordu.askerSayisi > min + 10)//Gideceğiz Avrupaya
                    {
                        if (f1.bolgeler[getEnGucluBolgemIndex(f1)].komsular.Contains(f1.bolgeler[Convert.ToInt32(gidilecekyol[gidilecekyol.Count - 1])]))
                        {
                            saldirmaDurumu = 3;
                            durum3SaldiriIndexleri.Add(getEnGucluBolgemIndex(f1));
                            durum3SaldiriIndexleri.Add(Convert.ToInt32(gidilecekyol[gidilecekyol.Count - 1]));
                            return true;
                        }
                        else
                        {
                            return false;
                        }
                    }
                    else//Biraz daha büyüyeceğiz...
                    {
                        return false;
                    }
                }
                return false;
            }
        }
예제 #28
0
 /// <summary>
 /// Bu metod kullanıcının saldırı yapmak isteyip istemediğini belirler
 /// </summary>
 /// <param name="form1"></param>
 /// <returns>Eğer saldırı yapmak istiyorsa true istemiyorsa false döndürür.</returns>
 abstract public bool saldiracanMi(GameData form1);
예제 #29
0
 public override int getTerritoryToPlaceFirstArmies(GameData f1)
 {
     return f1.players[f1.turn].bolgeler[0].index;
 }
예제 #30
0
 public override int requestTerritory(GameData f1)
 {
     return rastgeleBolgeSec(f1);
 }
예제 #31
0
 /// <summary>
 /// Oyuncu her turn'de kazandığı yeni askerleri hangi
 /// bolgelere yerleştireceğini bu metod sayesinde belirler.
 /// </summary>
 /// <param name="form1"></param>
 /// <returns>Askerlerin yerleştirilmek istendiği bolge indexleri</returns>
 abstract public List <int> getTerritoriesIndexToPlaceNewArmies(GameData form1);
예제 #32
0
 /// <summary>
 /// Bu metod bölgeler seçilirken istenen bolgenin indexini dondurmektedir.
 /// </summary>
 /// <param name="form1"></param>
 /// <returns>istenen bolgenin indexi</returns>
 abstract public int requestTerritory(GameData form1);
예제 #33
0
        //Ne olduğu önemli değil çalıştırılmayacak
        public override List<int> askerTransferiYap(GameData f1)
        {
            List<int> veriler = new List<int>();

            return veriler;
        }
예제 #34
0
        public override int requestTerritory(GameData f1)
        {
            if (!f1.bolgeler[9].sahipli)
            {
                return 9;
            }
            if (!f1.bolgeler[10].sahipli)
            {
                return 10;
            }
            if (!f1.bolgeler[11].sahipli)
            {
                return 11;
            }
            if (!f1.bolgeler[12].sahipli)
            {
                return 12;
            }

            return rastgeleBolgeSec(f1);
        }
예제 #35
0
 public override bool devam(GameData f1)
 {
     return false;
 }
예제 #36
0
        int dusmanNerede(GameData f1)
        {
            List<int> ikibolge=new List<int>();
            ikibolge.Add(13);
            ikibolge.Add(8);
            if (f1.bolgeler[13].sahip != f1.players[f1.turn] && f1.bolgeler[8].sahip != f1.players[f1.turn])
            {
                Random r = new Random();

                if (r.Next(1, 100) % 2 == 0)
                {
                    return ikibolge[0];
                }
                else
                {
                    return ikibolge[1];
                }
            }

            if (f1.bolgeler[13].sahip != f1.players[f1.turn])
            {
                return 13;
            }
            if (f1.bolgeler[8].sahip != f1.players[f1.turn])
            {
                return 8;
            }

            return -1;
        }
예제 #37
0
        public override List<int> getSavasBolgeIndexleri(GameData f1)
        {
            List<int> sonuc = new List<int>();

            if (southAmericaBendeMi(f1))
            {
                //Ordusu diğerlerinin toplamından buyuk olduğunda her tarafa saldıracak...
                if (getToplamDusmanSayisi(f1)/2 < f1.players[f1.turn].getTotalNumberOfArmies())
                {
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        foreach (Bolge komsu in b.komsular)
                        {
                            if (b.ordu.askerSayisi > komsu.ordu.askerSayisi && b.sahip != komsu.sahip)
                            {
                                sonuc.Add(b.index);
                                sonuc.Add(komsu.index);
                            }
                        }
                    }
                }
            }
            else//Güney Amerikayı ele geçirmeye çalışacak...
            {
                if (southAmericadaToprakVarMi(f1) != -1)
                {
                    foreach (Bolge b in f1.players[f1.turn].bolgeler)
                    {
                        if (getKomsuDusmanSayisi(b) > 0)
                        {
                            foreach (Bolge b2 in b.komsular)
                            {
                                if (b2.sahip != b.sahip)
                                {
                                    if (b.ordu.askerSayisi > b2.ordu.askerSayisi+10 && buBolgeGuneyAmerikadaMi(b2))
                                    {
                                        sonuc.Add(b.index);
                                        sonuc.Add(b2.index);
                                    }
                                }
                            }

                        }
                    }
                }
                else//Güney amerikayı ele geçirmeye çalışacak...
                {
                    if (saldirmaDurumu == 3)
                    {
                        saldirmaDurumu = 0;

                        return durum3SaldiriIndexleri;
                    }
                }
            }
            return sonuc;
        }
예제 #38
0
 abstract public bool askerTransferiYapacakmisin(GameData form1);
예제 #39
0
 public override int getTerritoryToPlaceFirstArmies(GameData f1)
 {
     return bolgelerimdenRastgeleSec(f1);
 }
예제 #40
0
        public override List<int> getTerritoriesIndexToPlaceNewArmies(GameData f1)
        {
            List<int> gonderilecekler = new List<int>();
            int territory=bolgelerimdenRastgeleSec(f1);
            if (southAmericaBendeMi(f1))
            {
                if (southAmericaSinirindaDusmanVarMi(f1))
                {
                    if (dusmanNerede(f1) == 13)
                    {
                        territory = 11;
                    }
                    else if (dusmanNerede(f1) == 8)
                    {
                        territory = 9;
                    }
                }
                else
                {
                    Random r = new Random();

                    List<Bolge> komsuluktaDusmanOlanBolgeler = new List<Bolge>();

                    foreach (Bolge bb in f1.players[f1.turn].bolgeler)
                    {
                        if (getKomsuDusmanSayisi(bb) > 0)
                        {
                            komsuluktaDusmanOlanBolgeler.Add(bb);
                        }
                    }

                    int z = r.Next(0, komsuluktaDusmanOlanBolgeler.Count - 1);

                    territory = komsuluktaDusmanOlanBolgeler[z].index;
                }
            }
            else
            {
                if (southAmericadaToprakVarMi(f1)!=-1)//Evet var
                {
                    territory = southAmericadaToprakVarMi(f1);
                }
                else//yok
                {
                    territory = getEnGucluBolgemIndex(f1);
                }
            }

            int k = f1.players[f1.turn].yeniAskerler;

            for (int i = 0; i < k; i++)
            {
                gonderilecekler.Add(territory);
            }

            return gonderilecekler;
        }
예제 #41
0
 public override bool saldiracanMi(GameData f1)
 {
     return devam(f1);
 }
예제 #42
0
        public override int getTerritoryToPlaceFirstArmies(GameData f1)
        {
            List<int> sahipoldugubolgeler = new List<int>();
            foreach (Bolge b in f1.players[f1.turn].bolgeler)
            {
                sahipoldugubolgeler.Add(b.index);
            }

            Random r = new Random();

            int sayi = r.Next(0, sahipoldugubolgeler.Count - 1);

            int index = getEnGucluBolgemIndex(f1);

            if (sahipoldugubolgeler.Contains(9))
            {
                return f1.bolgeler[9].index;
            }
            if (sahipoldugubolgeler.Contains(10))
            {
                return f1.bolgeler[10].index;
            }
            if (sahipoldugubolgeler.Contains(11))
            {
                return f1.bolgeler[11].index;
            }
            if (sahipoldugubolgeler.Contains(12))
            {
                return f1.bolgeler[12].index;
            }

            return f1.bolgeler[index].index;
        }