Arama butonu
Bu konudaki kullanıcılar: 1 misafir
5
Cevap
296
Tıklama
0
Öne Çıkarma
PHP hep -iyiler-in kazanması sorunu
C
11 yıl
Teğmen

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;
}
}


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @.fcan
C
11 yıl
Teğmen

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 >


Bu mesajda bahsedilenler: @.fcan
P
11 yıl
Binbaşı
Konu Sahibi

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
}

}



P
11 yıl
Binbaşı
Konu Sahibi

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.


Bu mesaja 1 cevap geldi.
P
11 yıl
Binbaşı
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @CatchFire
P
11 yıl
Binbaşı
Konu Sahibi

ç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 >


Bu mesajda bahsedilenler: @CatchFire
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.