public void changeTurn() { int toplamInsan = 0; foreach (Player p in players) { if (p.isHuman) { toplamInsan++; } } if (toplamInsan == 0) { button2.Enabled = false; pictureBox1.Enabled = false; //if (this.Height != 602) //{ // this.Height = 602; //} //if (listView1.Enabled) //{ // hideStatistics(); //} refreshGame(); showHistoryToolStripMenuItem.Enabled = true; Application.DoEvents(); } if ((turn + 1) < players.Count) { turn++; } else { turn = 0; incrementTurnCounter(); } if (ilkAskerler == 0) { players[turn].yeniAskerler = (3 + kitaKazanci(players[turn])); } changePanel(); players[turn].askerSayisiTarihi.Add(players[turn].getTotalNumberOfArmies()); if (players[turn].isHuman)//insansa { button2.Enabled = false; } else//Bilgisayarda oynama sırası////////////////////////////////////////////////////////////////////////////////////// { changePanel(); if (players.Count == 1) { return; } changeStatistics(); if (!butunBolgelerSecildiMi() && !isRandom)//butun bolgeler seçimemişse bilgisayar bolge seçecek { int index = 0; index = yapayzeka().requestTerritory(getGameData()); if (index < 0 || index > 41) { MessageBox.Show(yapayzeka().getName() + " bölge isteme işlemi zamanı kural ihlali yaptı. Index:" + index); index = defaultAi.requestTerritory(getGameData()); } if (bolgeler[index].sahipli) { MessageBox.Show(yapayzeka().getName() + "Yapay Zeka Sahipli bir bölge istedi"); index = defaultAi.requestTerritory(getGameData()); } if (!bolgeler[index].sahipli) { bolgeler[index].sahip = players[turn]; bolgeler[index].sahipli = true; players[turn].bolgeler.Add(bolgeler[index]); changeTerritoryColor(bolgeler[index], players[turn]); txtInfo.Text = players[getNextTurn()].name + " please choose a territory"; changeLabel(bolgeler[index]); changeTurn(); return; } if (butunBolgelerSecildiMi()) { changeInfo(players[turn].name + " please place your army. [" + Math.Floor((double)(ilkAskerler / players.Count)).ToString() + "]"); showHistoryToolStripMenuItem.Enabled = true; } } else { if (ilkAskerler > 0)//İlk Askerleri Dağıtılmasıması bitene kadar { Bolge bol=null; bol = bolgeler[yapayzeka().getTerritoryToPlaceFirstArmies(getGameData())]; if (bolgeler[ yapayzeka().getTerritoryToPlaceFirstArmies(getGameData())].sahip!=players[turn]) { MessageBox.Show(yapayzeka().getName() + " kendine ait olmayan yere asker koymak istedi"); MessageBox.Show("Bolge adı:" + bol.isim); bol = bolgeler[defaultAi.getTerritoryToPlaceFirstArmies(getGameData())]; } ilkAskerler--; if (ilkAskerler == 0) { changeInfo(players[turn].name + " please place your army. [" + players[turn].yeniAskerler + "]"); ganimetBolgseiniBildir(); } players[turn].ilkAskerSayisi--; bol.ordu.askerSayisi++; changeLabel(bol); changeTurn(); return; }//ilk Askerlerin Dağıtılması Bittikten Sonra else { //Öncelikle her turn de verilen askerlerin yerine yerleştirilmesi lazım List<int> nereyekoyalim = new List<int>(); nereyekoyalim = yapayzeka().getTerritoriesIndexToPlaceNewArmies(getGameData()); foreach (int i in nereyekoyalim) { if (bolgeler[i].sahip != players[turn]) { MessageBox.Show(yapayzeka().getName()+" Yapay zeka kendine ait olmayan yere asker koymak istedi"); nereyekoyalim = defaultAi.getTerritoriesIndexToPlaceNewArmies(getGameData()); } } int nereye = 0; while (players[turn].yeniAskerler > 0) { players[turn].yeniAskerler--; bolgeler[nereyekoyalim[nereye]].ordu.askerSayisi++; changeLabel(bolgeler[nereyekoyalim[nereye]]); if (players[turn].yeniAskerler == 0) { button2.Enabled = true; } nereye++; } //Askerler Dağıtıldı şimdi hucum yapılabilir bool birSeyYapacanMi = true; while (birSeyYapacanMi) { refreshGame(); birSeyYapacanMi = yapayzeka().devam(getGameData()); if (birSeyYapacanMi) { //Yapacakları... bool saldiracakMi = false; saldiracakMi = yapayzeka().saldiracanMi(getGameData()); if (saldiracakMi) { List<int> savasBolgeIndexleri = new List<int>(); savasBolgeIndexleri = yapayzeka().getSavasBolgeIndexleri(getGameData()); bool saldirabilir = true; //validation if (bolgeler[savasBolgeIndexleri[0]].sahip == bolgeler[savasBolgeIndexleri[1]].sahip) { MessageBox.Show(yapayzeka().getName()+" Yapay zeka kendi bolgesine saldırı yapmak istiyor..."); saldirabilir = false; } if (!(bolgeler[savasBolgeIndexleri[0]].komsular.Contains(bolgeler[savasBolgeIndexleri[1]]))) { MessageBox.Show(yapayzeka().getName() + " Yapay Zeka Komşusu olmadığı bölgeye saldırma isteğinde bulundu"); MessageBox.Show(bolgeler[savasBolgeIndexleri[0]].isim + " ve " + bolgeler[savasBolgeIndexleri[1]].isim + " komşu değil"); saldirabilir = false; } if (saldirabilir) { SaldiriEkrani se = new SaldiriEkrani(bolgeler[savasBolgeIndexleri[0]], bolgeler[savasBolgeIndexleri[1]], this); if (savasBolgeIndexleri.Count == 3)//Saldırı Attack şeklinde gerçekleşecek { if (savasBolgeIndexleri[2] == -1) { se.warAttackForAi(); } } else//Saldırı DoOrDie şeklinde gerçekleşecek { se.warDoORDieForAi(); } olduMu(); } } } else { bool transferVarMi = yapayzeka().askerTransferiYapacakmisin(getGameData()); if (transferVarMi) { List<int> transferVerileri = new List<int>(); transferVerileri= yapayzeka().askerTransferiYap(getGameData()); bool transferyapilsinmi = true; if (transferVerileri[2] < 1 || transferVerileri[3] < 1) { MessageBox.Show(players[turn].name + " isimli yapay zeka illegal aktarım denemesinde bulundu. Bolgede en az bir asker birakilmalidir"); transferyapilsinmi = false; } if (!((bolgeler[transferVerileri[0]].ordu.askerSayisi + bolgeler[transferVerileri[1]].ordu.askerSayisi) == (transferVerileri[2] + transferVerileri[3]))) { MessageBox.Show(players[turn].name + " isimli yapay zeka illegal aktarım denemesinde bulundu"); transferyapilsinmi = false; } if (transferyapilsinmi) { bolgeler[transferVerileri[0]].ordu.askerSayisi = transferVerileri[2]; bolgeler[transferVerileri[1]].ordu.askerSayisi = transferVerileri[3]; changeLabel(bolgeler[transferVerileri[0]]); changeLabel(bolgeler[transferVerileri[1]]); } } changeTurn(); return; } } } } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } }
private void pictureBox1_Click(object sender, EventArgs e) { if (players[turn].isHuman) { //Kodlar buraya gelecek //Tıklanan yerin kordinatını ve rengini gösterir Bitmap bm = new Bitmap(pictureBox1.Image); Point localmousePosition = pictureBox1.PointToClient(System.Windows.Forms.Cursor.Position); Color col = bm.GetPixel(localmousePosition.X, localmousePosition.Y); //MessageBox.Show("X= " + localmousePosition.X.ToString() + "\nY= " + localmousePosition.Y.ToString() +"\nRenk:"+ col.Name); foreach (Bolge bol in bolgeler) { bool broke = false; foreach (Nokta n in bol.noktalar) { if (n.point == localmousePosition) { //MessageBox.Show(bol.isim); //öncelikle Bölgeler Seçilecek if (!butunBolgelerSecildiMi()) { if (!bol.sahipli) { bol.sahip = players[turn]; bol.sahipli = true; players[turn].bolgeler.Add(bol); changeTerritoryColor(bol, players[turn]); //txtInfo.Text = players[getNextTurn()].name + " please choose a territory"; if (butunBolgelerSecildiMi()) { changeInfo("Game Starts..."); } changeTurn(); changeLabel(bol); } if (butunBolgelerSecildiMi()) { //changeInfo(players[turn].name + " please place your army. [" + Math.Floor((double)(ilkAskerler / players.Count)).ToString() + "]"); showHistoryToolStripMenuItem.Enabled = true; } } else { //Kodlar Buraya Gelecek if (ilkAskerler > 0)//İlk Askerleri Dağıtılmasıması bitene kadar { if (bol.sahip == players[turn]) { ilkAskerler--; players[turn].ilkAskerSayisi--; bol.ordu.askerSayisi++; changeLabel(bol); changeTurn(); //changeInfo(players[turn].name + " please place your army. [" +players[turn].ilkAskerSayisi .ToString() + "]"); } if (ilkAskerler == 0) { changeInfo("You have " + players[turn].yeniAskerler + " armies left to place [+SHIFT=place all]"); ganimetBolgseiniBildir(); ToolTip buttonToolTip = new ToolTip(); buttonToolTip.UseFading = true; buttonToolTip.UseAnimation = true; //buttonToolTip.IsBalloon = true; buttonToolTip.ShowAlways = true; buttonToolTip.AutoPopDelay = 5000; buttonToolTip.InitialDelay = 1000; buttonToolTip.ReshowDelay = 500; buttonToolTip.Show("Gold is here!", label, 4000); //buttonToolTip.SetToolTip(label, "Gold is Here!"); } }//ilk Askerlerin Dağıtılması Bittikten Sonra else { //Öncelikle her turn de verilen askerlerin yerine yerleştirilmesi lazım if (players[turn].yeniAskerler > 0) { if (bol.sahip == players[turn]) { if (Control.ModifierKeys == Keys.Shift) { bol.ordu.askerSayisi += players[turn].yeniAskerler; players[turn].yeniAskerler = 0; changeLabel(bol); txtInfo.Text = "Attack or pass (press to spacebar)"; } else { players[turn].yeniAskerler--; bol.ordu.askerSayisi++; changeLabel(bol); changeInfo("You have " + players[turn].yeniAskerler + " armies left to place [+SHIFT=place all]"); } if (players[turn].yeniAskerler == 0) { button2.Enabled = true; } } } if (players[turn].yeniAskerler == 0) { //Askerler Dağıtıldı şimdi hucum yapılabilir if (state == 0 && bol.sahip == players[turn])//İlk kez kendi yerine tıklıyor { state = 1; txtInfo.Text = "From " + bol.isim + ". Choose a territory to attack or move to (spacebar to pass)"; ilkTiklananBolge = bol; } else if (state == 1 && bol.komsular.Contains(ilkTiklananBolge))//komşusuna tıklamış { if (bol.sahip == players[turn])//kendi bölgesine transfer { if (ilkTiklananBolge.ordu.askerSayisi > 1 || bol.ordu.askerSayisi > 1) { int b1 = ilkTiklananBolge.ordu.askerSayisi; int b2 = bol.ordu.askerSayisi; ArmyMove am = new ArmyMove(ilkTiklananBolge, bol, this); am.ShowDialog(); if (isArmyMoved) { changeLabel(ilkTiklananBolge); changeLabel(bol); changeTurn(); isArmyMoved = false; } else { ilkTiklananBolge.ordu.askerSayisi = b1; bol.ordu.askerSayisi = b2; } } state = 0; ilkTiklananBolge = null; } else //Düşman bölgesine saldırı { if (ilkTiklananBolge.ordu.askerSayisi > 1) { SaldiriEkrani saldiriekrani = new SaldiriEkrani(ilkTiklananBolge, bol, this); saldiriekrani.ShowDialog(); isArmyMoved = false; } ilkTiklananBolge = null; state = 0; } } else { state = 0; ilkTiklananBolge = null; } } } } broke = true; break; } } if (broke) break; } olduMu(); changeStatistics(); } }