asmodeus94

wyscig4

Jun 4th, 2012
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 11.85 KB | None | 0 0
  1. program grafika;
  2. uses graph,crt;
  3.  
  4. type
  5.  podKropki = record
  6.  x,y : integer;
  7.  koloKrop : integer;
  8.  end;
  9.  all = record
  10.  x,y,posx,posy,spd,cp1,cp2,cp3,cp4: integer;
  11.  tabKrop : array [1..3,1..3] of podKropki;
  12.  end;
  13.  
  14. var
  15. ster,tryb:integer;
  16. a:char;
  17. tab:array[1..4] of all;
  18. flaga,fora:integer;
  19. s,t:integer;
  20. tmp,licz : integer;
  21. gr,ilgr: byte;
  22.  
  23. label reset;
  24.  
  25. const
  26. odstTex = 55; {odstep w poziomie miedzy menu i podmenu}
  27. dlT = 4;
  28.  
  29. pozx_b = 100;
  30. pozy_b = 100;           {wywalic}
  31. pozx_o = 300;
  32. pozy_o = 100;
  33. pozx_d = 500;
  34. pozy_d = 100;
  35. pozx_d2 = 300;
  36. pozy_d2 = 300;
  37.  
  38. var
  39. tabMenuT : array [1..dlT,1..2] of string; {menuowska tablica}
  40.  
  41. {intro}
  42. function obetnij(lancuch:string;aktProc:real):string;
  43. var c : byte;wyn : string;
  44. begin
  45.  wyn:='';
  46.  for c:=1 to 4 do begin
  47.      if lancuch[c]<>'.' then wyn:=wyn+lancuch[c];
  48.  end;if aktProc<10 then wyn:=lancuch[1]+lancuch[2];if aktProc=100 then wyn:=wyn+'0';
  49.  wyn:=wyn+'%';
  50.  obetnij:=wyn;
  51. end;
  52. procedure pasek;
  53. var
  54. proc : real;dx:integer;st : string;bylEnter : byte;
  55. begin
  56.  dx:=0;bylEnter:=0;
  57.  REPEAT
  58.  setlinestyle(1,1,3);setfillstyle(9,blue);
  59.  bar3d((getmaxx-500)div 2,getmaxy div 2,(getmaxx-500)div 2+dx,getmaxy div 2-50,10,true);
  60.  dx:=dx+1;
  61.  proc:=(dx/500*100);
  62.  str(proc,st);
  63.  setlinestyle(0,1,1);bar((getmaxx+4) div 2,getmaxy div 2-25,(getmaxx+55) div 2,getmaxy div 2-17);
  64.  outTextxy((getmaxx-3) div 2,(getmaxy-50) div 2,obetnij(st,proc));
  65.  delay(5);
  66.  if keypressed then bylEnter:=1;
  67. UNTIL (dx=500)OR(keypressed);
  68. if bylEnter=0 then delay(3000);cleardevice;
  69. end;
  70. {/ intro}
  71.  
  72. {***GRAFIKA***}
  73.  
  74. procedure beczka(pozx_b,pozy_b:integer);
  75. begin
  76.  SetColor(yellow);
  77.  SetFillStyle(1,red);
  78.  FillEllipse(pozx_b,pozy_b, 5, 3);
  79.  Line(pozx_b-5,pozy_b,pozx_b-5,pozy_b+8);
  80.  Line(pozx_b+5,pozy_b,pozx_b+5,pozy_b+8);
  81.  FillEllipse(pozx_b,pozy_b+8, 5, 3);
  82.  SetColor(red);
  83.  Line(pozx_b-4,pozy_b+2,pozx_b-4,pozy_b+9);
  84.  Line(pozx_b-3,pozy_b+3,pozx_b-3,pozy_b+9);
  85.  Line(pozx_b-2,pozy_b+4,pozx_b-2,pozy_b+9);
  86.  Line(pozx_b-1,pozy_b+4,pozx_b-1,pozy_b+9);
  87.  Line(pozx_b,pozy_b+4,pozx_b,pozy_b+9);
  88.  Line(pozx_b+1,pozy_b+4,pozx_b+1,pozy_b+9);
  89.  Line(pozx_b+2,pozy_b+4,pozx_b+2,pozy_b+9);
  90.  Line(pozx_b+3,pozy_b+3,pozx_b+3,pozy_b+9);
  91.  Line(pozx_b+4,pozy_b+2,pozx_b+4,pozy_b+9);
  92.  PutPixel(pozx_b,pozy_b+9,LightRed);
  93.  PutPixel(pozx_b-1,pozy_b+9,LightRed);
  94.  PutPixel(pozx_b-2,pozy_b+9,LightRed);
  95.  PutPixel(pozx_b-3,pozy_b+8,LightRed);
  96.  PutPixel(pozx_b-4,pozy_b+7,LightRed);
  97.  PutPixel(pozx_b+1,pozy_b+9,LightRed);
  98.  PutPixel(pozx_b+2,pozy_b+9,LightRed);
  99.  PutPixel(pozx_b+3,pozy_b+8,LightRed);
  100.  PutPixel(pozx_b+4,pozy_b+7,LightRed);
  101.  PutPixel(pozx_b,pozy_b+8,LightRed);
  102.  PutPixel(pozx_b-1,pozy_b+8,LightRed);
  103.  PutPixel(pozx_b-2,pozy_b+8,LightRed);
  104.  PutPixel(pozx_b-3,pozy_b+7,LightRed);
  105.  PutPixel(pozx_b-4,pozy_b+6,LightRed);
  106.  PutPixel(pozx_b+1,pozy_b+8,LightRed);
  107.  PutPixel(pozx_b+2,pozy_b+8,LightRed);
  108.  PutPixel(pozx_b+3,pozy_b+7,LightRed);
  109.  PutPixel(pozx_b+4,pozy_b+6,LightRed);
  110.  PutPixel(pozx_b+2,pozy_b,255);
  111.  {PutPixel(pozx_b+2,pozy_b-1,black); }
  112.  PutPixel(pozx_b+1,pozy_b-1,255);
  113.  PutPixel(pozx_b+1,pozy_b,255);
  114. end;
  115.  
  116. procedure odblask(pozx_o,pozy_o:integer);
  117. begin
  118.  PutPixel(pozx_o-2+licz,pozy_o-2+licz,lightgray);
  119.  PutPixel(pozx_o-3+licz,pozy_o-1+licz,lightgray);
  120.  PutPixel(pozx_o-4+licz,pozy_o-1+licz,lightgray);
  121.  PutPixel(pozx_o-5+licz,pozy_o-1+licz,lightgray);
  122. end;
  123.  
  124. procedure olej_1(pozx_o,pozy_o:integer);
  125. begin randomize;
  126.  SetColor(blue);
  127.  SetFillStyle(1,blue);
  128.  FillEllipse(pozx_o,pozy_o, 5, 3);
  129.  for tmp:=1 to 10 do
  130.  begin
  131.   FillEllipse(pozx_o+(random(15)),pozy_o+(random(15)), 5, 3);
  132.  end;
  133.  for tmp:=1 to 3 do
  134.  begin
  135.   licz:=licz+random(8);
  136.   odblask(pozx_o,pozy_o);
  137.  end;
  138. end;
  139.  
  140. procedure drzewo_1(pozx_d,pozy_d:integer);
  141. begin
  142.  SetColor(yellow);
  143.  Line(pozx_d,pozy_d+6,pozx_d+10,pozy_d+16);
  144.  Line(pozx_d,pozy_d+6,pozx_d-10,pozy_d+16);
  145.  Line(pozx_d+10,pozy_d+16,pozx_d-10,pozy_d+16);
  146.  {floodfill(pozx_d,pozy_d+8,green);}
  147.  Line(pozx_d,pozy_d+16,pozx_d+12,pozy_d+26);
  148.  Line(pozx_d,pozy_d+16,pozx_d-12,pozy_d+26);
  149.  Line(pozx_d-12,pozy_d+26,pozx_d+12,pozy_d+26);
  150.  Line(pozx_d,pozy_d+26,pozx_d+16,pozy_d+36);
  151.  Line(pozx_d,pozy_d+26,pozx_d-16,pozy_d+36);
  152.  Line(pozx_d-16,pozy_d+36,pozx_d+16,pozy_d+36);
  153.  Rectangle(pozx_d-2,pozy_d+36,pozx_d+2,pozy_d+44);
  154.  SetFillStyle(1,brown);
  155.  {floodfill(pozx_d,pozy_d+40,brown);}
  156. end;
  157.  
  158. procedure drzewo_2(pozx_d,pozy_d:integer);
  159. begin
  160.  SetColor(green);
  161.  SetFillStyle(6{6},green);
  162.  FillEllipse(pozx_d2,pozy_d2, 8, 4);
  163.  FillEllipse(pozx_d2-4,pozy_d2+2, 8, 4);
  164.  FillEllipse(pozx_d2+4,pozy_d2+2, 8, 4);
  165.  FillEllipse(pozx_d2,pozy_d2+4, 8, 4);
  166.  FillEllipse(pozx_d2-6,pozy_d2+5, 8, 4);
  167.  FillEllipse(pozx_d2+6,pozy_d2+6, 8, 4);
  168.  FillEllipse(pozx_d2-8,pozy_d2+10, 8, 4);
  169.  FillEllipse(pozx_d2+9,pozy_d2+10, 8, 4);
  170.  FillEllipse(pozx_d2,pozy_d2+13, 8, 4);
  171.  FillEllipse(pozx_d2+9,pozy_d2+18, 8, 4);
  172.  FillEllipse(pozx_d2-9,pozy_d2+17, 8, 4);
  173.  FillEllipse(pozx_d2-2,pozy_d2+17, 8, 4);
  174.  FillEllipse(pozx_d2-7,pozy_d2+22, 8, 4);
  175.  FillEllipse(pozx_d2+7,pozy_d2+23, 8, 4);
  176.  FillEllipse(pozx_d2+8,pozy_d2+25, 8, 4);
  177.  FillEllipse(pozx_d2+5,pozy_d2+28, 8, 4);
  178.  FillEllipse(pozx_d2-6,pozy_d2+25, 8, 4);
  179.  FillEllipse(pozx_d2-4,pozy_d2+28, 8, 4);
  180.  FillEllipse(pozx_d2-3,pozy_d2+30, 8, 4);
  181.  FillEllipse(pozx_d2+3,pozy_d2+30, 8, 4);
  182.  SetFillStyle(1,brown);
  183.  SetColor(brown);
  184.  Rectangle(pozx_d2-2,pozy_d2+34,pozx_d2+2,pozy_d2+45);
  185.  {floodfill(pozx_d2,pozy_d2+40,brown);}
  186. end;
  187.  
  188. procedure mapa(ktoraMapa:byte);
  189. begin
  190.  case ktoraMapa of
  191.   1: begin {elipsa}
  192.       ellipse(300,240,0,360,180,220);
  193.       ellipse(300,240,0,360,100,120);
  194.       setfillstyle(1,green);
  195.       floodfill(320,240,white);
  196.       floodfill(1,1,white);
  197.       line(120,240,200,240);
  198.      end;
  199.   2: begin {kffiatek}
  200.       setcolor(white);
  201.       ellipse(320,240,30,150,70,220);
  202.       ellipse(320,240,210,330,70,220);
  203.  
  204.       ellipse(320,240,45,135,30,140);
  205.       ellipse(320,240,225,315,30,140);
  206.  
  207.       ellipse(320,240,0,60,220,70);
  208.       ellipse(320,240,300,360,220,70);
  209.       ellipse(320,240,120,240,220,70);
  210.  
  211.       ellipse(320,240,0,45,140,30);
  212.       ellipse(320,240,315,360,140,30);
  213.       ellipse(320,240,135,225,140,30);
  214.  
  215.       ellipse(200,120,277,353,101,101);
  216.       ellipse(200,120,275,355,60,60);
  217.  
  218.       ellipse(440,120,187,263,101,101);
  219.       ellipse(440,120,185,265,60,60);
  220.  
  221.       ellipse(200,360,7,83,101,101);
  222.       ellipse(200,360,5,85,60,60);
  223.  
  224.       ellipse(440,360,97,173,101,101);
  225.       ellipse(440,360,95,175,60,60);
  226.  
  227.       setfillstyle(1,green);
  228.       floodfill(320,240,white);
  229.       floodfill(1,240,white);
  230.  
  231.       setlinestyle(dashedln,0,3);
  232.  
  233.       {for fora:=1 to 15 do
  234.       begin
  235.        setcolor(white);
  236.        ellipse(320,240,45+fora,135+fora+2,30,140);
  237.        setcolor(red);
  238.        ellipse(320,240,45+fora+3,135+fora+6,30,140);
  239.       end;                            }
  240.       setlinestyle(0,0,1);
  241.  
  242.      end;
  243.  end;
  244. end;
  245.  
  246. {***KONIEC GRAFIKI***}
  247.  
  248. procedure mozliwe(s,t : integer;wypCzys : byte);
  249. var i,j : byte;
  250. begin i:=0;
  251. s:=tab[gr].posx-tab[gr].x-9;
  252. REPEAT
  253. i:=i+1;j:=0;t:=tab[gr].posy-tab[gr].y-9;
  254.        REPEAT
  255.        j:=j+1;
  256.        if wypCzys=1 then begin {przed ruchem}
  257.        tab[gr].tabKrop[i,j].x:=s;
  258.        tab[gr].tabKrop[i,j].y:=t;
  259.        tab[gr].tabKrop[i,j].koloKrop:=getpixel(s,t);
  260.        putpixel(s,t,12); {po ruchu}
  261.        end ELSE putpixel(tab[gr].tabKrop[i,j].x,tab[gr].tabKrop[i,j].y,tab[gr].tabKrop[i,j].koloKrop);
  262.        t:=t+9;
  263.        UNTIL j=3;
  264. s:=s+9;
  265. UNTIL i=3;
  266. end;
  267. {*** sekcja menu ***}
  268. procedure wysAktMenu(wybor,ktoreMenu : byte); {do wyswietlania menu}
  269. var i,j : byte;
  270. begin
  271. j:=3;
  272. for i:=1 to dlT do begin
  273.    setColor(white);
  274.        if wybor=i then begin
  275.           setColor(red);
  276.        end;
  277.        outTextXY((getmaxx-length(tabMenuT[i,ktoreMenu])) div 2+(ktoreMenu-1)*odstTex,getmaxy div 2-j*10,tabMenuT[i,ktoreMenu]);
  278.        j:=j-1;
  279.    end;
  280. end;
  281. procedure menuTablica; {optymalizacja, zeby rekurencyjnie}
  282. begin                  {nie nadpisywal tablicy pare raz}
  283.  {glowneMenu}
  284.  tabMenuT[1,1]:='Start';
  285.  tabMenuT[2,1]:='Opcje';
  286.  tabMenuT[3,1]:='About';
  287.  tabMenuT[4,1]:='Koniec';
  288.  {podMenu}
  289.  tabMenuT[1,2]:='1 gracz';
  290.  tabMenuT[2,2]:='2 graczy';
  291.  tabMenuT[3,2]:='3 graczy';
  292.  tabMenuT[4,2]:='4 graczy';
  293. end;
  294. procedure menu(menuPod : byte); {interakcja z uzytkownikiem (tyko zmiana wartosci)}
  295. var wyborMenu : char;wyborLicz : shortint;wyborLicz1,wyborLicz2,przed1,przed2,i,j : byte;
  296. {tabMenuT : array [1..3] of string;}
  297. begin
  298.  wyborLicz:=1;
  299.  wysAktMenu(1,menuPod);
  300.  REPEAT
  301.  wyborMenu:=readkey;
  302.  case wyborMenu of
  303.   'w','W':begin wyborLicz:=wyborLicz-1; end;
  304.   's','S':begin wyborLicz:=wyborLicz+1; end;
  305.   'a','A':begin menuPod:=menuPod-1;
  306.   if menuPod=0 then menuPod:=1;
  307.   cleardevice;
  308.   for i:=1 to menuPod do begin wysAktMenu(1,i);end;menu(menuPod);break;end;
  309.   end;
  310.  if wyborLicz=0 then wyborLicz:=4;
  311.  if wyborLicz=5 then wyborLicz:=1;
  312.  case menuPod of
  313.   1:begin wyborLicz1:=wyborLicz; end;{glowne}
  314.   2:begin wyborLicz2:=wyborLicz; end;
  315.  end;
  316.  wysAktMenu(wyborLicz,menuPod);
  317.  UNTIL (wyborMenu=#13)OR(wyborMenu='a')OR(wyborMenu='D')OR(wyborMenu='d');
  318. if menuPod = 1 then begin
  319.  if wyborLicz1 = 1 then begin cleardevice;{mapa(2);}end;
  320.  if wyborLicz1 = 2 then begin menu(2);end;
  321.  if wyborLicz1 = 3 then begin outtextxy(1,1,'Autorzy');readkey;cleardevice;end;
  322.  if wyborLicz1 = 4 then halt;
  323. end;
  324. if menuPod = 2 then begin
  325.  if wyborLicz2 = 1 then ilGr:=1;
  326.  if wyborLicz2 = 2 then ilGr:=2;
  327.  if wyborLicz2 = 3 then ilGr:=3;
  328.  if wyborlicz2 = 4 then ilGr:=4;
  329.  menuPod:=menuPod-1;
  330.  cleardevice;
  331.  menu(menuPod);
  332. end;
  333. end;
  334. {/ menu}
  335.  
  336. {procedure sprawdzcp(tmp1:byte);    sprawdza checkpointy
  337. var tmp1:byte;
  338. begin
  339.  
  340.  
  341. end;  }
  342.  
  343. {***GLOWNY BEGIN***}
  344.  
  345. begin
  346.  ster:=VGA;  tryb:=VGAHi; gr:=1;
  347.  InitGraph(ster, tryb, 'd:\bgi'); {c:\tp\bgi}
  348.  ilGr:=2;
  349.  reset:
  350.  {pasek;readkey;}{pasek ladowania - mozna rypnac intro}
  351.  menuTablica;menu(1);
  352.  tab[1].posx:=170; tab[1].posy:=240;
  353.  tab[2].posx:=150; tab[2].posy:=240;   {pozycja startowa}
  354.  tab[3].posx:=130; tab[3].posy:=240;
  355.  tab[4].posx:=110; tab[4].posy:=240;
  356.  mapa(1);
  357.  gr:=1;
  358.  olej_1(pozx_o,pozy_o); beczka(pozx_b,pozy_b);
  359.  drzewo_1(pozx_d,pozy_d);drzewo_2(pozx_d2,pozy_d2);
  360.  
  361.  {bar(460,180,540,300);
  362.  bar(100,180,180,300);      pozycje cp
  363.  bar(260,380,380,460);
  364.  bar(260,20,380,100);      }
  365.  
  366.  REPEAT
  367.   mozliwe(tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y,1); {rysuj kropki}
  368.   a:=readkey;
  369.   case a of
  370.    'q','Q':begin tab[gr].y:=tab[gr].y+10; tab[gr].x:=tab[gr].x+10; end;
  371.    'w','W':begin tab[gr].y:=tab[gr].y+10; end;
  372.    'e','E':begin tab[gr].y:=tab[gr].y+10; tab[gr].x:=tab[gr].x-10; end;
  373.    'a','A':begin tab[gr].x:=tab[gr].x+10; end;
  374.    's','S':begin tab[gr].y:=tab[gr].y+0; tab[gr].x:=tab[gr].x+0; end;
  375.    'd','D':begin tab[gr].x:=tab[gr].x-10; end;
  376.    'z','Z':begin tab[gr].y:=tab[gr].y-10; tab[gr].x:=tab[gr].x+10; end;
  377.    'x','X':begin tab[gr].y:=tab[gr].y-10; end;
  378.    'c','C':begin tab[gr].y:=tab[gr].y-10; tab[gr].x:=tab[gr].x-10; end;
  379.    'l':begin cleardevice; goto reset; end;
  380.   end;
  381.  
  382.   if getpixel(tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y)=green then flaga:=1;
  383.   if gr=1 then setcolor(white);
  384.   if gr=2 then setcolor(yellow);
  385.   if gr=3 then setcolor(red);
  386.   if gr=4 then setcolor(lightgreen);
  387.  
  388.   setlinestyle(dottedln,0,1);
  389.   line(tab[gr].posx,tab[gr].posy,tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y);
  390.   tab[gr].posx:=tab[gr].posx-tab[gr].x;
  391.   tab[gr].posy:=tab[gr].posy-tab[gr].y;
  392.  
  393.   if flaga=1 then   {wjazd na pobocze}
  394.   begin
  395.    tab[gr].x:=0;
  396.    tab[gr].y:=0;
  397.    flaga:=0;
  398.   end;
  399.   if tab[gr].x>tab[gr].y then tab[gr].spd:=tab[gr].x else tab[gr].spd:=tab[gr].y; {szybkosc}
  400.  
  401.   setlinestyle(0,0,1);
  402.   circle(tab[gr].posx,tab[gr].posy,3);
  403.   {sprawdzcp;   }
  404.   mozliwe(tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y,2);
  405.   gr:=gr+1;
  406.   if gr=ilgr+1 then gr:=1;
  407.  
  408.  UNTIL (a='b') or (a='B');
  409.  
  410. closegraph;
  411. end.
  412.  
  413. {do zrobienia:
  414. - krawezniki bialo-czerwone
  415. - intro
  416. - menu dokonczyc GRAFIKA, ABOUT
  417. - checkpointy
  418. - hud (w rogu, spd, ilosc ruchow, czyj ruch ^^) }
Advertisement
Add Comment
Please, Sign In to add comment