Advertisement
Guest User

Snake Deprecated

a guest
Dec 22nd, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.67 KB | None | 0 0
  1. <?php
  2.  
  3. $wymiar_x = 30;
  4. $wymiar_y = 16;
  5. $pozycja_x_startowa_robaka = 12;
  6. $pozycja_y_startowa_robaka = 6;
  7. $zycie = TRUE;
  8. $licznik_dlugosci = 2;
  9.  
  10. class pixel
  11. {
  12.     public $wyglad = NULL;
  13.     function __construct($polozenie)
  14.     {
  15.         if ($polozenie === 'vertical') $this->wyglad = "-";
  16.         elseif ($polozenie === 'horizontal') $this->wyglad = "|";
  17.         else $this->wyglad = " ";
  18.     }
  19.     function get_wyglad(){
  20.         echo $this->wyglad;
  21.     }
  22.     function wstaw_robaka(){
  23.         $this->wyglad = "*";
  24.     }
  25.     function stworz_jedzonko(&$pixel){
  26.         $x = rand(2, 28);
  27.         $y = rand(2, 14);
  28.         $pixel[$x][$y]->wyglad = "&";
  29.     }
  30. }
  31.  
  32. /**
  33. * Robak
  34. */
  35. class robak extends pixel
  36. {
  37.     private $dlugosc;
  38.     public $kierunek_ruchu;
  39.     public $polozenie_glowy_x;
  40.     public $polozenie_glowy_y;
  41.     function __construct($x, $y)
  42.     {
  43.         $this->dlugosc = 2;
  44.         $this->polozenie_glowy_x = $x;
  45.         $this->polozenie_glowy_y = $y;
  46.     }
  47.     function powieksz(){
  48.         $this->dlugosc++;
  49.     }
  50. }
  51.  
  52. class ogon
  53. {
  54.     public $wsp_x;
  55.     public $wsp_y;
  56.     function __construct($x, $y)
  57.     {
  58.         $this->wsp_x = $x;
  59.         $this->wsp_y = $y; 
  60.     }
  61.     function rysuj_ogon(&$pixel){
  62.         $pixel[$this->wsp_x][$this->wsp_y] = "&";
  63.     }
  64. }
  65.  
  66. system("stty -icanon");
  67. //echo "input# ";
  68.  
  69. function get_key(){
  70.     stream_set_blocking(STDIN, false);
  71.     $c = fread(STDIN, 1);
  72.     return $c;
  73. }
  74.  
  75.  
  76. function ruch_gora(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
  77.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
  78.     $robak->polozenie_glowy_y--;
  79.     $robak->kierunek_ruchu = "U";
  80.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
  81.         $robak->powieksz();
  82.         $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
  83.         $licznik_dlugosci++;
  84.         pixel::stworz_jedzonko($pixel);
  85.     }
  86.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "|" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "-" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "*") $zycie = FALSE;
  87.     else $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";   
  88. }
  89.  
  90. function ruch_dol(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
  91.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
  92.     $robak->polozenie_glowy_y++;
  93.     $robak->kierunek_ruchu = "D";
  94.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
  95.         $robak->powieksz();
  96.         $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
  97.         $licznik_dlugosci++;
  98.         pixel::stworz_jedzonko($pixel);
  99.     }
  100.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "|" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "-" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "*") $zycie = FALSE;
  101.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
  102. }
  103.  
  104. function ruch_lewo(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
  105.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
  106.     $robak->polozenie_glowy_x--;
  107.     $robak->kierunek_ruchu = "L";
  108.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
  109.         $robak->powieksz();
  110.         $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
  111.         $licznik_dlugosci++;
  112.         pixel::stworz_jedzonko($pixel);
  113.     }
  114.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "|" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "-" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "*") $zycie = FALSE;
  115.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
  116. }
  117.  
  118. function ruch_prawo(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
  119.  
  120.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
  121.  
  122.     $robak->polozenie_glowy_x++;
  123.     $robak->kierunek_ruchu = "R";
  124.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
  125.         $robak->powieksz();
  126.         $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
  127.         $licznik_dlugosci++;
  128.         pixel::stworz_jedzonko($pixel);
  129.     }
  130.     if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "|" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "-" || $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "*") $zycie = FALSE;
  131.     $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
  132. }
  133.  
  134. function refresh_planszy(&$pixel){
  135.     for ($i=0; $i<$wymiar_y; $i++){
  136.         for ($j=0; $j<$wymiar_x; $j++){
  137.             if ($i == 0 || $i == $wymiar_y-1) $polozenie = "vertical";
  138.             elseif ($j == 0 || $j == $wymiar_x-1) $polozenie = "horizontal";
  139.             else $polozenie = "pole";
  140.             $pixel[$j][$i]->wyglad = $polozenie;
  141.         }
  142.     }
  143. }
  144.  
  145.  
  146. for ($i=0; $i<$wymiar_y; $i++){
  147.     for ($j=0; $j<$wymiar_x; $j++){
  148.         if ($i == 0 || $i == $wymiar_y-1) $polozenie = "vertical";
  149.         elseif ($j == 0 || $j == $wymiar_x-1) $polozenie = "horizontal";
  150.         else $polozenie = "pole";
  151.         $pixel[$j][$i] = new pixel($polozenie);
  152.     }
  153. }
  154.  
  155.  
  156. $robak = new robak($pozycja_x_startowa_robaka, $pozycja_y_startowa_robaka);
  157. $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wstaw_robaka();
  158. $ogon[1] = new ogon($pozycja_x_startowa_robaka, $pozycja_y_startowa_robaka+1);
  159. pixel::stworz_jedzonko($pixel);
  160. while ($zycie) {
  161.     system(clear);
  162.     refresh_planszy($pixel);
  163.     for ($k=1; $k < $licznik_dlugosci; $k++) {
  164.         $local_x = $ogon[$k]->wsp_x;
  165.         $local_y = $ogon[$k]->wsp_y;
  166.         $pixel[$local_x][$local_y]->wyglad = "*";  
  167.     }
  168.     //debug monitor
  169.     for ($i=0; $i<$wymiar_y; $i++){
  170.         for ($j=0; $j<$wymiar_x; $j++){
  171.             $pixel[$j][$i]->get_wyglad();
  172.         }
  173.  
  174.     echo PHP_EOL;
  175.     }
  176.     $c = get_key();
  177.     switch ($c) {
  178.         case 'w':
  179.             ruch_gora($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  180.             break;
  181.         case 's':
  182.             ruch_dol($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  183.             break;
  184.         case 'a':
  185.             ruch_lewo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  186.             break;
  187.         case 'd':
  188.             ruch_prawo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  189.             break;
  190.         default:
  191.             if ($robak->kierunek_ruchu === "R") ruch_prawo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  192.             if ($robak->kierunek_ruchu === "U") ruch_gora($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  193.             if ($robak->kierunek_ruchu === "D") ruch_dol($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  194.             if ($robak->kierunek_ruchu === "L") ruch_lewo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
  195.             break;
  196.  
  197.     }
  198.     //else echo "Read from STDIN: " . $c . "\ninput# ";
  199.     usleep(200000);
  200. }
  201.  
  202. system(clear);
  203. echo "PRZEGRALES!";
  204. echo PHP_EOL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement