Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $wymiar_x = 30;
- $wymiar_y = 16;
- $pozycja_x_startowa_robaka = 12;
- $pozycja_y_startowa_robaka = 6;
- $zycie = TRUE;
- $licznik_dlugosci = 2;
- class pixel
- {
- public $wyglad = NULL;
- function __construct($polozenie)
- {
- if ($polozenie === 'vertical') $this->wyglad = "-";
- elseif ($polozenie === 'horizontal') $this->wyglad = "|";
- else $this->wyglad = " ";
- }
- function get_wyglad(){
- echo $this->wyglad;
- }
- function wstaw_robaka(){
- $this->wyglad = "*";
- }
- function stworz_jedzonko(&$pixel){
- $x = rand(2, 28);
- $y = rand(2, 14);
- $pixel[$x][$y]->wyglad = "&";
- }
- }
- /**
- * Robak
- */
- class robak extends pixel
- {
- private $dlugosc;
- public $kierunek_ruchu;
- public $polozenie_glowy_x;
- public $polozenie_glowy_y;
- function __construct($x, $y)
- {
- $this->dlugosc = 2;
- $this->polozenie_glowy_x = $x;
- $this->polozenie_glowy_y = $y;
- }
- function powieksz(){
- $this->dlugosc++;
- }
- }
- class ogon
- {
- public $wsp_x;
- public $wsp_y;
- function __construct($x, $y)
- {
- $this->wsp_x = $x;
- $this->wsp_y = $y;
- }
- function rysuj_ogon(&$pixel){
- $pixel[$this->wsp_x][$this->wsp_y] = "&";
- }
- }
- system("stty -icanon");
- //echo "input# ";
- function get_key(){
- stream_set_blocking(STDIN, false);
- $c = fread(STDIN, 1);
- return $c;
- }
- function ruch_gora(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
- $robak->polozenie_glowy_y--;
- $robak->kierunek_ruchu = "U";
- if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
- $robak->powieksz();
- $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
- $licznik_dlugosci++;
- pixel::stworz_jedzonko($pixel);
- }
- 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;
- else $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
- }
- function ruch_dol(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
- $robak->polozenie_glowy_y++;
- $robak->kierunek_ruchu = "D";
- if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
- $robak->powieksz();
- $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
- $licznik_dlugosci++;
- pixel::stworz_jedzonko($pixel);
- }
- 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;
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
- }
- function ruch_lewo(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
- $robak->polozenie_glowy_x--;
- $robak->kierunek_ruchu = "L";
- if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
- $robak->powieksz();
- $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
- $licznik_dlugosci++;
- pixel::stworz_jedzonko($pixel);
- }
- 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;
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
- }
- function ruch_prawo(&$pixel, &$robak, &$zycie, &$licznik_dlugosci, &$ogon){
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = " ";
- $robak->polozenie_glowy_x++;
- $robak->kierunek_ruchu = "R";
- if ($pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad === "&"){
- $robak->powieksz();
- $ogon[$licznik_dlugosci] = new ogon($robak->polozenie_glowy_x, $robak->polozenie_glowy_y);
- $licznik_dlugosci++;
- pixel::stworz_jedzonko($pixel);
- }
- 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;
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wyglad = "*";
- }
- function refresh_planszy(&$pixel){
- for ($i=0; $i<$wymiar_y; $i++){
- for ($j=0; $j<$wymiar_x; $j++){
- if ($i == 0 || $i == $wymiar_y-1) $polozenie = "vertical";
- elseif ($j == 0 || $j == $wymiar_x-1) $polozenie = "horizontal";
- else $polozenie = "pole";
- $pixel[$j][$i]->wyglad = $polozenie;
- }
- }
- }
- for ($i=0; $i<$wymiar_y; $i++){
- for ($j=0; $j<$wymiar_x; $j++){
- if ($i == 0 || $i == $wymiar_y-1) $polozenie = "vertical";
- elseif ($j == 0 || $j == $wymiar_x-1) $polozenie = "horizontal";
- else $polozenie = "pole";
- $pixel[$j][$i] = new pixel($polozenie);
- }
- }
- $robak = new robak($pozycja_x_startowa_robaka, $pozycja_y_startowa_robaka);
- $pixel[$robak->polozenie_glowy_x][$robak->polozenie_glowy_y]->wstaw_robaka();
- $ogon[1] = new ogon($pozycja_x_startowa_robaka, $pozycja_y_startowa_robaka+1);
- pixel::stworz_jedzonko($pixel);
- while ($zycie) {
- system(clear);
- refresh_planszy($pixel);
- for ($k=1; $k < $licznik_dlugosci; $k++) {
- $local_x = $ogon[$k]->wsp_x;
- $local_y = $ogon[$k]->wsp_y;
- $pixel[$local_x][$local_y]->wyglad = "*";
- }
- //debug monitor
- for ($i=0; $i<$wymiar_y; $i++){
- for ($j=0; $j<$wymiar_x; $j++){
- $pixel[$j][$i]->get_wyglad();
- }
- echo PHP_EOL;
- }
- $c = get_key();
- switch ($c) {
- case 'w':
- ruch_gora($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- break;
- case 's':
- ruch_dol($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- break;
- case 'a':
- ruch_lewo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- break;
- case 'd':
- ruch_prawo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- break;
- default:
- if ($robak->kierunek_ruchu === "R") ruch_prawo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- if ($robak->kierunek_ruchu === "U") ruch_gora($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- if ($robak->kierunek_ruchu === "D") ruch_dol($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- if ($robak->kierunek_ruchu === "L") ruch_lewo($pixel, $robak, $zycie, $licznik_dlugosci, $ogon);
- break;
- }
- //else echo "Read from STDIN: " . $c . "\ninput# ";
- usleep(200000);
- }
- system(clear);
- echo "PRZEGRALES!";
- echo PHP_EOL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement