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; }
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; }
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; }
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)]; }
//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; }
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; }
abstract public List <int> askerTransferiYap(GameData form1);
public override bool askerTransferiYapacakmisin(GameData f1) { return false; }
/// <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);
/// <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);
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; }
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; }
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; }
public override int getTerritoryToPlaceFirstArmies(GameData f1) { return(f1.players[f1.turn].bolgeler[0].index); }
public override bool saldiracanMi(GameData f1) { return(devam(f1)); }
/// <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);
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);
/// <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);
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; }
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; }
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; }
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; }
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; } }
/// <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);
public override int getTerritoryToPlaceFirstArmies(GameData f1) { return f1.players[f1.turn].bolgeler[0].index; }
public override int requestTerritory(GameData f1) { return rastgeleBolgeSec(f1); }
/// <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);
/// <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);
//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; }
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); }
public override bool devam(GameData f1) { return false; }
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; }
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; }
abstract public bool askerTransferiYapacakmisin(GameData form1);
public override int getTerritoryToPlaceFirstArmies(GameData f1) { return bolgelerimdenRastgeleSec(f1); }
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; }
public override bool saldiracanMi(GameData f1) { return devam(f1); }
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; }