Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program grafika;
- uses graph,crt;
- type
- podKropki = record
- x,y : integer;
- koloKrop : integer;
- end;
- all = record
- x,y,posx,posy,spd,cp1,cp2,cp3,cp4: integer;
- tabKrop : array [1..3,1..3] of podKropki;
- end;
- var
- ster,tryb:integer;
- a:char;
- tab:array[1..4] of all;
- flaga,fora:integer;
- s,t:integer;
- tmp,licz : integer;
- gr,ilgr: byte;
- label reset;
- const
- odstTex = 55; {odstep w poziomie miedzy menu i podmenu}
- dlT = 4;
- pozx_b = 100;
- pozy_b = 100; {wywalic}
- pozx_o = 300;
- pozy_o = 100;
- pozx_d = 500;
- pozy_d = 100;
- pozx_d2 = 300;
- pozy_d2 = 300;
- var
- tabMenuT : array [1..dlT,1..2] of string; {menuowska tablica}
- {intro}
- function obetnij(lancuch:string;aktProc:real):string;
- var c : byte;wyn : string;
- begin
- wyn:='';
- for c:=1 to 4 do begin
- if lancuch[c]<>'.' then wyn:=wyn+lancuch[c];
- end;if aktProc<10 then wyn:=lancuch[1]+lancuch[2];if aktProc=100 then wyn:=wyn+'0';
- wyn:=wyn+'%';
- obetnij:=wyn;
- end;
- procedure pasek;
- var
- proc : real;dx:integer;st : string;bylEnter : byte;
- begin
- dx:=0;bylEnter:=0;
- REPEAT
- setlinestyle(1,1,3);setfillstyle(9,blue);
- bar3d((getmaxx-500)div 2,getmaxy div 2,(getmaxx-500)div 2+dx,getmaxy div 2-50,10,true);
- dx:=dx+1;
- proc:=(dx/500*100);
- str(proc,st);
- setlinestyle(0,1,1);bar((getmaxx+4) div 2,getmaxy div 2-25,(getmaxx+55) div 2,getmaxy div 2-17);
- outTextxy((getmaxx-3) div 2,(getmaxy-50) div 2,obetnij(st,proc));
- delay(5);
- if keypressed then bylEnter:=1;
- UNTIL (dx=500)OR(keypressed);
- if bylEnter=0 then delay(3000);cleardevice;
- end;
- {/ intro}
- {***GRAFIKA***}
- procedure beczka(pozx_b,pozy_b:integer);
- begin
- SetColor(yellow);
- SetFillStyle(1,red);
- FillEllipse(pozx_b,pozy_b, 5, 3);
- Line(pozx_b-5,pozy_b,pozx_b-5,pozy_b+8);
- Line(pozx_b+5,pozy_b,pozx_b+5,pozy_b+8);
- FillEllipse(pozx_b,pozy_b+8, 5, 3);
- SetColor(red);
- Line(pozx_b-4,pozy_b+2,pozx_b-4,pozy_b+9);
- Line(pozx_b-3,pozy_b+3,pozx_b-3,pozy_b+9);
- Line(pozx_b-2,pozy_b+4,pozx_b-2,pozy_b+9);
- Line(pozx_b-1,pozy_b+4,pozx_b-1,pozy_b+9);
- Line(pozx_b,pozy_b+4,pozx_b,pozy_b+9);
- Line(pozx_b+1,pozy_b+4,pozx_b+1,pozy_b+9);
- Line(pozx_b+2,pozy_b+4,pozx_b+2,pozy_b+9);
- Line(pozx_b+3,pozy_b+3,pozx_b+3,pozy_b+9);
- Line(pozx_b+4,pozy_b+2,pozx_b+4,pozy_b+9);
- PutPixel(pozx_b,pozy_b+9,LightRed);
- PutPixel(pozx_b-1,pozy_b+9,LightRed);
- PutPixel(pozx_b-2,pozy_b+9,LightRed);
- PutPixel(pozx_b-3,pozy_b+8,LightRed);
- PutPixel(pozx_b-4,pozy_b+7,LightRed);
- PutPixel(pozx_b+1,pozy_b+9,LightRed);
- PutPixel(pozx_b+2,pozy_b+9,LightRed);
- PutPixel(pozx_b+3,pozy_b+8,LightRed);
- PutPixel(pozx_b+4,pozy_b+7,LightRed);
- PutPixel(pozx_b,pozy_b+8,LightRed);
- PutPixel(pozx_b-1,pozy_b+8,LightRed);
- PutPixel(pozx_b-2,pozy_b+8,LightRed);
- PutPixel(pozx_b-3,pozy_b+7,LightRed);
- PutPixel(pozx_b-4,pozy_b+6,LightRed);
- PutPixel(pozx_b+1,pozy_b+8,LightRed);
- PutPixel(pozx_b+2,pozy_b+8,LightRed);
- PutPixel(pozx_b+3,pozy_b+7,LightRed);
- PutPixel(pozx_b+4,pozy_b+6,LightRed);
- PutPixel(pozx_b+2,pozy_b,255);
- {PutPixel(pozx_b+2,pozy_b-1,black); }
- PutPixel(pozx_b+1,pozy_b-1,255);
- PutPixel(pozx_b+1,pozy_b,255);
- end;
- procedure odblask(pozx_o,pozy_o:integer);
- begin
- PutPixel(pozx_o-2+licz,pozy_o-2+licz,lightgray);
- PutPixel(pozx_o-3+licz,pozy_o-1+licz,lightgray);
- PutPixel(pozx_o-4+licz,pozy_o-1+licz,lightgray);
- PutPixel(pozx_o-5+licz,pozy_o-1+licz,lightgray);
- end;
- procedure olej_1(pozx_o,pozy_o:integer);
- begin randomize;
- SetColor(blue);
- SetFillStyle(1,blue);
- FillEllipse(pozx_o,pozy_o, 5, 3);
- for tmp:=1 to 10 do
- begin
- FillEllipse(pozx_o+(random(15)),pozy_o+(random(15)), 5, 3);
- end;
- for tmp:=1 to 3 do
- begin
- licz:=licz+random(8);
- odblask(pozx_o,pozy_o);
- end;
- end;
- procedure drzewo_1(pozx_d,pozy_d:integer);
- begin
- SetColor(yellow);
- Line(pozx_d,pozy_d+6,pozx_d+10,pozy_d+16);
- Line(pozx_d,pozy_d+6,pozx_d-10,pozy_d+16);
- Line(pozx_d+10,pozy_d+16,pozx_d-10,pozy_d+16);
- {floodfill(pozx_d,pozy_d+8,green);}
- Line(pozx_d,pozy_d+16,pozx_d+12,pozy_d+26);
- Line(pozx_d,pozy_d+16,pozx_d-12,pozy_d+26);
- Line(pozx_d-12,pozy_d+26,pozx_d+12,pozy_d+26);
- Line(pozx_d,pozy_d+26,pozx_d+16,pozy_d+36);
- Line(pozx_d,pozy_d+26,pozx_d-16,pozy_d+36);
- Line(pozx_d-16,pozy_d+36,pozx_d+16,pozy_d+36);
- Rectangle(pozx_d-2,pozy_d+36,pozx_d+2,pozy_d+44);
- SetFillStyle(1,brown);
- {floodfill(pozx_d,pozy_d+40,brown);}
- end;
- procedure drzewo_2(pozx_d,pozy_d:integer);
- begin
- SetColor(green);
- SetFillStyle(6{6},green);
- FillEllipse(pozx_d2,pozy_d2, 8, 4);
- FillEllipse(pozx_d2-4,pozy_d2+2, 8, 4);
- FillEllipse(pozx_d2+4,pozy_d2+2, 8, 4);
- FillEllipse(pozx_d2,pozy_d2+4, 8, 4);
- FillEllipse(pozx_d2-6,pozy_d2+5, 8, 4);
- FillEllipse(pozx_d2+6,pozy_d2+6, 8, 4);
- FillEllipse(pozx_d2-8,pozy_d2+10, 8, 4);
- FillEllipse(pozx_d2+9,pozy_d2+10, 8, 4);
- FillEllipse(pozx_d2,pozy_d2+13, 8, 4);
- FillEllipse(pozx_d2+9,pozy_d2+18, 8, 4);
- FillEllipse(pozx_d2-9,pozy_d2+17, 8, 4);
- FillEllipse(pozx_d2-2,pozy_d2+17, 8, 4);
- FillEllipse(pozx_d2-7,pozy_d2+22, 8, 4);
- FillEllipse(pozx_d2+7,pozy_d2+23, 8, 4);
- FillEllipse(pozx_d2+8,pozy_d2+25, 8, 4);
- FillEllipse(pozx_d2+5,pozy_d2+28, 8, 4);
- FillEllipse(pozx_d2-6,pozy_d2+25, 8, 4);
- FillEllipse(pozx_d2-4,pozy_d2+28, 8, 4);
- FillEllipse(pozx_d2-3,pozy_d2+30, 8, 4);
- FillEllipse(pozx_d2+3,pozy_d2+30, 8, 4);
- SetFillStyle(1,brown);
- SetColor(brown);
- Rectangle(pozx_d2-2,pozy_d2+34,pozx_d2+2,pozy_d2+45);
- {floodfill(pozx_d2,pozy_d2+40,brown);}
- end;
- procedure mapa(ktoraMapa:byte);
- begin
- case ktoraMapa of
- 1: begin {elipsa}
- ellipse(300,240,0,360,180,220);
- ellipse(300,240,0,360,100,120);
- setfillstyle(1,green);
- floodfill(320,240,white);
- floodfill(1,1,white);
- line(120,240,200,240);
- end;
- 2: begin {kffiatek}
- setcolor(white);
- ellipse(320,240,30,150,70,220);
- ellipse(320,240,210,330,70,220);
- ellipse(320,240,45,135,30,140);
- ellipse(320,240,225,315,30,140);
- ellipse(320,240,0,60,220,70);
- ellipse(320,240,300,360,220,70);
- ellipse(320,240,120,240,220,70);
- ellipse(320,240,0,45,140,30);
- ellipse(320,240,315,360,140,30);
- ellipse(320,240,135,225,140,30);
- ellipse(200,120,277,353,101,101);
- ellipse(200,120,275,355,60,60);
- ellipse(440,120,187,263,101,101);
- ellipse(440,120,185,265,60,60);
- ellipse(200,360,7,83,101,101);
- ellipse(200,360,5,85,60,60);
- ellipse(440,360,97,173,101,101);
- ellipse(440,360,95,175,60,60);
- setfillstyle(1,green);
- floodfill(320,240,white);
- floodfill(1,240,white);
- setlinestyle(dashedln,0,3);
- {for fora:=1 to 15 do
- begin
- setcolor(white);
- ellipse(320,240,45+fora,135+fora+2,30,140);
- setcolor(red);
- ellipse(320,240,45+fora+3,135+fora+6,30,140);
- end; }
- setlinestyle(0,0,1);
- end;
- end;
- end;
- {***KONIEC GRAFIKI***}
- procedure mozliwe(s,t : integer;wypCzys : byte);
- var i,j : byte;
- begin i:=0;
- s:=tab[gr].posx-tab[gr].x-9;
- REPEAT
- i:=i+1;j:=0;t:=tab[gr].posy-tab[gr].y-9;
- REPEAT
- j:=j+1;
- if wypCzys=1 then begin {przed ruchem}
- tab[gr].tabKrop[i,j].x:=s;
- tab[gr].tabKrop[i,j].y:=t;
- tab[gr].tabKrop[i,j].koloKrop:=getpixel(s,t);
- putpixel(s,t,12); {po ruchu}
- end ELSE putpixel(tab[gr].tabKrop[i,j].x,tab[gr].tabKrop[i,j].y,tab[gr].tabKrop[i,j].koloKrop);
- t:=t+9;
- UNTIL j=3;
- s:=s+9;
- UNTIL i=3;
- end;
- {*** sekcja menu ***}
- procedure wysAktMenu(wybor,ktoreMenu : byte); {do wyswietlania menu}
- var i,j : byte;
- begin
- j:=3;
- for i:=1 to dlT do begin
- setColor(white);
- if wybor=i then begin
- setColor(red);
- end;
- outTextXY((getmaxx-length(tabMenuT[i,ktoreMenu])) div 2+(ktoreMenu-1)*odstTex,getmaxy div 2-j*10,tabMenuT[i,ktoreMenu]);
- j:=j-1;
- end;
- end;
- procedure menuTablica; {optymalizacja, zeby rekurencyjnie}
- begin {nie nadpisywal tablicy pare raz}
- {glowneMenu}
- tabMenuT[1,1]:='Start';
- tabMenuT[2,1]:='Opcje';
- tabMenuT[3,1]:='About';
- tabMenuT[4,1]:='Koniec';
- {podMenu}
- tabMenuT[1,2]:='1 gracz';
- tabMenuT[2,2]:='2 graczy';
- tabMenuT[3,2]:='3 graczy';
- tabMenuT[4,2]:='4 graczy';
- end;
- procedure menu(menuPod : byte); {interakcja z uzytkownikiem (tyko zmiana wartosci)}
- var wyborMenu : char;wyborLicz : shortint;wyborLicz1,wyborLicz2,przed1,przed2,i,j : byte;
- {tabMenuT : array [1..3] of string;}
- begin
- wyborLicz:=1;
- wysAktMenu(1,menuPod);
- REPEAT
- wyborMenu:=readkey;
- case wyborMenu of
- 'w','W':begin wyborLicz:=wyborLicz-1; end;
- 's','S':begin wyborLicz:=wyborLicz+1; end;
- 'a','A':begin menuPod:=menuPod-1;
- if menuPod=0 then menuPod:=1;
- cleardevice;
- for i:=1 to menuPod do begin wysAktMenu(1,i);end;menu(menuPod);break;end;
- end;
- if wyborLicz=0 then wyborLicz:=4;
- if wyborLicz=5 then wyborLicz:=1;
- case menuPod of
- 1:begin wyborLicz1:=wyborLicz; end;{glowne}
- 2:begin wyborLicz2:=wyborLicz; end;
- end;
- wysAktMenu(wyborLicz,menuPod);
- UNTIL (wyborMenu=#13)OR(wyborMenu='a')OR(wyborMenu='D')OR(wyborMenu='d');
- if menuPod = 1 then begin
- if wyborLicz1 = 1 then begin cleardevice;{mapa(2);}end;
- if wyborLicz1 = 2 then begin menu(2);end;
- if wyborLicz1 = 3 then begin outtextxy(1,1,'Autorzy');readkey;cleardevice;end;
- if wyborLicz1 = 4 then halt;
- end;
- if menuPod = 2 then begin
- if wyborLicz2 = 1 then ilGr:=1;
- if wyborLicz2 = 2 then ilGr:=2;
- if wyborLicz2 = 3 then ilGr:=3;
- if wyborlicz2 = 4 then ilGr:=4;
- menuPod:=menuPod-1;
- cleardevice;
- menu(menuPod);
- end;
- end;
- {/ menu}
- {procedure sprawdzcp(tmp1:byte); sprawdza checkpointy
- var tmp1:byte;
- begin
- end; }
- {***GLOWNY BEGIN***}
- begin
- ster:=VGA; tryb:=VGAHi; gr:=1;
- InitGraph(ster, tryb, 'd:\bgi'); {c:\tp\bgi}
- ilGr:=2;
- reset:
- {pasek;readkey;}{pasek ladowania - mozna rypnac intro}
- menuTablica;menu(1);
- tab[1].posx:=170; tab[1].posy:=240;
- tab[2].posx:=150; tab[2].posy:=240; {pozycja startowa}
- tab[3].posx:=130; tab[3].posy:=240;
- tab[4].posx:=110; tab[4].posy:=240;
- mapa(1);
- gr:=1;
- olej_1(pozx_o,pozy_o); beczka(pozx_b,pozy_b);
- drzewo_1(pozx_d,pozy_d);drzewo_2(pozx_d2,pozy_d2);
- {bar(460,180,540,300);
- bar(100,180,180,300); pozycje cp
- bar(260,380,380,460);
- bar(260,20,380,100); }
- REPEAT
- mozliwe(tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y,1); {rysuj kropki}
- a:=readkey;
- case a of
- 'q','Q':begin tab[gr].y:=tab[gr].y+10; tab[gr].x:=tab[gr].x+10; end;
- 'w','W':begin tab[gr].y:=tab[gr].y+10; end;
- 'e','E':begin tab[gr].y:=tab[gr].y+10; tab[gr].x:=tab[gr].x-10; end;
- 'a','A':begin tab[gr].x:=tab[gr].x+10; end;
- 's','S':begin tab[gr].y:=tab[gr].y+0; tab[gr].x:=tab[gr].x+0; end;
- 'd','D':begin tab[gr].x:=tab[gr].x-10; end;
- 'z','Z':begin tab[gr].y:=tab[gr].y-10; tab[gr].x:=tab[gr].x+10; end;
- 'x','X':begin tab[gr].y:=tab[gr].y-10; end;
- 'c','C':begin tab[gr].y:=tab[gr].y-10; tab[gr].x:=tab[gr].x-10; end;
- 'l':begin cleardevice; goto reset; end;
- end;
- if getpixel(tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y)=green then flaga:=1;
- if gr=1 then setcolor(white);
- if gr=2 then setcolor(yellow);
- if gr=3 then setcolor(red);
- if gr=4 then setcolor(lightgreen);
- setlinestyle(dottedln,0,1);
- line(tab[gr].posx,tab[gr].posy,tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y);
- tab[gr].posx:=tab[gr].posx-tab[gr].x;
- tab[gr].posy:=tab[gr].posy-tab[gr].y;
- if flaga=1 then {wjazd na pobocze}
- begin
- tab[gr].x:=0;
- tab[gr].y:=0;
- flaga:=0;
- end;
- if tab[gr].x>tab[gr].y then tab[gr].spd:=tab[gr].x else tab[gr].spd:=tab[gr].y; {szybkosc}
- setlinestyle(0,0,1);
- circle(tab[gr].posx,tab[gr].posy,3);
- {sprawdzcp; }
- mozliwe(tab[gr].posx-tab[gr].x,tab[gr].posy-tab[gr].y,2);
- gr:=gr+1;
- if gr=ilgr+1 then gr:=1;
- UNTIL (a='b') or (a='B');
- closegraph;
- end.
- {do zrobienia:
- - krawezniki bialo-czerwone
- - intro
- - menu dokonczyc GRAFIKA, ABOUT
- - checkpointy
- - hud (w rogu, spd, ilosc ruchow, czyj ruch ^^) }
Advertisement
Add Comment
Please, Sign In to add comment