示例#1
0
        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;
                            }
                        }
                    }
                }
                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            }
        }
示例#2
0
        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();
            }
        }