Ãëàâíàÿ Ó÷åáíèêè - Ðàçíûå Ëåêöèè (ðàçíûå) - ÷àñòü 32
Ñòðîèòåëüíûõ Ìàòåðèàëîâ.
Âûïîëíèë:
Ñòóäåíò ôàêóëüòåòà ÀÏèÈÒ Ãðóïïû ÏÂ-22 Ðóêîâîäèòåëü:
Áåëãîðîä – 2000.
ÑÎÄÅÐÆÀÍÈÅ 1. ÏÐÅÄÈÑËÎÂÈÅ
2. ÂÂÅÄÅÍÈÅ
3. ÇÀÄÀÍÈÅ ÊÓÐÑÎÂÎÉ ÐÀÁÎÒÛ
4. ÏÐÀÂÈËÀ ÏÎËÜÇÎÂÀÍÈß ÏÐÎÃÐÀÌÌÎÉ «ÀÐÊÀÍÎÈÄ»
5. ÈÑÏÎËÜÇÓÅÌÛÅ ÑÒÐÓÊÒÓÐÛ ÄÀÍÍÛÕ
6. ÈÑÏÎËÜÇÓÅÌÛÅ ÌÎÄÓËÈ
7. ÑÏÅÖÈÔÈÊÀÖÈß ÏÎÄÏÐÎÃÐÀÌÌ
8. ÒÅÊÑÒ ÏÐÎÃÐÀÌÌÛ È ÑÊÎÍÑÒÐÓÈÐÎÂÀÍÍÛÕ ÌÎÄÓËÅÉ
9. ïðàâèëà ïîëüçîâàíèÿ äîïîëíèòåëüíîé ïðîãðàììîé äëÿ ïîñòðîåíèÿ óðîâíåé «MARKEDIT»
10. ÑÏÅÖÈÔÈÊÀÖÈß ÏÎÄÏÐÎÃÐÀÌÌ Â ÏÐÎÃÐÀÌÌÅ «MARKEDIT»
11. ÒÅÊÑÒ ÏÐÎÃÐÀÌÌÛ «MARKEDIT” È ÑÊÎÍÑÒÐÓÈÐÎÂÀÍÍÛÕ ÌÎÄÓËÅÉ
12. ÑÏÈÑÎÊ ÈÑÏÎËÜÇÓÅÌÎÉ ËÈÒÅÐÀÒÓÐÛ
ßçûê Òóðáî Ïàñêàëü – ýòî îäèí èç ñàìûõ ðàñïðîñòðàí¸ííûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ ìèêðîêîìïüþòåðîâ. Îí ðàçðàáîòàí ôèðìîé «Áîðëàíä» êàê äèàëåêò ñòàíäàðòíîãî ÿçûêà Ïàñêàëü, íî áëàãîäàðÿ ñâîåé ïîïóëÿðíîñòè ñàì ñòàë ñòàíäàðòîì ÿçûêà ïðîãðàììèðîâàíèÿ 8- è 16-ðàçðÿäíûõ ìèêðîêîìïüþòåðîâ. Ê âàæíåéøèì äîñòîèíñòâàì ÿçûêà Òóðáî Ïàñêàëü îòíîñÿòñÿ íåáîëüøîé ðàçìåð êîìïèëÿòîðà, âûñîêàÿ ñòåïåíü ñîîòâåòñòâèÿ ñòàíäàðòíîìó Ïàñêàëþ, î÷åíü áûñòðàÿ êîìïèëÿöèÿ ïðîãðàìì, îáúåäèíåíèå êîìïèëÿòîðà ñ èíòåðàêòèâíûì ýêðàííûì ðåäàêòîðîì, ïðåäóïðåæäåíèå îá îøèáêàõ íà óðîâíå èñõîäíîé ïðîãðàììû, îáøèðíàÿ áèáëèîòåêà ïîäïðîãðàìì è ïîëåçíûå ðàñøèðåíèÿ, óïðîùàþùèå ñèñòåìíîå ïðîãðàììèðîâàíèå.
Îäíîé èç îñíîâíûõ ïðîáëåì, ñ êîòîðîé ñòàëêèâàþòñÿ â ïðîöåññå ïðîãðàììèðîâàíèÿ, ÿâëÿåòñÿ íàïèñàíèå ïðîãðàììû, íå ñîäåðæàùåé îøèáîê. Îøèáêó íàèáîëåå ïîëíî ìîæíî îïðåäåëèòü êàê ðàñõîæäåíèå ïîâåäåíèÿ ïðîãðàììû ñ îæèäàíèÿìè ïîëüçîâàòåëÿ. Ñþäà âõîäèò êàê íåñîîòâåòñòâèå ðåçóëüòàòîâ èñõîäíûì äàííûì, òàê è äðóãèå, ïîðîé áîëåå îïàñíûå ýôôåêòû: çàöèêëèâàíèå, àâàðèéíàÿ îñòàíîâêà ïðîãðàìì è ò.ï.
Íàèáîëåå ÿâíî íàáëþäàåìûìè èñòîðè÷åñêèìè òåíäåíöèÿìè â ïðîãðàììèðîâàíèè ÿâëÿþòñÿ íåïðåðûâíûé ðîñò ïîëüçîâàòåëüñêèõ òðåáîâàíèé, ëàâèíîîáðàçíîå óñëîæíåíèå ôóíêöèîíàëüíîñòè ïðîãðàììû è, êàê ñëåäñòâèå, - óñëîæíåíèå å¸ ðàçðàáîòêè. ñâÿçè ñ óâåëè÷åíèåì òðóäî¸ìêîñòè ïðîãðàìíûõ ñðåäñòâ âîçíèêëà íåîáõîäèìîñòü âûðàáîòêè èíòåëëåêòóàëüíûõ èíñòðóìåíòîâ, ïîçâîëÿþùèõ ðàçðàáîò÷èêàì ñïðàâëÿòüñÿ ñ âîçðîñøåé ñëîæíîñòüþ ñâîåãî òðóäà.
 íàñòîÿùèé ìîìåíò ìîæíî óòâåðæäàòü, ÷òî ïðàêòè÷åñêè êàæäàÿ ïðîãðàììà ñîñòàâëÿåòñÿ ñ ïðèìåíåíèåì òîé èëè èíîé òåõíîëîãèè ïðîãðàììèðîâàíèÿ.
«Â ñâÿçè ñ òåì,÷òî çà ïîñëåäíèå äåñÿòü èëè ïÿòüíàäöàòü ëåò ïðîèçâîäèòåëüíîñòü âû÷èñëèòåëüíûõ ìàøèí óâåëè÷èëàñü â òûñÿ÷è ðàç, ïîëüçîâàòåëè ñòàëè ãîðàçäî áîëåå áåñöåðåìîííûìè ïðè âûáîðå ïðîáëåì, êîòîðûå îíè ñ÷èòàþò «òåõíè÷åñêè ðàçðåøèìûìè». Ïîëüçîâàòåëè õîòÿò, ÷òîáû ðàçìåðû, ñëîæíîñòü è èçîùð¸ííîñòü ïðîãðàìì óâåëè÷èâàëàñü èñêëþ÷èòåëüíî áûñòðûìè òåìïàìè, è â ïîñëåäíèå ãîäû ñòàëî î÷åâèäíûì, ÷òî â öåëîì íàøè ïðîãðàììèñòñêèå âîçìîæíîñòè íå ïîñïåâàþò çà ýòèìè íåóìåðåííûìè àïïåòèòàìè».
Ïî ìåðå òîãî, êàê ìîùü êîìïüþòåðîâ ðîñëà, à îáëàñòü ïðèìåíåíèÿ âñ¸ ðàñøèðÿëàñü, óâåëè÷èâàëèñü íå òîëüêî ðàçìåðû, è ñëîæíîñòü ïðîãðàìì, íî è êîëè÷åñòâî îøèáîê â íèõ.
Ãëàâíîé çàäà÷åé ñîâðåìåííîãî ïðîãðàììèñòà ïðè íàïèñàíèè ïðîãðàììû ÿâëÿåòñÿ íå ïîäâåãàíèå å¸ áåñêîíå÷íûì òåñòèðîâàíèÿì, à òùàòåëüíûé, ïîëíûé àíàëèç èñõîäíîãî òåêñòà ïðîãðàììû, à òàêæå îòëàäêà ïðîãðàììû ñ ïîìîùüþ äîïîëíèòåëüíûõ ïðîãðàìíûõ ñðåäñòâ.
Ðàçðàáîòàòü àëãîðèòì èãðû «ÀÐÊÀÍÎÈÄ», öåëü êîòîðîé çàêëþ÷àåòñÿ â íàáîðå êàê ìîæíî áîëüøåãî êîëè÷åñòâà î÷êîâ, êîòîðûå óâåëè÷èâàþòñÿ ïðè âûáèâàíèè î÷åðåäíîãî êóáèêà. Ïðè âûáèâàíèè âñåõ êóáèêîâ òåêóùåãî óðîâíÿ îñóùåñòâëÿåòñÿ ïåðåõîä íà ñëåäóþùèé óðîâåíü, êîëè÷åñòâî êîòîðûõ – äåñÿòü.
 êîíöå èãðû â çàâèñèìîñòè îò êîëè÷åñòâà íàáðàííûõ î÷êîâ, ââåä¸ííîå ïî çàïðîñó ïðîãðàììû èìÿ èãðîêà äîëæíî áûòü çàíåñåíî â äåñÿòêó ëó÷øèõ è çàïèñàíî â ôàéë.
Íàä ðàìêîé, â òå÷åíèå èãðû äîëæíû îòîáðàæàòüñÿ:
1) ¹ òåêóùåãî ýòàïà;
2) êîëè÷åñòâî îñòàâøèõñÿ æèçíåé, ïåðâîíà÷àëüíî êîòîðûõ – 10;
1. êîëè÷åñòâî îñòàâøèõñÿ êóáèêîâ;
2. êîëè÷åñòâî íàáðàííûõ î÷êîâ.
Ïðàâèëà ïîëüçîâàíèÿ ïðîãðàììîé:
1. çàïóñòèòü MARKBALL.EXE
2. âûáðàòü ÷åì èãðàòü:
2a) ìûøü
2á) êëàâèàòóðà
3. âûáðàòü ñêîðîñòü øàðèêà
4. âûáðàòü ðàçìåð ïëàíêè
Èñïîëüçóåìûå ñòðóêòóðû äàííûõ:
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 – ìàêñèìàëüíîå êîëè÷åñòâî êóáèêîâ;
Èñïîëüçóåìûå ìîäóëè:
Ñòàíäàðòíûå:
1. CRT;
2. GRAPH;
3. WINDOS – ìîäóëü òðåáóåìûé ñêîíñòðóèðóåìûì ìîäóëåì MYMOUSE;
4. STRINGS – ìîäóëü òðåáóåìûé ñêîíñòðóèðóåìûì ìîäóëåì MYMOUSE;
Ñêîíñòðóèðîâàííûå:
1. MARKEL – îñíîâíûå èãðîâûå ïîäïðîãðàììû;
2. MARK_ZAS – ñîäåðæèò èíñòðóìåíòàðèé èíòåðôåéñà (çàñòàâêà, ïîìîùü, ñ÷¸ò ëó÷øèõ èãðîêîâ â êîíöå èãðû);
3. MYMOUSE – ðàáîòà ñ ìûøüþ
Ñïåöèôèêàöèÿ ïîäïðîãðàìì:
Ìîäóëü MARKEL
1. 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);
Íàçíà÷åíèå: îïðåäåëÿåò êîñíóëñÿ ëè øàðèê êóáèêà î âåðõíþþ èëè íèæíþþ ãðàíü;
Âõîäíûå äàííûå:
2. dy – íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè Y;
3. x,y – òåêóùèå êîîðäèíàòû öåíòðà øàðèêà;
4. i – çíà÷åíèå, îò êîòîðîãî çàâèñèò êàêèå êóáèêè ïðîâåðÿòü íà ñáèâàíèå;
5. a – ìàññèâ êîîðäèíàò êóáèêîâ;
6. kol_kub – êîëè÷åñòâî êóáèêîâ íà äàííûé ìîìåíò;
Âûõîäíûå äàííûå:
7. dy – èçìåí¸ííîå íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè Y;
8. a – èçìåí¸ííûé ìàññèâ êîîðäèíàò êóáèêîâ;
9. kol_kub – èçìåí¸ííîå êîëè÷åñòâî êóáèêîâ;
6. procedure bok_bok(var dx:t_dx_dy;x,y:t_kubik;var a:t_arr;var kol_kub:kol_kubik);
Íàçíà÷åíèå: îïðåäåëÿåò êîñíóëñÿ ëè øàðèê êóáèêà î ëåâóþ èëè ïðàâóþ ãðàíü;
Âõîäíûå äàííûå:
10. dx – íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè X;
11. x,y – òåêóùèå êîîðäèíàòû öåíòðà øàðèêà;
12. a – ìàññèâ êîîðäèíàò êóáèêîâ;
13. kol_kub – êîëè÷åñòâî êóáèêîâ íà äàííûé ìîìåíò;
Âûõîäíûå äàííûå:
14. dx – èçìåí¸ííîå íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñè X;
15. a – èçìåí¸ííûé ìàññèâ êîîðäèíàò êóáèêîâ;
16. 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);
Íàçíà÷åíèå: îïðåäåëÿåò êîñíóëñÿ ëè øàðèê êóáèêà îá óãëû;
Âõîäíûå äàííûå:
17. dx,dy – íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñÿì X è Y;
18. x,y – òåêóùèå êîîðäèíàòû öåíòðà øàðèêà;
19. a – ìàññèâ êîîðäèíàò êóáèêîâ;
20. kol_kub – êîëè÷åñòâî êóáèêîâ íà äàííûé ìîìåíò;
Âûõîäíûå äàííûå:
21. dx,dy – èçìåí¸ííîå íàïðàâëåíèå äâèæåíèÿ øàðèêà ïî îñÿì X è Y;
22. a – èçìåí¸ííûé ìàññèâ êîîðäèíàò êóáèêîâ;
23. 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 – êîîðäèíàòû øàðèêà, êîòîðûå è íóæíî çàïèñàòü â ìàññèâ;
24. i – ïåðåìåííàÿ îò êîòîðîé çàâèñèò ñ êàêîãî íîìåðà èñêàòü ïîäõîäÿùåå ìåñòî äëÿ êîîðäèíàò êóáèêà;
25. a – ìàññèâ êîîðäèíàò êóáèêîâ;
Âûõîäíûå äàííûå: íåò
11. procedure level(var a:t_arr;const numbering:byte;var kol_kub:kol_kubik);
Íàçíà÷åíèå: îòêðûâàåò ôàéë è ñ÷èòûâàÿ ñ íåãî êîîðäèíàòû êóáèêîâ, ðèñóåò èõ;
Âõîäíûå äàííûå:
1. a – ìàññèâ êîîðäèíàò êóáèêîâ;
2. numbering – íîìåð îòêðûâàåìîãî ýòàïà;
3. kol_kub – êîëè÷åñòâî êóáèêîâ;
Âûõîäíûå äàííûå:
1. a – ìàññèâ êîîðäèíàò êóáèêîâ;
2) kol_kub – êîëè÷åñòâî íàðèñîâàííûõ êóáèêîâ;
12. procedure left(const koeff:byte;var x1_dv,x2_dv:t_kubik);
Íàçíà÷åíèå: äâèæåíèå ïëàíêè âëåâî;
Âõîäíûå äàííûå:
1) koeff – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;
2. x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;
Âûõîäíûå äàííûå:
x1_dv,x2_dv – èçìåíèâøèåñÿ êîîðäèíàòû ïëàíêè ïî îñè Õ;
13. procedure right(const koeff:byte;var x1_dv,x2_dv:t_kubik);
Íàçíà÷åíèå: äâèæåíèå ïëàíêè âïðàâî;
Âõîäíûå äàííûå:
1) koeff – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;
3. 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 – êîýôôèöèåíò, îò êîòîðîãî çàâèñèò ðàçìåð ïëàíêè;
1. x,y – êîîðäèíàòû øàðèêà;
2. x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;
Âûõîäíûå äàííûå:
3. x,y – êîîðäèíàòû øàðèêà;
4. 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 – êîîðäèíàòû øàðèêà;
5. x1_dv,x2_dv – êîîðäèíàòû ïëàíêè ïî îñè Õ;
Âûõîäíûå äàííûå:
1. x,y – êîîðäèíàòû øàðèêà;
2. 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. Äîïîëíèòåëüíàÿ ïðîãðàììà äëÿ ïîñòðîåíèÿ ñîáñòâåííûõ óðîâíåé : Ïðàâèëà ïîëüçîâàíèÿ ïðîãðàììîé:
1. çàïóñòèòü MARKEDIT.EXE
2. íàæèìàÿ ëåâóþ êíîïêó ìûøè ñòàâèòü(ðèñîâàòü) êóáèêè;
3. ïîñëå ïîñòðîåíèÿ óðîâíÿ íàæàòü ïðàâóþ êíîïêó ìûøè;
4. ïîñëå ïîÿâëåíèÿ ìåíþ íîìåðîâ óðîâíåé âûáðàòü íîìåð ñîõðàíÿåìîãî óðîâíÿ (ôàéëà);
Ñïåöèôèêàöèè ïîäïðîãðàìì:
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;
|