SaveText.Ru

Без имени
  1. uses crt;
  2. {
  3. управление      w
  4.                                                 a       d
  5.                                                         s
  6. }
  7. const
  8.  leftm = 0;
  9. topm = 1;
  10.  Wm = 30;
  11.  Hm = 20;
  12. Maxlen = 100;
  13.  snch  = '*';
  14. edach = '%';
  15.  bigedach = 'W';
  16.  stena = '#';
  17.  maxtlifeb = 40;
  18.  var
  19.  Matrix:array [1..Hm]of string= (
  20.          '####                     #####' ,
  21.          '#                            #' ,
  22.          '#                            #' ,
  23.          '#                            #' ,
  24.          '                               ',
  25.          '                              ' ,
  26.          '                              ' ,
  27.          '                              ' ,
  28.          '                              ' ,
  29.          '         #########            ' ,
  30.          '                              ' ,
  31.          '         #########            ' ,
  32.          '                              ' ,
  33.          '                              ' ,
  34.          '                              ' ,
  35.          '                              ' ,
  36.          '#                            #' ,
  37.          '#                            #' ,
  38.          '#                            #' ,
  39.          '####                      ####'
  40. );
  41.  dir:integer=0;
  42.  count:integer = 4;
  43.  tick:integer = 0;
  44.  lifeda:boolean = false;
  45.  tlifedab:integer = 10;
  46.  lifedab:boolean = false;
  47.   GameOver:boolean;
  48.  score:integer = 0;
  49.  randbe:integer;
  50.  
  51.  snake:array [0..Maxlen] of record x,y:integer;end;
  52. procedure onkeyboard();
  53. begin
  54.         if (keypressed)then
  55.         begin
  56.                 case readkey of
  57.                  'a': if (dir <> 2)then dir := 0;
  58.                  'w': if (dir <> 3)then dir := 1;
  59.                  'd': if(dir <> 0)then dir := 2;
  60.                  's': if (dir <> 1)then dir := 3;
  61.                 end;
  62.         end;
  63. end;
  64. procedure snakep();
  65. var i:integer;
  66. begin
  67.         for i := count downto 1 do snake[i] := snake[i - 1];
  68.                
  69.         case (dir) of
  70.          0:begin
  71.                 if (snake[0].x = 1)then snake[0].x := Wm;
  72.                  snake[0].x:=snake[0].x-1;
  73.          end;
  74.          1:begin
  75.                  if (snake[0].y = 1)then  snake[0].y := Hm;
  76.                  snake[0].y:=snake[0].y-1;
  77.          end;
  78.          2: begin
  79.                 if (snake[0].x = Wm)then snake[0].x := 1;
  80.                 snake[0].x:=snake[0].x+1;
  81.          end;
  82.          3:begin
  83.                  if (snake[0].y = Hm - 1)then snake[0].y := 1;  
  84.                  snake[0].y:=snake[0].y+1;
  85.          end;
  86.         end;
  87.         if (Matrix[snake[0].y][snake[0].x] = stena)then
  88.         begin
  89.                 GameOver := true;
  90.         end;
  91.  
  92.         if (Matrix[snake[0].y][snake[0].x] = snch)then
  93.         begin
  94.                 GameOver := true;
  95.         end;
  96.         if (Matrix[snake[0].y][snake[0].x] = edach)then
  97.         begin
  98.                 lifeda := false;
  99.                 inc(count);
  100.                 inc(score);
  101.         end;
  102.         if (Matrix[snake[0].y][snake[0].x] = bigedach)then
  103.         begin
  104.                 tlifedab := 0;
  105.                 lifedab := false;
  106.                 inc(count);
  107.                 inc(score, 4);
  108.         end;
  109.         Matrix[snake[0].y][snake[0].x]:=snch;
  110.         Matrix[snake[count].y][snake[count].x] := ' ';
  111. end;
  112.  
  113. procedure drawmatrix();
  114. var x,y:integer;
  115. begin
  116.         for y := 1 to Hm do
  117.         begin
  118.                 for x := 1 to Wm do
  119.                 begin
  120.                         if (Matrix[y][x] <> '$')then
  121.                         begin
  122.                                 gotoxy(x,y);
  123.                                 write( Matrix[y][x]);
  124.                                 if(Matrix[y][x]=' ')then Matrix[y][x] := '$';
  125.                         end;
  126.                 end;
  127.         end;
  128. end;
  129.  
  130. procedure randcord(var x:integer;var y:integer);
  131. begin
  132.        
  133.         repeat
  134.                 x := random(wm div 2);
  135.                 y := random(hm div 2);
  136.          until not ((Matrix[y][x] = snch) or (Matrix[y][x] = stena));
  137. end;
  138. var x,x1, y,y1:integer;
  139. procedure edap();
  140. begin
  141.          //static int x,x1, y,y1;
  142.  
  143.         if (not lifeda) then
  144.         begin
  145.                 randcord(x,y);
  146.                 lifeda := true;
  147.                 Matrix[y][x] := edach;
  148.         end;
  149.  
  150.        
  151.         if (1<=tlifedab) then begin
  152.                 dec(tlifedab);
  153.                 if(0 = tlifedab)then begin
  154.                         Matrix[y1][x1] := ' ';
  155.                         tlifedab := 0;
  156.                         lifedab := false;
  157.         end;
  158.         end;
  159.  
  160.         if (( tlifedab>0)
  161.         and((tick mod randbe + 1) = randbe))then
  162.         begin
  163.                 //Matrix[y1][x1] = ' ';
  164.                 randbe := random(10)+ random(30)+100 + maxtlifeb;
  165.                 tlifedab := maxtlifeb;
  166.                 lifedab := true;
  167.                 randcord(x1, y1);
  168.                 Matrix[y1][x1] := bigedach;
  169.         end;
  170.        
  171.         gotoxy(x,y+1); 
  172. end;
  173.  
  174. begin
  175.                 randbe:= random(20)  + random(20)+10+maxtlifeb;
  176.         GameOver := false;
  177.         snake[0].x := (Wm) div 2;
  178.         snake[0].y := (Hm) div 2+5;
  179.         writeln( score);
  180.         snakep();
  181.         drawmatrix();
  182.         readkey;
  183.         while(not GameOver) do
  184.         begin
  185.                 onkeyboard();
  186.                 snakep();
  187.                 edap();
  188.                 drawmatrix();
  189.                 inc(tick);
  190.                 delay(150);
  191.         end;
  192.         clrscr;
  193.         writeln( 'GAMEOVER!!!');
  194.         writeln( 'score: ',score);
  195. end.

Share with your friends:

Распечатать