Міністерство освіти РФ. p>
ІжГТУ. p>
Кафедра Радіотехніки. p>
Курсова робота p>
з інформатики. p> < p> Тема: "Створення гри". p>
Перевірив: p>
Старший викладач p>
Сідоріна В.А. p>
Виконав: p>
Студент гр.2-29-1 p>
Скворцов Я.А. p>
Іжевск.2003. p>
Зміст p>
Стор. p>
Введення --------------------------------------- ---------------------- p>
------------------- 3
1 Постановка завдання ----------------------------------------- --------- p>
---------------- 4 p>
2 Алгоритми та блок-схеми ---- ----------------------------------------- p>
-- ---------- 5 p>
3 Програма на мові Pascal з коментарями ------------------------- - p>
------ 6 p>
4 Керівництво користувача для роботи в програмі --------------------
--- 16 p>
Висновок -------------------------------- --------------------------- p>
---------------- -17 p>
Список використаної літератури -------------------------------------
-------- 18 p>
ВСТУП: p>
Основною метою даного курсового проекту є закріплення і демонстрація знань, отриманих при вивченні курсу інформатики. p>
Виконання роботи вимагає творчого підходу і застосування додаткових знань з галузі графіки. Курсовий проект не передбачає подальшого комерційного використання даного програмного продукту. P>
1 Постановка завдання. P>
Потрібно створити гру, основним змістом якої є те, що в одній частині екрана переміщуються об'єкт-(об'єкти) одного типу ( «Літаки»), а в іншій частині екрана знаходиться об'єкт іншого типу ( «Засіб протиповітряної оборони»), і «Засіб ППО» повинно збивати «Літаки». а) Вибір, обгрунтування і виклад методу розв'язання задачі. p>
Я вважав за краще використання динамічної пам'яті, промальовування текстур в окремою процедурою і звуковий супровід. p>
З динамічною пам'яттю в даному випадку дуже зручно організувати одночасне переміщення динамічних об'єктів по екрану з мінімальним мерехтінням екрана. p>
Промальовування текстур в окремій процедурі зручна тим, що при бажанні є можливість промальовувати об'єкт, що рухається не вникаючи особливо програми. p>
Звуковий супровід через системний динамік привертає користувача до отримання приємних відчуттів при використанні програми. б) Побудова алгоритму завдання. p>
Програма починається з меню, якщо ж вибір впав на меню «Програма» то спочатку в динамічну пам'ять заносяться «чисті» квадрати екрану, потім послідовно на екран виводяться зображення динамічних об'єктів і послідовно ж заносяться в динамічну пам'ять. «Чисті» квадрати при цьому накладаються на зарисовані область екрану, щоб при скануванні наступних зображень не виникало конфузів. P>
Далі в залежності від натиснутих клавіш динамічні об'єкти рухаються так чи інакше. в) Створення та налагодження програми. p>
Створення програми складалося з трьох етапів: створення меню, створення основного тіла гри у вигляді окремої процедури без промальовування текстур і остаточна промальовування текстур. г) Оформлення пояснювальної записки та захист курсового проекту. p>
2 Блок-схема. p>
p>
3 Програма на мові Pascal c коментарями. p>
program jim; uses crt, graph; label 1,3; var a: char; b: integer; procedure beep; (Видача звуку) begin sound (300); delay (6000); nosound; delay (700); end; procedure zemlya; (промальовування нижній частині екрана) begin setcolor (3); line (0,55,640,55); line (0,479,0,430); line (0,430,639,430); line (639,430,639,479); line (639,479,0,479); setfillstyle ( 7,5); floodfill (10,470,3); end; procedure PVO; (Промальовування засоби ППО) begin setcolor (6); line (5,37,45,37); line (45,37,47,39); line (47,40,37,50); line (37,50,7,50); line (7,50,3,39); line (3,38,5,37); circle (15,43, 6); circle (30,43,6); circle (6,39,2); circle (44,39,2); setfillstyle (1,6); floodfill (41,43,6); floodfill (22, 49,6); floodfill (7,43,6); floodfill (10,39,6); setcolor (2); line (3,39,3,34); line (3,34,20,34); line (21,34,21,23); line (21,23,33,23); line (33,23,47,36); line (47,36,47,36); line (47,36, 3,36); line (36,26,29,26); line (29,27,30,30); line (31,31,42,31); setfillstyle (1,2); floodfill (26,32 , 2); setcolor (9); line (8,33,8,23); line (9,24,9,13); line (9,13,11,12); line (11,12,11, 9); line (11,12,13,13); line (13,13,13,24); line (14,23,14,33); line (8,28,3,33); line (3 , 33,19,33); line (19,33,14,28); setfillstyle (1,9); floodfill (11,28,9); line (21,24,24,24); line (21, 25,24,25); setcolor (4); line (21,26,25,26); line (21,27,25,27); setcolor (15); line (21,28,26,28); line (21,29,26,29); p>
end; procedure NLO; (промальовування літаючої тарілки) var l: integer; begin randomize; l: = random (256); setcolor (l); line (9,8,7,8); line (7,9,5,9); line (5,10,3,10); line (3,11,1,11); line (1,11,1 , 13); line (2,14,4,14); line (3,15,5,15); line (5,16,8,16); line (7,17,10,17); line ( 10,18,16,18); line (16,19,35,19); line (35,18,41,18); line (41,17,44,17); line (44,16,46, 16); line (46,15,48,15); line (48,14,49,14); line (49,14,49,11); line (49,11,48,11); line (48 , 10,46,10); line (46,9,44,9); line (44,8,41,8); line (41,7,41,9); line (41,9,40,9 ); line (40,10,37,10); line (37,11,33,11); line (33,12,17,12); line (17,11,13,11); line (13, 10,10,10); line (10,9,9,8); setfillstyle (1, l); floodfill (24,15, l); putpixel (31,16,0); putpixel (42,12,0 ); putpixel (18,16,0); putpixel (7,13,0); setcolor (11); line (18,11,32,11); line (32,10,36,10); line (36 , 9,39,9); line (40,8,40,5); line (39,4,36,4); line (36,3,32,3); line (32,2,18,2 ); line (18,3,14,3); line (14,4,11,4); line (10,5,10,8); line (11,9,14,9); line (14, 10,18,10); setfillstyle (1,11); floodfill (25,7,11); end; procedure pulka; (Промальовування снаряда) begin setcolor (5); line (2,6,2,3); line (3,6,3,0); line (4,6,4,3); setcolor (13); line (3,8,3,7); setcolor (14); line (1,5,1, 7); line (2,7,2,9); putpixel (3,9,14); line (4,7,4,9); line (5,5,5,7); end; procedure gameover ( b, v: integer); (приписи при виграші однієї var u, o: integer; зі сторін) i: ^ integer; siz: word; begin siz: = imagesize (0,100,1,100); getmem (i, siz); getimage (0,100,1,100, i ^); if v> 500 then begin outtextxy (300,240, 'Y'); beep; outtextxy (308,240, 'o'); beep; outtextxy (316,240, 'u'); beep; outtextxy ( 324,240 ,'_'); beep; outtextxy (332,240, 'W'); beep; outtextxy (340,240, 'I'); beep; outtextxy (348,240, 'N'); beep; end; if b> 500 then begin outtextxy (300,240, 'G'); beep; outtextxy (308,240, 'a'); beep; outtextxy (316,240, 'm'); beep; outtextxy (324,240, 'e'); beep; outtextxy (332,240, '_ '); beep; outtextxy (340,240,' O '); beep; outtextxy (348,240,' v '); beep; outtextxy (356,240,' e '); beep; outtextxy (364,240,' r '); beep; delay (45000); outtextxy (330,260 ,':'); beep; outtextxy (338,260 ,'-'); beep; outtextxy (346,260 ,'>'); beep; end; delay (64500); delay (64500); delay (64500); for u: = 0 to 640 do for o: = 0 to 480 do begin putimage (u, o, i ^, copyput); end; end; procedure jim; (Безпосередньо гра) label 2,3; var i, j, x, y, m, n, v, b: integer; key: boolean; s, ss, s1, s2, s3: word; p, pp, p1, p2, p3: pointer; (рр-порожній квадрат; р- p>
ППО ...; р1-пулька) begin i: = 9; j: = 2; initgraph (i, j ,''); p>
3: ss: = imagesize (0,430,50,480); a: = 'y'; getmem (pp, ss); getimage (0,430,50,480, pp ^); s: = imagesize (0,0,50,50); getmem ( p, s); p>
PVO; getimage (0,0,50,50, p ^); putimage (0,0, pp ^, copyput); s1: = imagesize (0,0,5 , 10); getmem (p1, s1); pulka; getimage (0,0,5,10, p1 ^); putimage (0,0, pp ^, copyput); s2: = imagesize (0,0,5, 10); (р2-маленький квадратик кульки) getmem (p2, s2); getimage (0,0,5,10, p2 ^); s3: = imagesize (0,0,50,20); getmem (p3, s3 ); p>
NLO; getimage (0,0,50,20, p3 ^); putimage (0,0, pp ^, copyput); zemlya; x: = 200; y: = 379; putimage (x, y, p ^, copyput); v: = 0; b: = 0; delay (45000); delay (45000); repeat (Початок самого процесу гри) for n: = 1 to 1770 do begin putimage (round (n/3), 60, p3 ^, copyput); if n> 1760 then begin putimage (round (n/3), 60, pp ^, copyput); sound (300); delay (100); nosound; end ; key: = keypressed; if key = false then goto 2; a: = readkey; p>
if a = chr (77) then begin x: = x 3; if x> 580 then begin p>
putimage (x, y, pp ^, copyput); x: = 10; end; putimage (x, y, p ^, copyput); p>
end; if a = chr ( 75) then begin x: = x-3; if x500 then begin gameover (b, v); goto 3; end; p>
if a = chr (113) then begin v: = 550; gameover ( b, v); goto 3; end; until a = chr (27); end; begin (Основна програма) p>
1: clrscr; gotoxy (30,10); write ( 'Вступ'); gotoxy (30,11); write ( 'Постановка завдання'); gotoxy (30,12); write ( 'Математичні методи ...'); gotoxy (30,13); write (' Опис даних '); gotoxy ( 30,14); write ( 'Алгоритми та блок-схеми'); gotoxy (30,15); write ( 'ПРОГРАМА'); gotoxy (30,16); write ( 'Текстові приклади'); gotoxy (30,17 ); write ( 'Керівництво користувачу'); gotoxy (30,18); write ( 'Висновок'); gotoxy (30,19); write ( 'Список літератури'); (Це все менюшки) gotoxy (26,10) ; write ('>>>'); gotoxy (25,10); repeat a: = readkey; if a = chr (80) then begin (рух курсору вниз) b: = wherey; gotoxy (26, b); write ( ''); if b> = 19 then b: = 9; gotoxy (26, b +1); write ('>>>'); gotoxy (25, b +1); sound (3000); delay ( 1000); nosound; end; if a = chr (72) then begin (рух курсору вгору) b: = wherey; gotoxy (26, b); write ( ''); if b >>'); gotoxy (25, b-1); sound (4000); delay (1000); nosound; end; if a = chr (13) then begin (Опитування клавіші ENTER) b: = wherey; if b = 19 then begin (Список літератури) sound ( 3000); delay (1000); nosound; clrscr; gotoxy (30, b); write ( 'Книжка по Турбо- p>
Паскалю'); repeat a: = readkey; until a = chr (13) ; sound (4000); delay (1000); nosound; goto 1; end; if b = 10 then begin (Вступ) sound (3000); delay (1000); nosound; clrscr; gotoxy (30, b); writeln ( 'Основною метою даного курсового проекту'); gotoxy (30, b +1); writeln ( 'є закріплення і демонстрація знань,'); gotoxy (30, b +2); writeln ( 'отриманих при вивченні курсу інформатики'); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1; end; if b = 11 then begin (Постановка завдання) sound (3000); delay (1000) ; nosound; clrscr; gotoxy (30, b); write ( 'зробити гру: Літалки-стрілялку'); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1; end; if b = 18 then begin (Висновок) sound (3000); delay (1000); nosound; clrscr; gotoxy (30, b); write ( 'Мені сподобалася моя прога :-)'); repeat a : = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1; end; if b = 17 then begin (керівництво користувачеві) sound (3000); delay (1000); nosound ; clrscr; gotoxy (30, b); write ( 'Якщо Ви в цій проге нічого не поміняєте'); gotoxy (30, b +1); write ( 'вона буде працювати p>
ВІЧНО ... '); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1; end; if b = 12 then begin (математичні методи) sound (3000); delay (1000); nosound; clrscr; gotoxy (30, b); write ( 'Завдання сама по собі не математична,'); gotoxy (30, b +1); write ( 'значить і математичних методів ніяких немає'); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1; end; if b = 13 then begin (Опис даних) sound (3000); delay (1000); nosound; clrscr; gotoxy (30, b); write ( 'Даних немає ...'); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1 ; end; if b = 14 then begin (Алгорітм.блок-схема) sound (3000); delay (1000); nosound; clrscr; gotoxy (30, b); write ( 'Дивись p>
Пояснітелную записку '); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000); nosound; goto 1; end; if b = 16 then begin (Текстові приклади) sound (3000); delay (1000); nosound; clrscr; gotoxy (30, b); write ( 'Текстових прикладів в мене теж немає'); repeat a: = readkey; until a = chr (13); sound (4000); delay (1000) ; nosound; goto 1; end; if b = 15 then begin sound (3000); delay (1000); nosound; jim; closegraph; goto 1; end; end; until a = chr (27); end. p >
4 Керівництво користувача для роботи в програмі. p>
При запуску програми з'являється меню, що пропонує широкий вибір пунктів. p>
Курсор переміщується за допомогою клавіш курсору, вибір здійснюється клавішею ENTER.
При виборі будь-якого пункту меню з'являється відповідне повідомлення, проте ж, при виборі пункту «Програма» запускається безпосередньо сама гра. p>
Суть гри полягає в збиванні літаючих тарілок засобом ППО. p>
Засіб ППО може за допомогою курсору переміщатися по екрану в горизонтальному напрямку. При натисканні клавіші «пробіл» засіб ППО здійснює постріл. Якщо снаряд попадає в літаючу тарілку, то вона вважається збитою і зараховується до фонду гравця, що символізується появою значка снаряда у верхньому правому куті. Якщо ж випущені снаряди не досягають мети і літаюча тарілка долітає до правого краю екрану, то це зазначається також у правому верхньому кутку появою значка літаючої тарілки. P>
Гравець програє у разі досягнення числа не збитих тарілок правого краю екрана.
Гравець виграє в разі досягнення числа збитих тарілок правого краю екрана. p>
Після програшу або виграшу гра повторюється. p>
Висновок. p>
У процесі налагодження програми виникли складності з тим, що при скануванні повного екрану і наступному використанні цього об'єкта програма починала різко сповільнювати швидкість своєї роботи. Подолання цієї перешкоди полягало в скануванні невеликих частин екрану і подальшого їх використання. P>
тривалий також процес детальної промальовування графіки. P>
Необхідно, щоб в тій папці, де лежить ця програма, знаходився файл egavga . bgi. Цей файл є в багатьох версіях ТР в папці bin, він відповідає за ініціалізацію графіки. P>
Список використаної літератури. P>
1 Меженний О.А. «Turbo Pascal-вчіться програмувати»; Москва- p>
С. Петербург-Київ; «Діалектика»; 2001; 448с. P>
2 Бабушкін І.А.; «Практикум з ТР» -навчальний посібник з курсів ІХТ; p>
Москва, 1998. p>
3 http://www.freepascal.org; p>
4 http://www. geocities.com/~ franzglaser/tp.htm; p>
5 http://www.garbo.uwasa.fi/pc/turboobj.html; p>
p>