Şimdi Ara

PHP hep -iyiler-in kazanması sorunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
6
Cevap
0
Favori
301
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • 2 gündür inceliyorum fakat oyunda biri öldüğünde hep iyiler kazanıyor. oyunda bir kişi öldüğünde oyunun bitimi kontrol için aşağıdaki fonksiyon çağrılıyor
    turler; 1,2,3,4 tarzı vir array
    oluler; 0,1,0,1,0 tarzı . 0 yaşadığı anlamına geliyor
    offline; 0,0,0,1,1 tarzı 0 lar online 1ler offlie
    				function oyunbittimi(){ 
    global $ram_oyuncu,$dil,$vt;
    // oyun bitip bitmediğini kontrol eder
    // hiç vampir kalmadıysa veya köylü+doktor oyun biter.
    $win_kotuler=TRUE;
    $win_iyiler=true;
    foreach($this->oluler as $sira => $olu)
    {
    if($olu==0){ //yaşayanlardan
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz
    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}
    }
    }

    if($win_iyiler!=$win_kotuler)
    { // eğer ikisinden biri kazandıysa
    if($win_iyiler)
    { // iyiler kazandıysa
    $winner="<h1>".$dil["iyilerkazandi"]."</h1>";
    $kazanantip[_köylü]=TRUE;
    $kazanantip[_iyibüyücü]=TRUE;
    $kazanantip[_doktor]=TRUE;
    $kazanantip[_vampir]=FALSE;
    $kazanantip[_karabüyücü]=FALSE;
    }
    else
    { // kötüler kazandıysa
    $winner="<h1>".$dil["kotulerkazandi"]."</h1>";
    $kazanantip[_köylü]=FALSE;
    $kazanantip[_iyibüyücü]=FALSE;
    $kazanantip[_doktor]=FALSE;
    $kazanantip[_vampir]=TRUE;
    $kazanantip[_karabüyücü]=TRUE;
    }
    $list="<ul>";
    foreach ($this->oyuncular as $sira => $no){
    $list.="<li>".no2ad($no)." : ".$dil["tip".$this->turler[$sira]]."</li>";
    }
    $list.="</ul>";
    $oyuncuyaozel=array();
    foreach($this->offline as $sira => $off)
    {
    if($off==0)//onlinesa
    {
    $nosu=$this->oyuncular[$sira];
    $hsp=yukle_hesap($nosu);
    if($kazanantip[$this->turler[$sira]])
    { // kazanan taraftaysa
    $kazanc=13*$this->oyuncuadet;
    if($this->yatirim[$sira]!=-1){
    //yatırım yaptıysa
    $kazanc+=floor($this->yatirim[$sira]*(150+$this->oyuncuadet*$this->oyuncuadet+$hsp->seviye)/100);
    }
    $hsp->addAll($kazanc);
    $oyuncuyaozel[$sira]=$dil["kazanc_h1"].$dil["kazandiginizpara"].$kazanc.$dil["kazandiginizpuan"].$kazanc;
    }
    else
    { //kaybeden taraftaysa
    $kazanc=3*$this->oyuncuadet;
    $hsp->addAll($kazanc);
    $oyuncuyaozel[$sira]=$dil["kazanc_h1"].$dil["kazandiginizpara"].$kazanc.$dil["kazandiginizpuan"].$kazanc;
    }
    }
    } //foreac
    $this->sistem_msj($dil["gameover"]);
    foreach($oyuncuyaozel as $sira => $bilgi)
    { // oyuncuların SON ekranını oluştur ram_oyuncu
    $txt=$winner.$list.$bilgi;
    $ram_oyuncu->yazdata("son_".$this->oyuncular[$sira],$txt);
    }
    // son ekranı oluşturuldu şimdi oyunu yok et
    $this->bitti=1;
    $this->ram_senk();
    $vt->sorgu("UPDATE oyun SET bitti=1 WHERE no=:no;",array("no"=>$this->no));
    $this->zamanla(3); //3sn sonra oyunu sil
    }

    }







  • foreach($this->oluler as $sira => $olu)
    {
    if($olu==0){ //yaşayanlardan
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz
    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}
    }
    }



    yani demek istediğin bu döngüden hep $win_kotuler=FALSE && $win_iyiler=true sonucu çıkıyor.
    Yukarıdaki koşullar sağlanınca döngüden çıkış yapmayı denedin mi:


    foreach($this->oluler as $sira => $olu)
    {
    if($olu==0){ //yaşayanlardan
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz
    break;
    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    break;
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}
    break;
    }
    }




  • quote:

    Orijinalden alıntı: CatchFire


    foreach($this->oluler as $sira => $olu)
    {
    if($olu==0){ //yaşayanlardan
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz
    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}
    }
    }



    yani demek istediğin bu döngüden hep $win_kotuler=FALSE && $win_iyiler=true sonucu çıkıyor.
    Yukarıdaki koşullar sağlanınca döngüden çıkış yapmayı denedin mi:


    foreach($this->oluler as $sira => $olu)
    {
    if($olu==0){ //yaşayanlardan
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz
    break;
    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    break;
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}
    break;
    }
    }



    ilginiz için teşekkürler. Oyunun devam edebilmesi için kimsesniz kazanmamış olması gerekiyor. yani win_iyiler= FALSE win win_koyuler= FALSE olmalı. orda break; kullanmamız demek ilk yaşayan kişiye göre oyunu bitirmek olur. (FALSE-TRUE olacağı için, zannedersem switch case ile karıştırdınız) yani oyunda yaşayan hem vampir hem köylü olduğu için FALSE-FALSE dönecek ve oyn devam edecek.




  • Yok switch case ile karıştırmadım sadece oyunun mantığına tam hakim olmadığım için öyle bir öneride bulundum.

    KOdu parçalayarak gidelim, hep iyiler kazanıyor diyorsunuz, her koşulda demek bu.Yani:

    foreach($this->oluler as $sira => $olu)
    {
    if($olu==0){ //yaşayanlardan
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz
    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}
    }
    }


    bu kod parçasındaki:
    if($this->tur[$sira]==_vampir)
    {$win_iyiler=FALSE;} //vmpr yaşıyorsa iyiler kazanmaz

    bu koşul hiçbir türlü sağlanmıyor o zaman?


    elseif($this->tur[$sira]==_köylü)
    {$win_kotuler=FALSE;}//kylu/doktor yşyorsa kotuler -
    elseif($this->tur[$sira]==_doktor)
    {$win_kotuler=FALSE;}


    bu koşuldan ikisi ne olursa olsun sağlanıyor demek yanlış mıyım?

    Oyunun mantığını tam anlatırsanız çözeriz sorunu, oyunda kimin kazanacağını belirleyen 3 tane tür mü var ? Bunlar: vampir, doktor, köylü.
    Ve oyunda iki taraf var: iyi taraf ve kötü taraf, iki taraftada vampir var mı?Daha da detaya girmeniz lazım.....



    < Bu mesaj bu kişi tarafından değiştirildi CatchFire -- 25 Haziran 2014; 14:56:56 >




  • oyunda kimin kazanağını belirleyen 3 tür var : vampir, doktor, köylü. + 2 tür var kara ve iyi büyücü diye bunların oyunun bitişine bir etkisi yok.
    2 taraf var ; iyi ve kötü. vampir ve kara büyücüler kötü.
    oyunda tur sistemi var, ve millet birbirini öldürüyor belli tur sonlarında.
    öldür() fonksiyonun sonunda oyunbittimi() fonksiyonu çağrılıyor.

    yaptım denemeler sonucu hatanın, sizin tahmin ettiniz yerde olduğu kesinleşti.
    TRUE - FALSE dönüyor . yani $win_iyiler=false olmuyor.
    undefined



    < Bu mesaj bu kişi tarafından değiştirildi Perceptron -- 25 Haziran 2014; 15:35:57 >
  • çok teşekkürler, sorun tespit edildi. çok basit bir yerde hata yapmışın e yeni farkettim. 2 gündür bunu arıyormuşum demek
    oyunda karıştırdığım 2 değişken var
    biri tur , oyunun kaçıncı turda olduğunu saklıyor
    birde turler oyuncuların türlerini saklıyor. (türkçe karakter olmadığı içn)
    $this->tur yerine $this->turler kullanmam gerekiyor.

    _köylü = 0 a karşılık geliyor
    $this->tur[0] ile $this->tur eşit olduğu için ve diğer $this->tur[1] 2 3 null/false döndürüyor. sonuc olarak sadece köylüler hayatta görünüyor

    @CatchFire



    < Bu mesaj bu kişi tarafından değiştirildi Perceptron -- 25 Haziran 2014; 15:44:57 >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.