Арканоид на Паскале
Àðêàíîèä íà Ïàñêàëå
Ìèíèñòåðñòâî îáùåãî è ïðîôåññèîíàëüíîãî îáðàçîâàíèÿ ÐÔ
Áåëãîðîäñêàÿ Ãîñóäàðñòâåííàÿ Òåõíîëîãè÷åñêàÿ Àêàäåìèÿ
Ñòðîèòåëüíûõ Ìàòåðèàëîâ.
Êàôåäðà ÏÎÂÒèÀÑ
Âûïîëíèë:
Ñòóäåíò ôàêóëüòåòà ÀÏèÈÒ
Ãðóïïû ÏÂ-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 or(x+radius-1=a[i])or((x+radius-1>a[i])and(x+radius-1 then izchez(dx,dy,a,kol_kub,i); if y+radius-1=a[i+1]-20 then

Нравится материал? Поддержи автора!
Ещё документы из категории информатика:
Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.
После чего кнопка «СКАЧАТЬ» станет доступной!
Кнопочки находятся чуть ниже. Спасибо!
Кнопки:
Скачать документ