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:
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 >
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 }
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:
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.
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
ç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 >
{
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;
}
}
Bu mesaja 1 cevap geldi. Cevapları Gizle
Bu mesajda bahsedilenler: @.fcan