Facebook
From Soft Teal, 9 Years ago, written in Pascal.
Embed
Download Paste or View Raw
Hits: 727
  1. program pacmangame;
  2.  
  3. uses wincrt, graph;
  4.  
  5. type
  6.   square = record
  7.     x1:integer;
  8.     x2:integer;
  9.     y1:integer;
  10.     y2:integer;
  11.     centerX:integer;
  12.     centerY:integer;
  13.     isitwall:boolean;
  14.     istherefruit:boolean;
  15.   end;
  16.   hero = record
  17.     posX:integer;
  18.     posY:integer;
  19.   end;
  20.  
  21.  
  22. var driver, mode: smallint;
  23.     pile:array[1..21,1..19] of square;
  24.     pacman:hero;
  25.     key,previouskey:char;
  26.     pacX,pacY:integer;
  27.  
  28. procedure initialize();
  29. var i,j:integer;
  30.  
  31. begin
  32.   setcolor(black);
  33.   for i:=1 to 21 do
  34.   begin
  35.     for j:=1 to 19 do
  36.     begin
  37.       pile[i][j].x1:=110+((j-1)*24);
  38.       pile[i][j].x2:=132+((j-1)*24);
  39.       pile[i][j].y1:=20+((i-1)*24);
  40.       pile[i][j].y2:=42+((i-1)*24);
  41.       pile[i][j].centerX:=(pile[i][j].x1+pile[i][j].x2) div 2;
  42.       pile[i][j].centerY:=(pile[i][j].y1+pile[i][j].y2) div 2;
  43.  
  44.       if (i=1) then pile[i,j].isitwall:=true;  {21 lines of marking walls}
  45.       if (i=2) and ((j=1) or (j=10) or (j=19)) then pile[i,j].isitwall:=true;
  46.       if (i=3) and ((j=1) or (j=3) or (j=4) or (j=6) or(j=7) or (j=8) or (j=10) or (j=12) or (j=13) or (j=14) or (j=16) or (j=17) or (j=19)) then pile[i,j].isitwall:=true;
  47.       if (i=4) and ((j=1) or (j=19)) then pile[i,j].isitwall:=true;
  48.       if (i=5) and ((j=1) or (j=3) or (j=4) or (j=6) or (j=8) or (j=9) or (j=10) or (j=11) or (j=12) or (j=14) or (j=16) or (j=17) or (j=19)) then pile[i,j].isitwall:=true;
  49.       if (i=6) and ((j=1) or (j=6) or (j=10) or (j=14) or (j=19)) then pile[i,j].isitwall:=true;
  50.       if (i=7) and((j=1) or (j=2) or(j=3) or (j=4) or (j=6) or(j=7) or (j=8) or (j=10) or (j=12) or (j=13) or (j=14) or (j=16) or (j=17) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  51.       if (i=8) and ((j=1) or(j=2) or (j=3) or (j=4) or (j=6) or (j=14) or (j=16) or (j=17) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  52.       if (i=9) and ((j=1) or (j=2) or (j=3) or (j=4) or (j=6) or (j=8) or (j=9) or (j=10) or (j=11) or (j=12) or (j=14) or (j=16) or (j=17) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  53.       if (i=10) and ((j=8) or (j=9) or (j=10) or (j=11) or (j=12)) then pile[i,j].isitwall:=true;
  54.       if (i=11) and ((j=1) or (j=2) or (j=3) or (j=4) or (j=6) or (j=8) or (j=9) or (j=10) or (j=11) or (j=12) or (j=14) or (j=16) or (j=17) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  55.       if (i=12) and ((j=1) or (j=2) or (j=3) or (j=4) or (j=6) or (j=14) or (j=16) or (j=17) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  56.       if (i=13) and ((j=1) or (j=2) or (j=3) or (j=4) or (j=6) or (j=8) or (j=9) or (j=10) or (j=11) or (j=12) or (j=14) or (j=16) or (j=17) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  57.       if (i=14) and ((j=1) or (j=10) or (j=19)) then pile[i,j].isitwall:=true;
  58.       if (i=15) and ((j=1) or (j=3) or (j=4) or (j=6) or (j=7) or (j=8) or (j=10) or (j=12) or (j=13) or (j=14) or (j=16) or (j=17) or (j=19)) then pile[i,j].isitwall:=true;
  59.       if (i=16) and ((j=1) or (j=4) or (j=16) or (j=19)) then pile[i,j].isitwall:=true;
  60.       if (i=17) and ((j=1) or (j=2) or (j=4) or (j=6) or (j=8) or (j=9) or (j=10) or (j=11) or (j=12) or (j=14) or (j=16) or (j=18) or (j=19)) then pile[i,j].isitwall:=true;
  61.       if (i=18) and ((j=1) or (j=6) or (j=10) or (j=14) or (j=19)) then pile[i][j].isitwall:=true;
  62.       if (i=19) and ((j=1) or (j=3) or (j=4) or (j=5) or (j=6) or (j=7) or (j=8) or (j=10) or (j=12) or (j=13) or (j=14) or (j=15) or (j=16) or (j=17) or (j=19)) then pile[i,j].isitwall:=true;
  63.       if (i=20) and ((j=1) or (j=19)) then pile[i,j].isitwall:=true;
  64.       if (i=21) then pile[i,j].isitwall:=true;
  65.     end;
  66.   end;
  67.   begin
  68.     for i:=1 to 21 do                   //rysuje plansze
  69.     begin
  70.       for j:=1 to 19 do
  71.       begin
  72.         setfillstyle(11,5);
  73.         if pile[i][j].isitwall=true then bar(pile[i][j].x1,pile[i][j].y1,pile[i][j].x2,pile[i][j].y2);
  74.       end;
  75.     end;
  76.   end;
  77.   pacX:=10;
  78.   pacY:=16;
  79.   pacman.posX:=pile[pacY][pacX].centerX;            // poczatkowe parametry pacmana
  80.   pacman.posY:=pile[pacY][pacX].centerY;
  81.   setfillstyle(solidfill,yellow);
  82.   fillellipse(pacman.posX,pacman.posY,9,9);
  83. end;
  84.  
  85.  
  86. function readInput():char;
  87. begin
  88.   previouskey:=key;
  89.   if keypressed then key:=readkey;
  90.   begin
  91.     if key=#0 then key:=readkey;
  92.     case key of
  93.       chr(75):
  94.       begin
  95.         if pile[pacY][pacX-1].isitwall=false then
  96.         begin
  97.           readInput:='a';
  98.           pacX:=pacX-1;
  99.         end;
  100.       end;
  101.       chr(77):
  102.       begin
  103.         if pile[pacY][pacX+1].isitwall=false then
  104.         begin
  105.           readInput:='d';
  106.           pacX:=pacX+1;
  107.         end;
  108.       end;
  109.       chr(72):
  110.       begin
  111.         if pile[pacY-1][pacX].isitwall=false then
  112.         begin
  113.           readInput:='w';
  114.           pacY:=pacY-1;
  115.         end;
  116.       end;
  117.       chr(80):
  118.       begin
  119.         if pile[pacY+1][pacX].isitwall=false then
  120.         begin
  121.           readInput:='s';
  122.           pacY:=pacY+1;
  123.         end;
  124.       end;
  125.  
  126.     end;
  127.   writeln(pacX,' ',pacY);
  128.   end;
  129. end;
  130.  
  131. procedure draw();
  132. begin
  133.   setfillstyle(solidfill,yellow);
  134.   fillellipse(pacman.posX,pacman.posY,11,11);
  135. end;
  136.  
  137. procedure del();
  138. begin
  139.   setfillstyle(solidfill,black);
  140.   fillellipse(pacman.posX,pacman.posY,11,11);
  141. end;
  142.  
  143. procedure animation();
  144. var licznik:integer;
  145.     pac:char;
  146. begin
  147.   licznik:=0;
  148.   pac:=readInput();
  149.  
  150.   repeat
  151.     case pac of                       //ruchy pacmana
  152.     'a':  pacman.posX:=pacman.posX-3;
  153.     'd':  pacman.posX:=pacman.posX+3;
  154.     'w':  pacman.posY:=pacman.posY-3;
  155.     's':  pacman.posY:=pacman.posY+3;
  156.     end;
  157.   draw();
  158.   delay(20);
  159.   del();
  160.   licznik:=licznik+1;
  161.   until licznik=8;
  162. end;
  163.  
  164.  
  165. begin
  166.  
  167. driver:=detect; mode:=detect;
  168. InitGraph(driver,mode,'');
  169. initialize();
  170.  
  171. repeat
  172.   animation();
  173. until pacman.posX=444 ;
  174.  
  175. readkey;
  176. closegraph;
  177. end.