Арканоид на Паскале

Àðêàíîèä íà Ïàñêàëå

Ìèíèñòåðñòâî îáùåãî è ïðîôåññèîíàëüíîãî îáðàçîâàíèÿ ÐÔ



Áåëãîðîäñêàÿ Ãîñóäàðñòâåííàÿ Òåõíîëîãè÷åñêàÿ Àêàäåìèÿ

Ñòðîèòåëüíûõ Ìàòåðèàëîâ.



Êàôåäðà ÏÎÂÒèÀÑ







Âûïîëíèë:

Ñòóäåíò ôàêóëüòåòà ÀÏèÈÒ

Ãðóïïû ÏÂ-22

Ìàðêåëîâ Äåíèñ



Ðóêîâîäèòåëü:



Áåëãîðîä – 2000.



ÑÎÄÅÐÆÀÍÈÅ



1. ÏÐÅÄÈÑËÎÂÈÅ



2. ÂÂÅÄÅÍÈÅ



3. ÇÀÄÀÍÈÅ ÊÓÐÑÎÂÎÉ ÐÀÁÎÒÛ



4. ÏÐÀÂÈËÀ ÏÎËÜÇÎÂÀÍÈß ÏÐÎÃÐÀÌÌÎÉ «ÀÐÊÀÍÎÈÄ» 



5. ÈÑÏÎËÜÇÓÅÌÛÅ ÑÒÐÓÊÒÓÐÛ ÄÀÍÍÛÕ



6. ÈÑÏÎËÜÇÓÅÌÛÅ ÌÎÄÓËÈ 



7. ÑÏÅÖÈÔÈÊÀÖÈß ÏÎÄÏÐÎÃÐÀÌÌ



8. ÒÅÊÑÒ ÏÐÎÃÐÀÌÌÛ È ÑÊÎÍÑÒÐÓÈÐÎÂÀÍÍÛÕ ÌÎÄÓËÅÉ



9. ïðàâèëà ïîëüçîâàíèÿ äîïîëíèòåëüíîé ïðîãðàììîé äëÿ ïîñòðîåíèÿ óðîâíåé «MARKEDIT»



10. ÑÏÅÖÈÔÈÊÀÖÈß ÏÎÄÏÐÎÃÐÀÌÌ Â ÏÐÎÃÐÀÌÌÅ «MARKEDIT»



11. ÒÅÊÑÒ ÏÐÎÃÐÀÌÌÛ «MARKEDIT” È ÑÊÎÍÑÒÐÓÈÐÎÂÀÍÍÛÕ ÌÎÄÓËÅÉ



12. ÑÏÈÑÎÊ ÈÑÏÎËÜÇÓÅÌÎÉ ËÈÒÅÐÀÒÓÐÛ



Ïðåäèñëîâèå



ßçûê Òóðáî Ïàñêàëü – ýòî îäèí èç ñàìûõ ðàñïðîñòðàí¸ííûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ ìèêðîêîìïüþòåðîâ. Îí ðàçðàáîòàí ôèðìîé «Áîðëàíä» êàê äèàëåêò ñòàíäàðòíîãî ÿçûêà Ïàñêàëü, íî áëàãîäàðÿ ñâîåé ïîïóëÿðíîñòè ñàì ñòàë ñòàíäàðòîì ÿçûêà ïðîãðàììèðîâàíèÿ 8- è 16-ðàçðÿäíûõ ìèêðîêîìïüþòåðîâ.

Ê âàæíåéøèì äîñòîèíñòâàì ÿçûêà Òóðáî Ïàñêàëü îòíîñÿòñÿ íåáîëüøîé ðàçìåð êîìïèëÿòîðà, âûñîêàÿ ñòåïåíü ñîîòâåòñòâèÿ ñòàíäàðòíîìó Ïàñêàëþ, î÷åíü áûñòðàÿ êîìïèëÿöèÿ ïðîãðàìì, îáúåäèíåíèå êîìïèëÿòîðà ñ èíòåðàêòèâíûì ýêðàííûì ðåäàêòîðîì, ïðåäóïðåæäåíèå îá îøèáêàõ íà óðîâíå èñõîäíîé ïðîãðàììû, îáøèðíàÿ áèáëèîòåêà ïîäïðîãðàìì è ïîëåçíûå ðàñøèðåíèÿ, óïðîùàþùèå ñèñòåìíîå ïðîãðàììèðîâàíèå.



Ââåäåíèå



Îäíîé èç îñíîâíûõ ïðîáëåì, ñ êîòîðîé ñòàëêèâàþòñÿ â ïðîöåññå ïðîãðàììèðîâàíèÿ, ÿâëÿåòñÿ íàïèñàíèå ïðîãðàììû, íå ñîäåðæàùåé îøèáîê. Îøèáêó íàèáîëåå ïîëíî ìîæíî îïðåäåëèòü êàê ðàñõîæäåíèå ïîâåäåíèÿ ïðîãðàììû ñ îæèäàíèÿìè ïîëüçîâàòåëÿ. Ñþäà âõîäèò êàê íåñîîòâåòñòâèå ðåçóëüòàòîâ èñõîäíûì äàííûì, òàê è äðóãèå, ïîðîé áîëåå îïàñíûå ýôôåêòû: çàöèêëèâàíèå, àâàðèéíàÿ îñòàíîâêà ïðîãðàìì è ò.ï.

Íàèáîëåå ÿâíî íàáëþäàåìûìè èñòîðè÷åñêèìè òåíäåíöèÿìè â ïðîãðàììèðîâàíèè ÿâëÿþòñÿ íåïðåðûâíûé ðîñò ïîëüçîâàòåëüñêèõ òðåáîâàíèé, ëàâèíîîáðàçíîå óñëîæíåíèå ôóíêöèîíàëüíîñòè ïðîãðàììû è, êàê ñëåäñòâèå, - óñëîæíåíèå å¸ ðàçðàáîòêè.Â ñâÿçè ñ óâåëè÷åíèåì òðóäî¸ìêîñòè ïðîãðàìíûõ ñðåäñòâ âîçíèêëà íåîáõîäèìîñòü âûðàáîòêè èíòåëëåêòóàëüíûõ èíñòðóìåíòîâ, ïîçâîëÿþùèõ ðàçðàáîò÷èêàì ñïðàâëÿòüñÿ ñ âîçðîñøåé ñëîæíîñòüþ ñâîåãî òðóäà. 

Â íàñòîÿùèé ìîìåíò ìîæíî óòâåðæäàòü, ÷òî ïðàêòè÷åñêè êàæäàÿ ïðîãðàììà ñîñòàâëÿåòñÿ ñ ïðèìåíåíèåì òîé èëè èíîé òåõíîëîãèè ïðîãðàììèðîâàíèÿ. 

«Â ñâÿçè ñ òåì,÷òî çà ïîñëåäíèå äåñÿòü èëè ïÿòüíàäöàòü ëåò ïðîèçâîäèòåëüíîñòü âû÷èñëèòåëüíûõ ìàøèí óâåëè÷èëàñü â òûñÿ÷è ðàç, ïîëüçîâàòåëè ñòàëè ãîðàçäî áîëåå áåñöåðåìîííûìè ïðè âûáîðå ïðîáëåì, êîòîðûå îíè ñ÷èòàþò «òåõíè÷åñêè ðàçðåøèìûìè». Ïîëüçîâàòåëè õîòÿò, ÷òîáû ðàçìåðû, ñëîæíîñòü è èçîùð¸ííîñòü ïðîãðàìì óâåëè÷èâàëàñü èñêëþ÷èòåëüíî áûñòðûìè òåìïàìè, è â ïîñëåäíèå ãîäû ñòàëî î÷åâèäíûì, ÷òî â öåëîì íàøè ïðîãðàììèñòñêèå âîçìîæíîñòè íå ïîñïåâàþò çà ýòèìè íåóìåðåííûìè àïïåòèòàìè».

Ïî ìåðå òîãî, êàê ìîùü êîìïüþòåðîâ ðîñëà, à îáëàñòü ïðèìåíåíèÿ âñ¸ ðàñøèðÿëàñü, óâåëè÷èâàëèñü íå òîëüêî ðàçìåðû, è ñëîæíîñòü ïðîãðàìì, íî è êîëè÷åñòâî îøèáîê â íèõ.

Ãëàâíîé çàäà÷åé ñîâðåìåííîãî ïðîãðàììèñòà ïðè íàïèñàíèè ïðîãðàììû ÿâëÿåòñÿ íå ïîäâåãàíèå å¸ áåñêîíå÷íûì òåñòèðîâàíèÿì, à òùàòåëüíûé, ïîëíûé àíàëèç èñõîäíîãî òåêñòà ïðîãðàììû, à òàêæå îòëàäêà ïðîãðàììû ñ ïîìîùüþ äîïîëíèòåëüíûõ ïðîãðàìíûõ ñðåäñòâ. 

Çàäàíèå íà ïðîåêòèðîâàíèå



Ðàçðàáîòàòü àëãîðèòì èãðû «ÀÐÊÀÍÎÈÄ», öåëü êîòîðîé çàêëþ÷àåòñÿ â íàáîðå êàê ìîæíî áîëüøåãî êîëè÷åñòâà î÷êîâ, êîòîðûå óâåëè÷èâàþòñÿ ïðè âûáèâàíèè î÷åðåäíîãî êóáèêà.

Ïðè âûáèâàíèè âñåõ êóáèêîâ òåêóùåãî óðîâíÿ îñóùåñòâëÿåòñÿ ïåðåõîä íà ñëåäóþùèé óðîâåíü, êîëè÷åñòâî êîòîðûõ – äåñÿòü.

Â êîíöå èãðû â çàâèñèìîñòè îò êîëè÷åñòâà íàáðàííûõ î÷êîâ, ââåä¸ííîå ïî çàïðîñó ïðîãðàììû èìÿ èãðîêà äîëæíî áûòü çàíåñåíî â äåñÿòêó ëó÷øèõ è çàïèñàíî â ôàéë.



Íàä ðàìêîé, â òå÷åíèå èãðû äîëæíû îòîáðàæàòüñÿ:



1) ¹ òåêóùåãî ýòàïà; 

2) êîëè÷åñòâî îñòàâøèõñÿ æèçíåé, ïåðâîíà÷àëüíî êîòîðûõ – 10;

êîëè÷åñòâî îñòàâøèõñÿ êóáèêîâ;

êîëè÷åñòâî íàáðàííûõ î÷êîâ.



Ïðàâèëà ïîëüçîâàíèÿ ïðîãðàììîé:



çàïóñòèòü MARKBALL.EXE

âûáðàòü ÷åì èãðàòü:

2a) ìûøü

2á) êëàâèàòóðà

âûáðàòü ñêîðîñòü øàðèêà

âûáðàòü ðàçìåð ïëàíêè



Èñïîëüçóåìûå ñòðóêòóðû äàííûõ:



type t_kubik=0..640;

t_dx_dy=-1..1;

t_arr=array[1..494] of t_kubik;

kol_kubik=0..247;



t_kubik – çíà÷åíèÿ âñåõ ïåðåìåííûõ, èñïîëüçóåìûõ â ïðîãðàììå, çàäàíû â ýòèõ ïðåäåëàõ (è íå áîëåå);



t_dx_dy – çíà÷åíèå, êîòîðîå ïðèíèìàåò êîýôôèöèåíò, îò êîòîðîãî çàâèñèò íàïðàâëåíèå äâèæåíèÿ ïî îñè ÎÕ èëè ÎÓ;



t_arr – çíà÷åíèÿ êîîðäèíàò, êîòîðûå ïðèíèìàåò êóáèê, â ñîîòâåòñòâèè ñî ñâîèì îòîáðàæåíèåì (èçîáðàæåíèåì) íà ýêðàíå;



kol_kubik – ìàêñèìàëüíîå êîëè÷åñòâî êóáèêîâ; 





Èñïîëüçóåìûå ìîäóëè:



Ñòàíäàðòíûå:

CRT;

GRAPH;

WINDOS – ìîäóëü òðåáóåìûé ñêîíñòðóèðóåìûì ìîäóëåì MYMOUSE;

STRINGS – ìîäóëü òðåáóåìûé ñêîíñòðóèðóåìûì ìîäóëåì MYMOUSE;



Ñêîíñòðóèðîâàííûå:



MARKEL – îñíîâíûå èãðîâûå ïîäïðîãðàììû;

MARK_ZAS – ñîäåðæèò èíñòðóìåíòàðèé èíòåðôåéñà (çàñòàâêà, ïîìîùü, ñ÷¸ò ëó÷øèõ èãðîêîâ â êîíöå èãðû); 

MYMOUSE – ðàáîòà ñ ìûøüþ



Ñïåöèôèêàöèÿ ïîäïðîãðàìì:



Ìîäóëü MARKEL



procedure livs(var liv:byte);



Íàçíà÷åíèå: ñ÷èòàåò îñòàâøèåñÿ æèçíè, åñëè ÷èñëî æèçíåé áóäåò ðàâíî íóëþ, òî âûâîäèò íà ýêðàí ìèãàþùóþ íàäïèñü: «YOU HAVE LOST»;



Âõîäíûå äàííûå: liv – ÷èñëî æèçíåé;

Âûõîäíûå äàííûå: liv – îñòàâøèåñÿ êîëè÷åñòâî æèçíåé; 



2. procedure perehod_level(const numbering:byte);



Íàçíà÷åíèå: âûâîäèò ïî ñåðåäèíå ýêðàíà íàäïèñü, ñîîòâåòñòâóþùóþ íà÷àëó íîâîãî ýòàïà;



Âõîäíûå äàííûå: numbering – íîìåð íîâîãî ýòàïà;

Âûõîäíûå äàííûå: íåò;



3. procedure planka_sharik(koeff:byte);



Íàçíà÷åíèå: ðèñóåò ïëàíêó, ðàçìåðîì, îïðåäåë¸ííûì îò çíà÷åíèÿ koeff, ïîñåðåäèíå ýêðàíà è øàðèê íàä íåé;



Âõîäíûå äàííûå: koeff – ÷èñëî îïðåäåëÿþùåå ðàçìåð ïëàíêè;

Âûõîäíûå äàííûå: íåò;



4. procedure musik;



Íàçíà÷åíèå: âûäà¸ò çâóêîâîé ñèãíàë, ñîîòâåòñòâóþùèé êàêîìó-ëèáî êàñàíèþ øàðèêà î ÷òî íèáóäü;



Âõîäíûå äàííûå: íåò;

Âûõîäíûå äàííûå: íåò;



5.procedure izchez_vv_niz(var dy:t_dx_dy;x,y,i:t_kubik;var a:t_arr;var kol_kub:kol_kubik);



Íàçíà÷åíèå: îïðåäåëÿåò êîñíóëñÿ ëè øàðèê êóáèêà î âåðõíþþ èëè íèæíþþ ãðàíü;



Âõîäíûå äàííûå: 

dy – íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè Y;

x,y – òåêóùèå êîîðäèíàòû öåíòðà øàðèêà;

i – çíà÷åíèå, îò êîòîðîãî çàâèñèò êàêèå êóáèêè ïðîâåðÿòü íà ñáèâàíèå;

a – ìàññèâ êîîðäèíàò êóáèêîâ;

kol_kub – êîëè÷åñòâî êóáèêîâ íà äàííûé ìîìåíò;

Âûõîäíûå äàííûå: 

dy – èçìåí¸ííîå íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè Y;

a – èçìåí¸ííûé ìàññèâ êîîðäèíàò êóáèêîâ;

kol_kub – èçìåí¸ííîå êîëè÷åñòâî êóáèêîâ;



6. procedure bok_bok(var dx:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik);



Íàçíà÷åíèå: îïðåäåëÿåò êîñíóëñÿ ëè øàðèê êóáèêà î ëåâóþ èëè ïðàâóþ ãðàíü;



Âõîäíûå äàííûå: 

dx – íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè X;

x,y – òåêóùèå êîîðäèíàòû öåíòðà øàðèêà;

a – ìàññèâ êîîðäèíàò êóáèêîâ;

kol_kub – êîëè÷åñòâî êóáèêîâ íà äàííûé ìîìåíò;

Âûõîäíûå äàííûå: 

dx – èçìåí¸ííîå íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè X;

a – èçìåí¸ííûé ìàññèâ êîîðäèíàò êóáèêîâ;

kol_kub – èçìåí¸ííîå êîëè÷åñòâî êóáèêîâ;



7. procedure death;



Íàçíà÷åíèå: âûäà¸ò çâóêîâîé ñèãíàë, ñîîòâåòñòâóþùèé ïðîèãðûøó îäíîé æèçíè;



Âõîäíûå äàííûå: íåò;

Âûõîäíûå äàííûå: íåò;



8. procedure ugolki(var dx,dy:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik);



Íàçíà÷åíèå: îïðåäåëÿåò êîñíóëñÿ ëè øàðèê êóáèêà îá óãëû; 



Âõîäíûå äàííûå: 

dx,dy – íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñÿì X è Y;

x,y – òåêóùèå êîîðäèíàòû öåíòðà øàðèêà;

a – ìàññèâ êîîðäèíàò êóáèêîâ;

kol_kub – êîëè÷åñòâî êóáèêîâ íà äàííûé ìîìåíò;

Âûõîäíûå äàííûå: 

dx,dy – èçìåí¸ííîå íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñÿì X è Y;

a – èçìåí¸ííûé ìàññèâ êîîðäèíàò êóáèêîâ;

kol_kub – èçìåí¸ííîå êîëè÷åñòâî êóáèêîâ;



9. procedure pausing(var pause:word);



Íàçíà÷åíèå: îïðåäåëÿåò ñêîðîñòü äâèæåíèÿ øàðèêà ïî âûáîðó ñàìèì ïîëüçîâàòåëåì, ñ íàãëÿäíûì ãðàôè÷åñêèì èíòåðôåéñîì;



Âõîäíûå äàííûå: 

pause – ïðåäïîëàãàåìàÿ ïàóçà;

Âûõîäíûå äàííûå: 

pause – óæå îïðåäåë¸ííàÿ ïàóçà;



10. procedure zapis(const xs,ys:t_kubik; i:t_kubik;var a:t_arr);



Íàçíà÷åíèå: îïðåäåëÿåò íà êàêèå ìåñòà â ìàññèâå çàïèñûâàòü êîîðäèíàòû êóáèêà; 



Âõîäíûå äàííûå: 

1) xs,ys – êîîðäèíàòû øàðèêà, êîòîðûå è íóæíî çàïèñàòü â ìàññèâ;

i – ïåðåìåííàÿ îò êîòîðîé çàâèñèò ñ êàêîãî íîìåðà èñêàòü ïîäõîäÿùåå ìåñòî äëÿ êîîðäèíàò êóáèêà;

a – ìàññèâ êîîðäèíàò êóáèêîâ;

Âûõîäíûå äàííûå: íåò



11. procedure level(var a:t_arr;const numbering:byte;var kol_kub:kol_kubik);



Íàçíà÷åíèå: îòêðûâàåò ôàéë è ñ÷èòûâàÿ ñ íåãî êîîðäèíàòû êóáèêîâ, ðèñóåò èõ; 



Âõîäíûå äàííûå: 

a – ìàññèâ êîîðäèíàò êóáèêîâ;

numbering – íîìåð îòêðûâàåìîãî ýòàïà;

kol_kub – êîëè÷åñòâî êóáèêîâ;

Âûõîäíûå äàííûå: 

a – ìàññèâ êîîðäèíàò êóáèêîâ;

2) kol_kub – êîëè÷åñòâî íàðèñîâàííûõ êóáèêîâ;



12. procedure left(const koeff:byte;var x1_dv,x2_dv:t_kubik);



Íàçíà÷åíèå: äâèæåíèå ïëàíêè âëåâî;



Âõîäíûå äàííûå: 

1) koeff – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;

x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;

Âûõîäíûå äàííûå: 

x1_dv,x2_dv – èçìåíèâøèåñÿ êîîðäèíàòû ïëàíêè ïî îñè Õ;



13. procedure right(const koeff:byte;var x1_dv,x2_dv:t_kubik);



Íàçíà÷åíèå: äâèæåíèå ïëàíêè âïðàâî;



Âõîäíûå äàííûå: 

1) koeff – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;

x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;

Âûõîäíûå äàííûå: 

x1_dv,x2_dv – èçìåíèâøèåñÿ êîîðäèíàòû ïëàíêè ïî îñè Õ;



14. procedure dviguna_keyboard(const koeff:byte;var x,x1_dv,x2_dv:t_kubik;var y:t_kubik);



Íàçíà÷åíèå: îæèäàíèå íàæàòèÿ êëàâèøè äëÿ íà÷àëà íîâîãî ýòàïà, åñëè ïîëüçîâàòåëü èãðàåò íà êëàâèàòóðå;



Âõîäíûå äàííûå: 

1) koeff – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;

x,y – êîîðäèíàòû øàðèêà; 

x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;

Âûõîäíûå äàííûå: 

x,y – êîîðäèíàòû øàðèêà;

x1_dv,x2_dv – èçìåíèâøèåñÿ êîîðäèíàòû ïëàíêè ïî îñè Õ;



15. procedure dviguna_mouse(const koeff:byte;var x,x1_dv,x2_dv:t_kubik;var y:t_kubik);



Íàçíà÷åíèå: îæèäàíèå íàæàòèÿ êíîïêè ìûøè äëÿ íà÷àëà íîâîãî ýòàïà, åñëè ïîëüçîâàòåëü èãðàåò ìûøüþ;



Âõîäíûå äàííûå: 

1) koeff – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;

2) x,y – êîîðäèíàòû øàðèêà; 

x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;

Âûõîäíûå äàííûå: 

x,y – êîîðäèíàòû øàðèêà;

x1_dv,x2_dv – èçìåíèâøèåñÿ êîîðäèíàòû ïëàíêè ïî îñè Õ;



16. procedure zar_nar(var x,y:t_kubik;const dx,dy:t_dx_dy);



Íàçíà÷åíèå: çàêðàñêà óæå íàðèñîâàííîãî øàðèêà è íàðèñîâàíèå íîâîãî øàðèêà ñ èçìåí¸ííûìè êîîðäèíàòàìè;



Âõîäíûå äàííûå: 

1) x,y – êîîðäèíàòû øàðèêà; 

2) dx,dy – îò çíà÷åíèÿ ýòèõ ïåðåìåííûõ çàâèñèò äâèæåíèå øàðèêà â òó èëè èíóþ ñòîðîíó;

Âûõîäíûå äàííûå: 

x,y – êîîðäèíàòû øàðèêà;



17. function chem_play:boolean;



Íàçíà÷åíèå: îïðåäåëåíèå ïîëüçîâàòåëåì ÷åì èãðàòü (êëàâèàòóðîé èëè ìûøüþ), ñ íàãëÿäíûì ãðàôè÷åñêèì èíòåðôåéñîì;



Âõîäíûå äàííûå: 

Íåò; 

Âûõîäíûå äàííûå: 

true – èãðàåì ìûøüþ;

false – èãðàåì íà êëàâèàòóðå; 



18. procedure razmer_planki(var koeff:byte);



Íàçíà÷åíèå: îïðåäåëåíèå ïîëüçîâàòåëåì ðàçìåðà ïëàíêè;



Âõîäíûå äàííûå: 

Koeff – êîýôôèöèåíò, îïðåäåëÿþùèé ðàçìåð ïëàíêè; 

Âûõîäíûå äàííûå: 

Koeff – êîýôôèöèåíò, îïðåäåëÿþùèé ðàçìåð ïëàíêè; ãðàåì ìûøüþ;



19. procedure naverhu_liv(liv:byte);



Íàçíà÷åíèå: îòîáðàæåíèå íàä ðàìêîé â òå÷åíèå èãðû êîëè÷åñòâà îñòàâøèõñÿ æèçíåé;



Âõîäíûå äàííûå: 

liv – ÷èñëî æèçíåé; 

Âûõîäíûå äàííûå: 

íåò;



20.procedure naverhu_number(numbering:byte);



Íàçíà÷åíèå: îòîáðàæåíèå íàä ðàìêîé â òå÷åíèå èãðû íîìåðà òåêóùåãî óðîâíÿ;



Âõîäíûå äàííûå: 

numbering – íîìåð óðîâíÿ; 

Âûõîäíûå äàííûå: 

íåò;



21. procedure naverhu_kubiki(kol_kub:byte);



Íàçíà÷åíèå: îòîáðàæåíèå íàä ðàìêîé â òå÷åíèå èãðû êîëè÷åñòâà îñòàâøèõñÿ êóáèêîâ;



Âõîäíûå äàííûå: 

Kol_kub – ÷èñëî îñòàâøèõñÿ êóáèêîâ; 

Âûõîäíûå äàííûå: 

íåò;



Ìîäóëü MARK_ZAS



1. procedure zastavka(s2:string);



Íàçíà÷åíèå: â íà÷àëå èãðû èñïîëüçóåòñÿ â êà÷åñòâå çàñòàâêè ñ ìèãàþùåé áîëüøîé íàäïèñüþ «MARKBALL» è íèæå ìèãàþùåé íàäïèñüþ «Click to start» ,òàêæå èñïîëüçóåòñÿ ïðè ïîòåðå âñåõ æèçíåé , íî ïðè ýòîì íèæíÿÿ íàäïèñü áóäåò «You have lost» , à ïðè ïðîõîæäåíèè âñåõ ýòàïîâ íèæíÿÿ íàäïèñü áóäåò «The end of game»;



Âõîäíûå äàííûå: 

S2 – íèæíÿÿ ìèãàþùàÿ íàäïèñü; 

Âûõîäíûå äàííûå: 

íåò;



2. procedure text_na_ekran;



Íàçíà÷åíèå: èñïîëüçóåòñÿ êàê ñïðàâêà ïîêà èãðà åù¸ íå íà÷àëàñü ïðè íàæàòèè êëàâèøè «F1»; 



Âõîäíûå äàííûå: 

íåò; 

Âûõîäíûå äàííûå: 

íåò;



3. procedure ochki(score:word);



Íàçíà÷åíèå: â êîíöå èãðû ñ÷èòàåò â ñîîòâåòñòâèè ñ íàáðàííûìè î÷êàìè: çàéì¸ò ëè äàííûé èãðîê, êîòîðûé ââ¸ë ïî çàïðîñó ïðîãðàììû ñâî¸ èìÿ, êàêîå-íèáóäü ìåñòî ñðåäè ïðåäñòàâëåííûõ äåñÿòè ìåñò; åñëè êîëè÷åñòâî íàáðàííûõ î÷êîâ ïîçâîëÿåò èãðîêó çàíÿòü íåêîòîðîå ìåñòî, òî ïðîãðàììà âûâîäèò íà ýêðàí òàáëèöó ëèäåðîâ, âêëþ÷àþùóþ â ñåáÿ èìÿ äàííîãî èãðîêà, â ïðîòèâíîì ñëó÷àå íà ýêðàí âñ¸ æå áóäåò âûâåäåíà òàáëèöà ëèäåðîâ, íî èìåíè äàííîãî èãðîêà ñîäåðæàòüñÿ òàì íå áóäåò;



Âõîäíûå äàííûå: 

Score – êîëè÷åñòâî íàáðàííûõ â òå÷åíèè èãðû î÷êîâ; 

Âûõîäíûå äàííûå: 

íåò;



Îñíîâíàÿ ïðîãðàììà



1. Procedure initgr;



Íàçíà÷åíèå: èíèöèàëèçèðóåò ãðàôèêó â ðåæèìå vgahi;



Âõîäíûå äàííûå: íåò;

Âûõîäíûå äàííûå: íåò;



2. Procedure vostanovka_colors;



Íàçíà÷åíèå: âîññòàíàâëèâàåò öâåòà ñî ñòàíäàðòíûìè îòòåíêàìè;



Âõîäíûå äàííûå: íåò;

Âûõîäíûå äàííûå: íåò;



Òåêñò ïðîãðàììû:



program mark_ball;

uses graph,crt,mymouse,markel,mark_zas;

procedure initgr;

var grdriver,grmode:integer;

begin

grdriver:=vga;

grmode:=vgahi;

initgraph(grdriver,grmode,'');

if GraphResult <> grOk then halt;

end;



procedure vostanovka_colors;

begin

setrgbpalette(black,0,0,0);

setrgbpalette(blue,0,0,40);

setrgbpalette(green,0,40,0);

setrgbpalette(cyan,0,40,40);

setrgbpalette(red,40,7,7);

setrgbpalette(magenta,40,0,40);

setrgbpalette(brown,40,30,0);

setrgbpalette(lightgray,49,49,49);

setrgbpalette(darkgray,26,26,26);

setrgbpalette(lightblue,0,0,63);

setrgbpalette(lightgreen,9,63,9);

setrgbpalette(lightcyan,0,63,63);

setrgbpalette(lightred,63,10,10);

setrgbpalette(lightmagenta,44,0,63);

setrgbpalette(yellow,63,63,18);

setrgbpalette(white,63,63,63);

end;



var y_planka,xmax,

x1_dv,x2_dv,x,y,i:t_kubik;

x_get,y_get,x_get_pred:word;

dx,dy:t_dx_dy;

a:t_arr;

numbering,liv:byte;

kol_kub:kol_kubik;

lb,rb,tb,dviguna:boolean;

buttoncount,errorcode,koeff:byte;

pause:word;

score:integer;

s2:string;

begin

s2:='Click to start';

initgr;

zastavka(s2); 

vostanovka_colors;

setlinestyle(0,0,1);

randomize;

cleardevice;

xmax:=getmaxx-radius-1;

y:=getmaxy-shir-radius-1;

y_planka:=getmaxy-shir-radius-1;

liv:=10;

score:=-10;

dviguna:=chem_play;

pausing(pause);

razmer_planki(koeff);

for numbering:=1 to 10 do

begin

perehod_level(numbering);

cleardevice;

planka_sharik(koeff);



level(a,numbering,kol_kub);

naverhu_number(numbering);

naverhu_liv(liv);

naverhu_kubiki(kol_kub,score);

dx:=-1;

dy:=-1;



{à ¬ª }

setcolor(random(14)+1);

rectangle(0,21,getmaxx,getmaxy);



if dviguna then dviguna_mouse(koeff,x,x1_dv,x2_dv,y)

else dviguna_keyboard(koeff,x,x1_dv,x2_dv,y);

while kol_kub>0 do

begin

zar_nar(x,y,dx,dy);

delay(pause);

if (y=radius+1+21) or

((x1_dv

begin dy:=-dy; musik; end else

if (x=xmax) or (x=radius+1) then

begin dx:=-dx; musik; end else

if y=y_planka then

begin

setcolor(0);

circle(x,y,radius);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

dy:=-1;

death;

livs(liv,score);

case dviguna of

true:dviguna_mouse(koeff,x,x1_dv,x2_dv,y);

false:dviguna_keyboard(koeff,x,x1_dv,x2_dv,y);

end;

end;

case x of

1..49: begin i:=37;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

50..99: begin i:=75;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

100..148:begin i:=113;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

149..197:begin i:=151;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

198..246:begin i:=189;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

247..295:begin i:=227;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

296..344:begin i:=265;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

345..393:begin i:=303;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

394..442:begin i:=341;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

443..491:begin i:=379;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

492..540:begin i:=417;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

541..588:begin i:=455;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

589..637:begin i:=493;izchez_vv_niz(dy,x,y,i,a,kol_kub,score); end;

end;

bok_bok(dx,x,y,a,kol_kub,score);

ugolki(dx,dy,x,y,a,kol_kub,score);

case dviguna of

false:

if keypressed then

case readkey of

#75: left(koeff,x1_dv,x2_dv);

#77: right(koeff,x1_dv,x2_dv);

#27:begin closegraph; halt; end;

end;

true:

begin

getmousexy(x_get,y_get,lb,rb,tb);

if x_get_pred<>x_get then begin

setcolor(0);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

setfillstyle(6,13);

setcolor(13);

x1_dv:=x_get;

x2_dv:=x1_dv+koeff*shir;

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

x_get_pred:=x_get; end;

if rb then begin closegraph;halt;end;

end;

end;

end;

dec(score,10);

end;

inc(score,10);

ochki(score);

s2:='The end of game';

zastavka(s2);

closegraph;

end.



Òåêñò ñêîíñòðóèðóåìûõ ìîäóëåé:

unit markel;

interface

uses crt,graph,mymouse,mark_zas;

var sverhu:string;

liv,numbering:byte;

const radius=7;

shir=15;

y1_dv=479-1;

y2_dv=479-shir;

type t_kubik=-10..640;

t_dx_dy=-1..1;

t_arr=array[1..494] of t_kubik;

kol_kubik=0..247;

procedure livs(var liv:byte;score:integer);

procedure perehod_level(const numbering:byte);

procedure planka_sharik(koeff:byte);

procedure musik;

procedure izchez_vv_niz(var dy:t_dx_dy;x,y,i:t_kubik;var a:t_arr;var kol_kub:kol_kubik;var score:integer);

procedure bok_bok(var dx:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik;var score:integer);

procedure death;

procedure ugolki(var dx,dy:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik;var score:integer);

procedure pausing(var pause:word);

procedure zapis(const xs,ys:t_kubik;i:t_kubik;var a:t_arr);

procedure level(var a:t_arr;const numbering:byte;var kol_kub:kol_kubik);

procedure left(const koeff:byte;var x1_dv,x2_dv:t_kubik);

procedure right(const koeff:byte;var x1_dv,x2_dv:t_kubik);

procedure dviguna_keyboard(const koeff:byte;var x,x1_dv,x2_dv:t_kubik;var y:t_kubik);

procedure dviguna_mouse(const koeff:byte;var x,x1_dv,x2_dv:t_kubik;var y:t_kubik);

procedure zar_nar(var x,y:t_kubik;const dx,dy:t_dx_dy);

function chem_play:boolean;

procedure razmer_planki(var koeff:byte);

procedure naverhu_liv(liv:byte);

procedure naverhu_number(numbering:byte);

procedure naverhu_kubiki(kol_kub:byte;var score:integer);

procedure naverhu_score(score:integer);

implementation

function chem_play:boolean;

var mask:boolean;

greenvalue,bluevalue:0..64;

i,j:-1..1;

begin

setcolor(blue);

settextstyle(4{GothicFont},horizdir,5);

settextjustify(1,1);

outtextxy(round(getmaxx / 3.3), round(getmaxy / 2.3),'Mouse');

setcolor(green);

outtextxy(round(getmaxx / 1.5), round(getmaxy / 2.3),'Keyboard');

i:=1;

j:=1;

greenvalue:=0;

bluevalue:=0;

while true do

begin

repeat

case mask of

true:begin

setRGBpalette(blue,0,0,bluevalue);

inc(bluevalue,i);

if (bluevalue = 63) or (bluevalue = 0) then

i:=-i;

end;

false:begin

setRGBpalette(green,0,greenvalue,0);

inc(greenvalue,j);

if (greenvalue = 63) or (greenvalue = 0) then

j:=-j;

end;

end;

until keypressed;

case readkey of

#75: mask:=true;

#77: mask:=false;

#13: begin chem_play:=mask; delay(5000); cleardevice; exit; end;

#27: begin closegraph; halt; end;

end;

end;

end;



procedure ugolki(var dx,dy:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik;var score:integer);

procedure izchez(var dx,dy:t_dx_dy;var a:t_arr;var kol_kub:kol_kubik;i:word);

begin

setcolor(0);

setfillstyle(1,0);

bar3d(a[i],a[i+1],a[i]+48,a[i+1]-20,0,false);

musik;

a[i]:=0;

a[i+1]:=0;

dx:=-dx;

dy:=-dy;

dec(kol_kub);

musik;

naverhu_kubiki(kol_kub,score);

exit;

end;

var i:1..496;

begin

i:=1;

while i<=493 do

begin

if x-radius+1=a[i]+48 then

if (y-radius+1=a[i+1])or((y-radius+1a[i+1]-20))

or(y+radius-1=a[i+1]-20)or((y+radius-1a[i+1]-20))

then izchez(dx,dy,a,kol_kub,i);

if x+radius-1=a[i] then

if (y+radius-1=a[i+1]-20)or((y+radius-1a[i+1]-20))

or(y-radius+1=a[i+1])or((y-radius+1a[i+1]-20))

then izchez(dx,dy,a,kol_kub,i);

if y-radius+1=a[i+1] then

if (x-radius+1=a[i]+48)or((x-radius+1>a[i])and(x-radius+1<a[i]+48))

or(x+radius-1=a[i])or((x+radius-1>a[i])and(x+radius-1<a[i]+48))

then izchez(dx,dy,a,kol_kub,i);

if y+radius-1=a[i+1]-20 then

if (x+radius-1=a[i])or((x+radius-1>a[i])and(x+radius-1<a[i]+48))

or(x-radius+1=a[i]+48)or((x-radius+1>a[i])and(x-radius+1<a[i]+48))

then izchez(dx,dy,a,kol_kub,i);

inc(i,2);

end;

end;

procedure pausing(var pause:word);

var xmax,y_planka,x,y:t_kubik;

dx,dy:-1..1;

s:string;

redvalue,bluevalue:0..63;

i:-1..1;

begin

setcolor(lightgray);

s:='Adjust speed of a ball';{'îòðåãóëèðóéòå ñêîðîñòü øàðèêà'}

settextstyle(4{GothicFont},horizdir,5);

settextjustify(1,1);

outtextxy(getmaxx div 2, getmaxy div 2,s);

i:=1;

redvalue:=0;

bluevalue:=0;

repeat

repeat

setRGBpalette(lightgray,redvalue,0,bluevalue);

inc(bluevalue,i);

inc(redvalue,i);

until keypressed or (bluevalue=63) or (bluevalue=0);

i:=-i;

until keypressed;

cleardevice;

{ðàìêà}

setcolor(random(14)+1);

rectangle(0,0,getmaxx,getmaxy);

xmax:=getmaxx-radius-1;

y_planka:=getmaxy-shir-radius-1;

{ïëàíêà íà âåñü íèç}

setcolor(13);

setfillstyle(6,13);

bar3d(1,getmaxy-1,getmaxx,getmaxy-shir,0,false);

{øàðèê íàä ïëàíêîé}

x:=getmaxx div 2;

y:=getmaxy-shir-radius-1;

setcolor(10);

circle(x,y,radius);

dx:=1;

dy:=-1;

pause:=6;

repeat

while not(keypressed) do

begin

zar_nar(x,y,dx,dy);

delay(pause);

if y=radius+1 then

begin dy:=-dy; musik; end else

if x=xmax then

begin dx:=-dx; musik; end else

if y=y_planka then

begin dy:=-dy; musik; end else

if x=radius+1 then

begin dx:=-dx; musik; end;

end;

case readkey of

#45{'-'}:if pause

#42{'*'}:if pause >2 then dec(pause);

#13:begin cleardevice; exit; end;

end;

until false;

end;

procedure razmer_planki(var koeff:byte);

var s:string;

x1,y1,x2,y2:integer;

i:-1..1;

redvalue,bluevalue:0..63;

begin

setcolor(red);

s:='Adjust the size of a rod'{'îòðåãóëèðóéòå ðàçìåð ïëàíêè'};

settextstyle(4{GothicFont},horizdir,5);

settextjustify(1,1);

outtextxy(getmaxx div 2, getmaxy div 2, s);

i:=1;

redvalue:=0;

bluevalue:=0;

repeat

repeat

setRGBpalette(red,redvalue,bluevalue,0);

inc(bluevalue,i);

inc(redvalue,i);

until keypressed or (redvalue=0) or (redvalue=63);

i:=-i;

until keypressed;

cleardevice;

{ðàìêà}

setcolor(random(14)+1);

rectangle(0,0,getmaxx,getmaxy);

{ïëàíêà ïîñåðåäèíå}

setcolor(13);

setfillstyle(6,13);

koeff:=4;

x1:=round(getmaxx/2-(koeff/2)*shir-1);

y1:=getmaxy-1;

x2:=round(getmaxx/2+(koeff/2)*shir);

y2:=getmaxy-shir;

bar3d(x1,y1,x2,y2,0,false);

repeat

if keypressed then

case readkey of

#42{'*'}:if koeff

begin

inc(koeff);

x1:=round(getmaxx/2-(koeff/2)*shir-1);

y1:=getmaxy-1;

x2:=round(getmaxx/2+(koeff/2)*shir);

y2:=getmaxy-shir;

bar3d(x1,y1,x2,y2,0,false);

end;

#45{-}:if koeff>2 then

begin

setcolor(0);

setfillstyle(0,0);

x1:=round(getmaxx/2-(koeff/2)*shir-1);

y1:=getmaxy-1;

x2:=round(getmaxx/2+(koeff/2)*shir);

y2:=getmaxy-shir;

bar3d(x1,y1,x2,y2,0,false);

dec(koeff);

setcolor(13);

setfillstyle(6,13);

x1:=round(getmaxx/2-(koeff/2)*shir-1);

y1:=getmaxy-1;

x2:=round(getmaxx/2+(koeff/2)*shir);

y2:=getmaxy-shir;

bar3d(x1,y1,x2,y2,0,false);

end;

#13:exit;

end;

until false;

end;

procedure livs(var liv:byte;score:integer);

var s2:string;

begin

dec(liv);

naverhu_liv(liv);

if liv=0 then

begin

ochki(score);

s2:='You have lost !';

zastavka(s2);

closegraph;

halt;

end;

end;

procedure perehod_level(const numbering:byte);

var i,j:30..330;

s:string;

begin

str(numbering,s);

s:='level '+s;

cleardevice;

setcolor(14);

settextstyle(4{GothicFont},horizdir,5);

settextjustify(1,1);

outtextxy(getmaxx div 2, getmaxy div 2, s);

i:=30;

j:=280;

{while (i<>330) and (j<>30) do

begin

sound(i);

delay(100);

sound(j);

delay(100);

inc(i);

dec(j);

end;

nosound;}

delay(5000);

end;

procedure planka_sharik(koeff:byte);

var x1,y1,x2,y2,x,y:integer;

begin

{ïëàíêà ïîñåðåäèíå}

setcolor(13);

setfillstyle(6,13);

x1:=round(getmaxx/2-(koeff/2)*shir-1);

y1:=getmaxy-1;

x2:=round(getmaxx/2+(koeff/2)*shir);

y2:=getmaxy-shir;

bar3d(x1,y1,x2,y2,0,false);

{øàðèê íàä ïëàíêîé}

x:=getmaxx div 2;

y:=getmaxy-shir-radius-1;

setcolor(10);

circle(x,y,radius);

end;

procedure musik;

begin

{sound(460);

delay(130);

nosound;}

end;

procedure izchez_vv_niz(var dy:t_dx_dy;x,y,i:t_kubik;var a:t_arr;var kol_kub:kol_kubik;var score:integer);

var p:-3..494;

begin

p:=i-36;

while (i>=p) and not((y-radius+1=a[i+1]) or (y+radius-1=a[i+1]-20)) do

dec(i,2);

if i

if (y-radius+1=a[i+1]) or (y+radius-1=a[i+1]-20) then

begin

setcolor(0);

setfillstyle(1,0);

bar3d(a[i],a[i+1],a[i]+48,a[i+1]-20,0,false);

musik;

a[i]:=0;

a[i+1]:=0;

dy:=-dy;

dec(kol_kub);

naverhu_kubiki(kol_kub,score);

end;

end;

procedure bok_bok(var dx:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik;var score:integer);

var i:1..496;

begin

i:=1;

while i<=493 do

begin

if ((x+radius-1=a[i]) and (ya[i+1]-20)) or

((x-radius+1=a[i]+48) and (ya[i+1]-20)) then

begin

setcolor(0);

setfillstyle(1,0);

bar3d(a[i],a[i+1],a[i]+48,a[i+1]-20,0,false);

musik;

a[i]:=0;

a[i+1]:=0;

dx:=-dx;

dec(kol_kub);

musik;

naverhu_kubiki(kol_kub,score);

exit;

end;

inc(i,2);

end;

end;

procedure death;

var i:30..800;

begin

i:=800;

{while i<>30 do

begin

sound(i);

delay(10);

dec(i);

end;

nosound;}

end;

procedure zapis(const xs,ys:t_kubik;i:t_kubik;var a:t_arr);

begin

while a[i]<>0 do

inc(i,2);

a[i]:=xs;

a[i+1]:=ys;

end;

procedure level(var a:t_arr;const numbering:byte;var kol_kub:kol_kubik);

var xs,ys,i:t_kubik;

f:text;

color,pattern:byte;

number:string;

begin

for i:=1 to 494 do

a[i]:=0;

str(numbering,number);

assign(f,'levels\level'+number+'.den');

reset(f);

while not eof(f) do

begin

readln(f,xs,ys);

color:=random(14)+1;

pattern:=random(11)+1;

setcolor(color);

setfillstyle(pattern,color);

bar3d(xs,ys,48+xs,ys-20,0,false);

end;

close(f);

kol_kub:=0;

reset(f);

while not eof(f) do

begin

readln(f,xs,ys);

if xs<>0 then inc(kol_kub);

case xs of

1: begin i:=1; zapis(xs,ys,i,a); end;

50: begin i:=39; zapis(xs,ys,i,a); end;

99: begin i:=77; zapis(xs,ys,i,a); end;

148: begin i:=115; zapis(xs,ys,i,a); end;

197: begin i:=153; zapis(xs,ys,i,a); end;

246: begin i:=191; zapis(xs,ys,i,a); end;

295: begin i:=229; zapis(xs,ys,i,a); end;

344: begin i:=267; zapis(xs,ys,i,a); end;

393: begin i:=305; zapis(xs,ys,i,a); end;

442: begin i:=343; zapis(xs,ys,i,a); end;

491: begin i:=381; zapis(xs,ys,i,a); end;

540: begin i:=419; zapis(xs,ys,i,a); end;

589: begin i:=457; zapis(xs,ys,i,a); end;

end;

end;

close(f);

end;

procedure left(const koeff:byte;var x1_dv,x2_dv:t_kubik);

begin

if x1_dv-8 <= 0 then

begin

musik;

setcolor(0);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

setfillstyle(6,13);

setcolor(13);

x1_dv:=1;

x2_dv:=koeff*shir;

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

end else

begin

setcolor(0);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

setfillstyle(6,13);

setcolor(13);

dec(x1_dv,8);

dec(x2_dv,8);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

end;

end;

procedure right(const koeff:byte;var x1_dv,x2_dv:t_kubik);

begin

if x2_dv+8 >= getmaxx then

begin

musik;

setcolor(0);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

setfillstyle(6,13);

setcolor(13);

x2_dv:=getmaxx-1;

x1_dv:=x2_dv-koeff*shir;

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

end else

begin

setcolor(0);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

setfillstyle(6,13);

setcolor(13);

inc(x1_dv,8);

inc(x2_dv,8);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

end;

end;

procedure dviguna_keyboard(const koeff:byte;var x,x1_dv,x2_dv:t_kubik;var y:t_kubik);

begin

{Ðèñóåì ïëàíêó ñ øàðèêîì ïîñåðåäèíå}

planka_sharik(koeff);

{Íèæå --- êîîðäèíàòû ïëàíêè è øàðèêà(òîëüêî-÷òî íàðèñîâàííûõ)}

x1_dv:=round(getmaxx/2-(koeff/2)*shir-1);

x2_dv:=round(getmaxx/2+(koeff/2)*shir);

x:=getmaxx div 2;

y:=getmaxy-shir-radius-1;

repeat

case readkey of

#75: if x > (koeff div 2)*shir then

begin

left(koeff,x1_dv,x2_dv);

setcolor(0);

circle(x,y,radius);

x:=round(x1_dv+shir*koeff/2);

setcolor(10);

circle(x,y,radius);

end;

#77: if x < getmaxx-(koeff/2)*shir then

begin

right(koeff,x1_dv,x2_dv);

setcolor(0);

circle(x,y,radius);

x:=round(x1_dv+shir*koeff/2);

setcolor(10);

circle(x,y,radius);

end;

' ': exit;

#27:begin closegraph; halt; end;

end;

until false;

end;

procedure dviguna_mouse(const koeff:byte;var x,x1_dv,x2_dv:t_kubik;var y:t_kubik);

var x_get,y_get:word;

x_get_pred:word;

lb,rb,tb:boolean;

begin

{Ðèñóåì ïëàíêó ñ øàðèêîì ïîñåðåäèíå}

planka_sharik(koeff);

{óñòàíàâëèâàåò îãðàíè÷åíèå ïåðåìåùåíèÿ êóðñîðà ìûøè ïî âåðòèêàëè}

setYrange(5,5);

{óñòàíàâëèâàåò îãðàíè÷åíèå ïåðåìåùåíèÿ êóðñîðà ìûøè ïî ãîðèçîíòàëè}

setXrange(1,getmaxx-koeff*shir-1);

{Íèæå --- êîîðäèíàòû ïëàíêè è øàðèêà(òîëüêî-÷òî íàðèñîâàííûõ)}



x1_dv:=round(getmaxx/2-(koeff/2)*shir-1);

x2_dv:=round(getmaxx/2+(koeff/2)*shir);



setmousexy(x1_dv,0);

x:=getmaxx div 2;

y:=getmaxy-shir-radius-1;

repeat

getmousexy(x_get,y_get,lb,rb,tb);

if x_get_pred<>x_get then

begin

setcolor(0);

setfillstyle(0,0);

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

setfillstyle(6,13);

setcolor(13);

x1_dv:=x_get;

x2_dv:=x1_dv+koeff*shir;

bar3d(x1_dv,y1_dv,x2_dv,y2_dv,0,false);

x_get_pred:=x_get;

setcolor(0);

circle(x,y,radius);

setcolor(10);

x:=x_get+round(koeff/2)*shir;

circle(x,y,radius);

end;

until lb;

end;

procedure zar_nar(var x,y:t_kubik;const dx,dy:t_dx_dy);

begin

setcolor(0);

circle(x,y,radius);

inc(x,dx);

inc(y,dy);

setcolor(10);

circle(x,y,radius);

end;

procedure naverhu_number(numbering:byte);

var s:string;

begin

settextstyle(4{GothicFont},horizdir,3);

settextjustify(centertext,centertext);

setfillstyle(1,black);

bar(0,0,120,19);

setcolor(lightgreen);

str(numbering,s);

s:='Level '+s;

outtextxy(60,5,s);

end;

procedure naverhu_liv(liv:byte);

var s:string;

begin

settextstyle(4{GothicFont},horizdir,3);

settextjustify(centertext,centertext);

setfillstyle(1,black);

bar(140,0,250,19);

setcolor(lightgreen);

str(liv,s);

s:='Lifes '+s;

outtextxy(195,5,s);

end;

procedure naverhu_kubiki(kol_kub:byte;var score:integer);

var s:string;

begin

settextstyle(4{GothicFont},horizdir,3);

settextjustify(centertext,centertext);

setfillstyle(1,black);

bar(270,0,420,19);

setcolor(lightgreen);

str(kol_kub,s);

s:='Kubikov '+s;

outtextxy(345,5,s);

inc(score,10);

naverhu_score(score);

end;

procedure naverhu_score(score:integer);

var s:string;

begin

settextstyle(4{GothicFont},horizdir,3);

settextjustify(centertext,centertext);

setfillstyle(1,black);

bar(440,0,630,19);

setcolor(lightgreen);

str(score,s);

s:='Score '+s;

outtextxy(535,5,s);

end;

end.



unit mark_zas;

interface

uses crt,graph,mymouse;

type t_mas=array [1..11] of word;

procedure zastavka(s2:string);

procedure text_na_ekran;

procedure ochki(score:word);

implementation

procedure text_na_ekran;

var f:text;

a:char;

begin

assign(f,'pravila.txt');

reset(f);



textmode(1);

textbackground(3);

textcolor(0);

clrscr;

while not eof(f) do

begin

while not(eof(f)) do

begin

read(f,a);

write(a);

end;

writeln;

end;

while not(keypressed) do

case readkey of

#27:exit;

end;

close(f);

end;

procedure zastavka(s2:string);

var redvalue:-2..63;

greenvalue2:-2..63;

lb,rb,tb:boolean;

buttoncount,errorcode:byte;

x,y:word;

i:-1..1;

begin

initmouse(buttoncount,errorcode);

cleardevice;

setcolor(lightgreen);

setlinestyle(0,2,3);

rectangle(0,0,getmaxx,getmaxy);



settextjustify(centertext,centertext);

settextstyle(4{GothicFont},horizdir,9);

setcolor(3);

outtextxy(getmaxx div 2,round(getmaxy / 2.5),'Markball');



setcolor(1);

settextstyle(7{TSCR.CHR},horizdir,2);

settextjustify(lefttext,centertext);

if s2='Click to start' then

outtextxy(10,10,'Press F1 for the help');



setcolor(2);

settextstyle(7{TSCR.CHR},horizdir,3);

outtextxy(getmaxx div 2,round(getmaxy / 1.3), s2);

i:=1;

redvalue:=1;

greenvalue2:=62;

repeat

repeat

inc(redvalue,i);

setRGBpalette(3,redvalue,redvalue,0);

getmouseXY(x,y,lb,rb,tb);

inc(greenvalue2,-i);

setRGBpalette(2,0,greenvalue2,greenvalue2);

setRGBpalette(1,Greenvalue2,0,0);

until (redvalue=63) or (redvalue=0) or rb or lb or keypressed;

i:=-i;

if keypressed then

case readkey of

#59{F1}:

begin

text_na_ekran;

SetGraphMode(vgahi);

setcolor(lightgreen);

setlinestyle(0,2,3);

rectangle(0,0,getmaxx,getmaxy);



settextjustify(centertext,centertext);

settextstyle(4{GothicFont},horizdir,9);

redvalue:=1;

greenvalue2:=62;

setcolor(3);

outtextxy(getmaxx div 2,round(getmaxy / 2.5),'Markball');



setcolor(1);

settextstyle(7{TSCR.CHR},horizdir,2);

settextjustify(lefttext,centertext);

if s2='Click to start' then

outtextxy(10,10,'Press F1 for the help');



setcolor(2);

settextstyle(7{TSCR.CHR},horizdir,3);

outtextxy(getmaxx div 2,round(getmaxy / 1.3), s2);

end;

#13:exit;

end;

until rb or lb;

end;

procedure ochki(score:word);

var f:text;

s:string[15];

c:word;

numb,mynumber:-5..20;

player:t_mas;

players_name:array [1..11] of string[15];

x,y:word;

i:char;

myname:string[15];

label ld;

begin

assign(f,'record.txt');

reset(f);

readln(f);

numb:=0;

while not eof(f) do

begin

readln(f,c);

inc(numb);

player[numb]:=c;

readln(f);

end;

close(f);

reset(f);

numb:=0;

while not eof(f) do

begin

readln(f,s);

inc(numb);

players_name[numb]:=s;

readln(f);

end;

close(f);



x:=getmaxx div 2-140;

y:=35;

bar3d(x,y,x+280,y+100,0,false);

settextjustify(centertext,centertext);

settextstyle(4{Gothic Font},horizdir,3);

setcolor(lightcyan);

outtextxy(x+140,y+10,'Enter your name');

myname:='';

while true do

if keypressed then

begin

i:=readkey;

case i of

#13: goto ld;

else begin

outtextxy(x+20,y+40,i);

inc(x,18);

myname:=myname+i;

end;

end;

end;

ld:

mynumber:=0;

numb:=1;

while (numb <= 10) and (score < player[numb]) do

inc(numb);

if numb = 11 then

begin

x:=getmaxx div 2-140;

y:=35;

bar3d(x,y,x+280,y+300,0,false);

settextjustify(centertext,centertext);

settextstyle(4{Gothic Font},horizdir,3);

setcolor(lightcyan);

outtextxy(x+140,y+10,'The best players');

settextjustify(lefttext,centertext);

y:=75;

for numb:=1 to 10 do

begin

outtextxy(x+10,y,players_name[numb]);

str(player[numb],s);

outtextxy(x+190,y,s);

inc(y,25);

delay(1000);

end;

end

else

begin

settextstyle(4{Gothic Font},horizdir,3);

mynumber:=numb;

for c:=10 downto numb do

begin

player[c+1]:=player[c];

players_name[c+1]:=players_name[c];

end;

player[mynumber]:=score;

players_name[mynumber]:=myname;



x:=getmaxx div 2-140;

y:=35;

bar3d(x,y,x+280,y+300,0,false);

settextjustify(centertext,centertext);

settextstyle(4{Gothic Font},horizdir,3);

setcolor(lightcyan);

outtextxy(x+140,y+10,'The best players');

y:=75;

settextjustify(lefttext,centertext);

for numb:=1 to 10 do

begin

outtextxy(x+10,y,players_name[numb]);

str(player[numb],s);

outtextxy(x+190,y,s);

inc(y,25);

delay(1000);

end;

rewrite(f);

for numb:=1 to 10 do

begin

writeln(f,players_name[numb]);

writeln(f,player[numb]);

end;

close(f);

end;

readkey;

end;

end.



Äîïîëíèòåëüíàÿ ïðîãðàììà äëÿ ïîñòðîåíèÿ ñîáñòâåííûõ óðîâíåé :



Ïðàâèëà ïîëüçîâàíèÿ ïðîãðàììîé:



çàïóñòèòü MARKEDIT.EXE

íàæèìàÿ ëåâóþ êíîïêó ìûøè ñòàâèòü(ðèñîâàòü) êóáèêè; 

ïîñëå ïîñòðîåíèÿ óðîâíÿ íàæàòü ïðàâóþ êíîïêó ìûøè;

ïîñëå ïîÿâëåíèÿ ìåíþ íîìåðîâ óðîâíåé âûáðàòü íîìåð ñîõðàíÿåìîãî óðîâíÿ (ôàéëà);



Ñïåöèôèêàöèè ïîäïðîãðàìì:



1. procedure text_na_ekran;



Íàçíà÷åíèå: èñïîëüçóåòñÿ êàê ñïðàâêà è âñåãäà ïîêàçûâàåòñÿ ïðè çàïóñêå; 



Âõîäíûå äàííûå: 

íåò; 

Âûõîäíûå äàííûå: 

íåò;



2. function netu:boolean;



Íàçíà÷åíèå: ïðè íàæàòèè ëåâîé êíîïêè ìûøè îïðåäåëÿåò, åñòü ëè íà ýòîì ìåñòå óæå êóáèê èëè íåò;



Âõîäíûå äàííûå: 

íåò; 

Âûõîäíûå äàííûå: 

True: ðèñóåì êóáèê;

False: íà ýòîì ìåñòå óæå åñòü êóáèê, çíà÷èò íå ðèñóåì;



3. procedure stroika;



Íàçíà÷åíèå: ðèñóåò êóáèê è çàïèñûâàåò åãî êîîðäèíàòû â ôàéë;



Âõîäíûå äàííûå: íåò; 

Âûõîäíûå äàííûå: íåò;

4. procedure search_y;



Íàçíà÷åíèå: èùåò ïîäõîäÿùèå êîîðäèíàòû äëÿ ïîñòðîåíèÿ êóáèêà;



Âõîäíûå äàííûå: íåò; 

Âûõîäíûå äàííûå: íåò;



5. procedure build_level;



Íàçíà÷åíèå: ñòðîèò ýòàï, èñïîëüçóÿ âûøåîïèñàííûå ïîäïðîãðàììû;



Âõîäíûå äàííûå: íåò; 

Âûõîäíûå äàííûå: íåò;



Òåêñò ïðîãðàììû:



program markedit;

uses graph,crt,mymouse;

type t_kubik=-10..640;

t_arr=array[1..494] of t_kubik;

var x,y:word;

f,f_s:text;

a:t_arr;

i:1..494;

procedure initgr;

var grdriver,grmode:integer;

begin

grdriver:=vga;

grmode:=vgahi;

initgraph(grdriver,grmode,'');

if GraphResult <> grOk then halt;

end;

procedure text_na_ekran;

var f:text;

a:char;

begin

assign(f,'stroika.txt');

reset(f);



textmode(1);

textbackground(3);

textcolor(0);

clrscr;

while not eof(f) do

begin

while not(eof(f)) do

begin

read(f,a);

write(a);

end;

writeln;

end;

while not(keypressed) do

case readkey of

' ':exit;

end;

close(f);

end;

function netu:boolean;

var k:1..494;

begin

for k:=1 to 494 do

begin

if a[k]=x then

if a[k+1]=y then

begin netu:=false; exit; end;

end;

netu:=true;

end;

procedure stroika;

var color:1..15;

pattern:1..12;

begin

if netu then

begin

writeln(f,x,' ',y);

a[i]:=x;

a[i+1]:=y;

inc(i,2);

color:=random(14)+1;

pattern:=random(11)+1;

setcolor(color);

setfillstyle(pattern,color);

bar3d(x,y,48+x,y-20,0,false);

end;

end;

procedure search_y;

begin

case y of

22..42: begin y:=42; stroika; end;

43..63: begin y:=63; stroika; end;

64..84: begin y:=84; stroika; end;

85..105: begin y:=105; stroika; end;

106..126:begin y:=126; stroika; end;

127..147:begin y:=147; stroika; end;

148..168:begin y:=168; stroika; end;

169..189:begin y:=189; stroika; end;

190..210:begin y:=210; stroika; end;

211..231:begin y:=231; stroika; end;

232..252:begin y:=252; stroika; end;

263..273:begin y:=273; stroika; end;

274..294:begin y:=294; stroika; end;

295..315:begin y:=315; stroika; end;

316..336:begin y:=336; stroika; end;

337..357:begin y:=357; stroika; end;

358..378:begin y:=378; stroika; end;

379..399:begin y:=399; stroika; end;

400..420:begin y:=420; stroika; end;

end;

end;

procedure build_level;

var buttoncount,errorcode:byte;

lb,rb,tb:boolean;

x_pred:word;

s,s_l:string;

number:0..10;

spusk:1..500;

code:integer;

begin

initmouse(buttoncount,errorcode);

cleardevice;

{à ¬ª }

setcolor(random(14)+1);

rectangle(0,21,getmaxx,getmaxy);

setcolor(brown);

s:='when finish --- press the right button of the mouse';

settextstyle(7{GothicFont},horizdir,2);

settextjustify(1,1);

outtextxy(getmaxx div 2,5,s);



setYrange(21,420);



setXrange(1,637);

assign(f,'level.den');

rewrite(f);

x:=10;y:=10;

setmouseXY(x,y);

x_pred:=0;

mouseon;

repeat

getmouseXY(x,y,lb,rb,tb);

if lb then begin

mouseoff;

if x<>x_pred then

case x of

1..49: begin x:=1; search_y; end;

50..98: begin x:=50; search_y; end;

99..147:begin x:=99; search_y; end;

148..196:begin x:=148; search_y; end;

197..245:begin x:=197; search_y; end;

246..294:begin x:=246; search_y; end;

295..343:begin x:=295; search_y; end;

344..392:begin x:=344; search_y; end;

393..441:begin x:=393; search_y; end;

442..490:begin x:=442; search_y; end;

491..539:begin x:=491; search_y; end;

540..588:begin x:=540; search_y; end;

589..637:begin x:=589; search_y; end;

end;

x_pred:=x;

mouseon; end;

until rb;

setfillstyle(1,black);

bar(4,getmaxy div 5-8,130,getmaxy div 5 +300+20);

setcolor(yellow);

s:='Save as: ';

spusk:=getmaxy div 5;

settextstyle(4{GothicFont},horizdir,4);

settextjustify(lefttext,centertext);

outtextxy(4,spusk,s);

for number:=1 to 10 do

begin

inc(spusk,30);

str(number,s_l);

s:='Level '+s_l;

settextstyle(4{GothicFont},horizdir,4);

settextjustify(lefttext,centertext);

outtextxy(4,spusk,s);

end;

close(f);

repeat

if keypressed then

begin

s:=readkey;

val(s,number,code);

case number of

0:begin

assign(f_s,'levels\level10.den');

erase(f_s);

rename(f,'levels\level10.den');

exit;

end

else if number in [1..9] then

begin

assign(f_s,'levels\level'+s+'.den');

erase(f_s);

rename(f,'levels\level'+s+'.den');

exit;

end;

end;

end;

until false;

end;

var j:1..494;

begin

{for j:=1 to 494 do

a[j]:=0;}

i:=1;

randomize;

text_na_ekran;

initgr;

build_level;

mouseoff;

closegraph;

end.



Ñïèñîê èñïîëüçóåìîé ëèòåðàòóðû:



ßí Áåëåöêèé «Òóðáî Ïàñêàëü ñ ãðàôèêîé äëÿ ïåðñîíàëüíûõ êîìïüþòåðîâ»

Walasek J.Konwersacyjne otoczenie programowe Pascala. WNT, Warsawa

Turbo Tutor. Borland International. Scotts Valley, California

Cherry G. Pascal Programming Structures. Reston Publishing Company. Reston, Virginia