Autor Zpráva
huf
Profil
Nemáte někdo nápad, jak udělat vyhodnocení piškvorek (jesti někdo vyhrál) pomocí matic?
fuckin
Profil *
v php?
huf
Profil
Jj, v PHP
_es
Profil
huf
Ak by vyhovoval JavaScript, tak si pozri http://www.javascripter.net/games/xo/index.htm
Alebo tu máš na to celý seriál (2 články) v češtine: http://interval.cz/clanky/online-piskvorky-v-php-s-mysql-1/
imploder
Profil
co třeba nějak takhle?
$vyhra_x = 0; $vyhra_o = 0;
$nutny_pocet = 3;

// po řádcích 
for($r=0; isset($mat[$r]); $r++) {
  $rada_x = 0; $rada_o = 0;
  for($s=0; isset($mat[$r][$s]); $s++) { 
    switch($mat[$r][$s]){
      case "x": $rada_o=0; $rada_x++; break;
      case "o": $rada_x=0; $rada_o++; break;
      default: $rada_x=0; $rada_o=0;
    }
    if($rada_x >= $nutny_pocet) $vyhra_x = 1;
    if($rada_o >= $nutny_pocet) $vyhra_o = 1;
  }
}

// po sloupcích 
for($s=0; isset($mat[0][$s]); $s++) {
  $rada_x = 0; $rada_o = 0;
  for($r=0; isset($mat[$r][$s]); $r++) { 
    switch($mat[$r][$s]){
      case "x": $rada_o=0; $rada_x++; break;
      case "o": $rada_x=0; $rada_o++; break;
      default: $rada_x=0; $rada_o=0;
    }
    if($rada_x >= $nutny_pocet) $vyhra_x = 1;
    if($rada_o >= $nutny_pocet) $vyhra_o = 1;
  }
}


Analogicky pro obě diagonály.
http://bprhad.wz.cz/piskvorky/piskvorky.php
imploder
Profil
Udělal jsem i procházení diagonál, s adresováním jednotlivých bodů touhle třídou:
class diag {
  var $sirka;
  var $vyska;

  // je možné buď tímto konstruktorem načíst výšku a šířku z matice, 
  // nebo referenci vynechat a nastavit proměnné $sirka, $vyska zvlášť
  function __construct(&$mat=NULL) {
    if(isset($mat)) { 
      $this->sirka = strlen($mat[0]);
      $this->vyska = count($mat);
    }
  }

  /* 
   * Vrátí souřadnici bodu na diagonále.
   *
   * $smer==0 -> doprava dolů, jinak -> doleva dolů
   * $n - pořadí diagonály zleva (počítá se od 0)
   * $d - vzdálenost bodu od začátku diagonály 
   */
  public function souradnice($smer, $n, $d) {
    if($smer==0) {
      if($n < $this->vyska) { 
        $ret['x'] = 0 + $d; 
        $ret['y'] = ($this->vyska-1-$n) + $d;
      }
      else {
        $ret['x'] = ($n-($this->vyska-1)) + $d;
        $ret['y'] = ($this->vyska-1-$n) + $d; 
      }
      return $ret;
    }

    else {
      if($n < $this->sirka) { 
        $ret['x'] = $n - $d; 
        $ret['y'] = 0 + $d;
      }
      else {
        $ret['x'] = ($this->sirka-1) - $d;
        $ret['y'] = ($n - ($this->vyska-1)) + $d; 
      }
      return $ret;
    }
  }
  
  // počet diagonál (pro oba směry stejný)
  public function pocet() {
    return $this->sirka + $this->vyska - 1;
  }
}

Doma mi funguje bez problémů, ale na wz.cz hází parse error: http://bprhad.wz.cz/piskvorky/piskvorky.php
Předtím to házelo parse_error už na 11. řádku, PHP na wz.cz nebralo označení proměnných ve třídě public, takhle s var je bere. Je to divné, nenapadá náhodou někoho, proč PHP na wz.cz odmítá věci, které normálně mají jít?
Když jsem z řádku 16 odstranil výchozí přiřazení NULL, tak to tam nehavarovalo, ale pak byl zase parse error na řádku 30 (tj. public function souradnice($smer, $n, $d) {). Prostě se to chová na wz.cz iracionálně, zatímco na localhostu kód funguje. >> kód <<
Alphard
Profil
Viděl bych to na problém s verzí, trochu to mícháte dohormady. var je z PHP 4, __construct() z PHP 5, chování & se v obou verzích liší také. Označení proměnných public, private atd. je z PHP 5.

Celkově se OOP ve 4 a 5 verzi PHP dost změnilo, zjistěte si, jaká verze je na wz a jestli 4, doporučuji jít jinam, tohle nelze dost dobře zkloubit.
imploder
Profil
Alphard
Je to tak, na wz.cz je PHP 4.3.4. Jinde na PHP5 kód taky funguje. V PHP 4 zřejmě funkce a proměnné public vůbec nejsou. Reference - tam je do php5 omezení, že se nedá odkazovat na objekt - to není tento případ, takže to by nemělo mít vliv. Wz.cz je vážně naprd - pomalé, vypadává FTP a jak je vidět doteď tam není PHP 5.
EDIT: přepsal jsem se
Alphard
Profil
imploder:
V PHP 5 zřejmě funkce a proměnné public vůbec nejsou.
Tam právě jsou :-)
Kajman_
Profil *
Jen pozor, že třeba na mistroství ČR se hraje na právě 5 - tedy, že řada 6-9 symbolů nevyhrává, jak se tomu často děje ve školních lavicích :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: