Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Zespół Szkół Ogólnokształcących w Bobowej

Potrafimy już przemieszczać obiekty po ekranie monitora. Co prawda są to kwadraty, ale nic nie stoi na przeszkodzie, aby napisać odpowiednie procedury i zamienić kwadraty na statki kosmiczne. Potrafimy sprawdzić, kiedy znajdą się w odpowiednim punkcie ekranu (zderzą się z innym obiektem). Jeśli dołożymy jeszcze umiejętność reagowania na wciskane klawisze, będziemy mogli pisać prawdziwe gry komputerowe!

Informacja o wciskanych klawiszach przechowywana jest w tzw. "buforze klawiatury". System pobiera je kolejno i wykonuje polecenia. Jeśli zbyt "znęcałeś" się nad klawiaturą, być może zdarzyło się, że usłyszałeś charakterystyczne piski. To znak, że bufor klawiatury się przepełnił - program nie jest w stanie tak szybko wykonać operacji

POBIERZ CAŁĄ LEKCJĘ

ANIM05.PAS

uses crt,graph;{kwadratowa pilka o dlogosci sciany i kolorze}procedure pilka(x,y,bx,by,kolor:integer);begin  setcolor(kolor);  moveto(x,y);  linerel(0,by);  linerel(bx,0);  linerel(0,-by);  linerel(-bx,0);end;var  d,m:integer;  x,y,bx,by,kp:integer; {dane pilki}  koniec:boolean;      {kiedy koniec gierki}  znak:char;           {jaki znak na klawiaturze}begin  d:=detect;  initgraph(d,m,'');  {wspolrzedne pilki}  x:=0;  y:=0;  bx:=50;  by:=50;  kp:=13;  koniec:=false;  repeat    pilka(x,y,bx,by,kp);	{rysowanie}    delay(10);		        {wstrzymanie}    pilka(x,y,bx,by,0);		{wymazanie}    if keypressed then		{sprawdzanie klawiatury-gdy nacisnieto jakis klawisz}    begin      znak:=readkey;		{odczytanie klawisza-kod klawisza w zmiennen znak}      {gdy to byl kod kursora to czytamy kolejny znak bo pierwszy ma kod 0}      if znak=#0 then znak:=readkey;      case znak of       'H': y:=y-5;		{kod kursora gora}       'P': y:=y+5;		{kod kursora dol}       'M': x:=x+5;		{kod kursora w lewo}       'K': x:=x-5;		{kod kursora w prawo}       's': if by>2 then              begin                bx:=bx+1;                by:=by-1;              end;       'a': if bx>2 then              begin                bx:=bx-1;                by:=by+1;              end;       #27:koniec:=true;	{kod klawisza ESC}      end;      while keypressed do znak:=readkey;	{czyść bufor klawiatury zeby nie piszczalo}    end;  until koniec;			{koniec pętli, gdy naciśniemy klawisz ESC}  closegraph;end.

*************************************************************************************

ANIM06.PAS

{odbijanie kwadratu}program grafika14;uses crt,graph;var  dx,dy,	x,y,	bok,	kolor:integer;  Ry:integer;  koniec:boolean;  znak:char;procedure Kwadrat(x,y,bok,kolor:integer);begin	SetColor(kolor);  MoveTo(x,y);  LineRel(0,bok);  LineRel(bok,0);  LineRel(0,-bok);  LineRel(-bok,0);end;procedure Rakietka(x,y,bx,by,kolor:integer);begin	SetColor(kolor);  MoveTo(x,y);  LineRel(0,by);  LineRel(bx,0);  LineRel(0,-by);  LineRel(-bx,0);end;var d,m:integer;begin  d:=detect;  initgraph(d,m,'');  readln;  x:=0;  y:=0;  bok:=60;  kolor:=12;  dx:=1;  dy:=1;  Ry:=200;  koniec:=false;  repeat    Kwadrat(x,y,bok,kolor);    Rakietka(600,Ry,5,120,14);    delay(5);    Kwadrat(x,y,bok,0);    Rakietka(600,Ry,5,120,0);    x:=x+dx;    y:=y+dy;    if keypressed then    begin      znak:=readkey;      if znak=#0 then znak:=readkey;      case znak of       'H': if Ry>5 then Ry:=Ry-5;       'P': if Ry<480-120-5 then Ry:=Ry+5;       #27:koniec:=true;      end;      while keypressed do znak:=readkey;	{czyść bufor klawiatury zeby nie piszczalo}    end;    if x>640 then koniec:=true;    if (x+bok>=600) and ((y+bok>Ry) and (y (480-bok)) or (y < 0) then dy:=-dy;  until koniec;  closegraph;end.

****************************************************************************************

LABIRYNT - doprowadźdrat do prawego dolnego rogu
sterowanie: KURSORY
zmiana wielkości: asdw
koniec: ESC

{można przesuwać kwadrat można zmieniać jego wymiary losowo generowane są przeszkody sprawdzanie wejścia na przeszkodę sprawdzanie końca gry}program gra;uses crt,graph;{prostokatna pilka o dlugosci sciany i kolorze}procedure pilka(x,y,dx,dy,kolor:integer);begin  setcolor(kolor);  line(x,y,x+dx,y);  line(x+dx,y,x+dx,y+dy);  line(x+dx,y+dy,x,y+dy);  line(x,y+dy,x,y);end;{losowane rysowanie przeszkód}procedure losowanie(ax,ay,ile:integer);var  i,x,y,dx,dy:integer;begin  for i:=1 to ile do  begin    x:=random(640);    y:=random(480);    dx:=random(ax);    dy:=random(ay);    {żeby nic nie narysowało w rogach}    if not(((x620-ax) and (y>460-ay)))	then pilka(x,y,dx,dy,14);  end;end;{sygnał dzwiękowy}procedure beep;var i:integer;begin  Sound(150);  Delay(1000);  NoSound;end;var d,m:integer;  i,ile,                      	{ilość prpstokątów}  xp,yp,dxp,dyp,kp:integer; 	{dane pilki}  dotyka,			{sprawdzanie czy kwadrat dotyka przeszkód}  koniec:boolean;      {kiedy koniec gierki}  znak:char;           {jaki znak na klawiaturze}{początek programu}begin  d:=detect;  initgraph(d,m,'');  {randomize;}  {wspolrzedne pilki}  xp:=0;  yp:=0;  dxp:=50;  dyp:=50;  kp:=13;  ile:=100;  losowanie(dxp,dyp,ile);  koniec:=false;  repeat    {rysowanie}    pilka(xp,yp,dxp,dyp,kp);    {wstrzymanie}    delay(10);    {wymazanie}    pilka(xp,yp,dxp,dyp,0);    {sprawdzanie klawiatury-gdy nacisnieto jakis klawisz}    if keypressed then    begin      {odczytanie klawisza-kod klawisza w zmiennen znak}	znak:=readkey;      {gdy to byl kod kursora to czytamy kolejny znak bo pierwszy ma kod 0}  	if znak=#0 then znak:=readkey;	case znak of	       'H':if yp>1 then yp:=yp-1;{kod kursora gora}       		'P':if yp<479-dyp then yp:=yp+1;{kod kursora dol}       		'M':if xp<639-dxp then xp:=xp+1;{kod kursora w prawo}       		'K':if xp>1 then xp:=xp-1;{kod kursora w lewo}       		#27:koniec:=true;{kod klawisza ESC}       		'd','w':if dyp>5 then				 begin				   dxp:=dxp+1;				   dyp:=dyp-1				 end;		{szer+ wys-}	       'a','s':if dxp>5 then				begin			 	  dxp:=dxp-1;				  dyp:=dyp+1				end;		{szer- wys+}      	end;	{case}      {oczyszczamy bufor klawiatury zeby nie piszczalo}   	while keypressed do znak:=readkey;    end;	{badanie klawiatury}    {gdy dotknie przeszkody to koniec}    dotyka:=false;    {sprzadzamy wszystkie piksele kwadratu czy nie wlazło na piksela o kolorze 14}    for i:=xp to xp+dxp do    begin	if getpixel(i,yp)=14 then dotyka:=true;    	if getpixel(i,yp+dyp)=14 then dotyka:=true;    end;    for i:=yp to yp+dyp do    begin  	if getpixel(xp,i)=14 then dotyka:=true;    	if getpixel(xp+dxp,i)=14 then dotyka:=true;    end;    if dotyka then {a tu koniec gdy dotyka}	begin beep; koniec:=true end;    {gdy dojdzie do prawego dolnego roku to koniec}    if (xp+dxp=639) and (yp+dyp=479) then    begin beep;	koniec:=true end;  until koniec;  closegraph;end.{koniec pogramu}

***************************************************************************************

PINGPONG - odbijaj i zastrzel
sterowanie rakietą: KURSORY
strzelanie: SPACJA
koniec: ESC

{strzelamy do kwadratowej piłki z trójkątnej armaty}program gierka1;uses crt,graph;{trójkątna armata}procedure armata(x,y,bok,kolor:integer);begin  setcolor(kolor);  moveto(x,y);  lineRel(0,bok);  linerel(-bok,-bok div 2);  linerel(bok, -bok div 2);end;{kwadratowa piłka}procedure pilka(x,y,dlugosc,kolor:integer);begin  setcolor(kolor);  line(x,y,x+dlugosc,y);  line(x+dlugosc,y,x+dlugosc,y+dlugosc);  line(x+dlugosc,y+dlugosc,x,y+dlugosc);  line(x,y+dlugosc,x,y);end;var d,m:integer;  xs,ys,ds,ks,      {dane poruszającego się pocisku}  kxs,              {szybkość pocisku}  xr,yr,dr,kr,      {dane rakietki}  xp,yp,dp,kp,      {dane piłki}  kxp,kyp:integer;  {szybkość ruchu piłki}  strzal:boolean;   {można strzelać}  koniec:boolean;   {kiedy koniec gierki}  znak:char;        {jaki znak na klawiaturze}begin  d:=detect;  initgraph(d,m,'');  {wspolrzedne rakietki}  xr:=630;  yr:=200;  dr:=50;  kr:=14;  {wspolrzedne pilki}  xp:=0;  yp:=0;  dp:=30;  kp:=12;  kxp:=1;  kyp:=1;  koniec:=false;	{koniec gry}  strzal:=false;	{można strzelać gdy pocisk za ekranem}  {współrzędne pocisku}  kxs:=-10;  xs:=-10;  ks:=10;  ds:=3;  repeat    {rysowanie}    armata(xr,yr,dr,kr);    pilka(xp,yp,dp,kp);    {pocisk rysujemy i wymazujemy tylko wtedy gdy była spacja}    if strzal then pilka(xs,ys,ds,ks);    {wstrzymanie}    delay(10);    {wymazanie}    armata(xr,yr,dr,0);    pilka(xp,yp,dp,0);    if strzal then pilka(xs,ys,ds,0);    {sprawdzanie klawiatury-gdy nacisnieto jakis klawisz}    if keypressed then    begin      {odczytanie klawisza-kod klawisza w zmiennen znak}	znak:=readkey;      {gdy to byl kod kursora to czytamy kolejny znak bo pierwszy ma kod 0}  	if znak=#0 then znak:=readkey;  	case znak of         'H':yr:=yr-5;{kod kursora gora}         'P':yr:=yr+5;{kod kursora dol}        	{jeśli spacja to strzelamy, gdy nie ma pocisku na ekranie}         ' ':if not(strzal) then	   	begin	 		strzal:=true;       {jest pocisk na ekranie}			xs:=xr;             {współrzędne początkowe pocisku}			ys:=yr+dr div 2;	   	end;         #27:koniec:=true;{kod klawisza ESC}      	end; {koniec case}      {oczyszczamy bufor klawiatury zeby nie piszczalo}	while keypressed do znak:=readkey;    end; {gdy naciśnięto klawisz}    {ruch pilki}    xp:=xp+kxp;    yp:=yp+kyp;    {odbicia od brzegow ekranu}    if xp<=0 then kxp:=-kxp;    if (yp<=0) or (yp>=479) then kyp:=-kyp;    {koniec gry gdy piłka przeleci za rakietka}    if xp>=639 then koniec:=true;    {odbicie od rakietki}    if (xp+dp>=xr) and ((yp+dp>yr) and (yp+dpyp) and (ysxp) and (xs
Zobacz tutaj