Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
26
PAGE 3
Пояснювальна записка: ___ аркушів, ___ додаток, ___ малюнка,___ джерела.
Об'єкт розробки - комп'ютерна гра «Pacman».
Ціль роботи розробити компютерну гру «Pacman». Більш докладно вивчити можливості мови програмування Object Pascal та середовища розробки Borland Delphi а також технології обєктно-орієнтованого програмування; відробити основні етапи створення програм: постановку задачі, вибір методу рішення, розробка алгоритму, складання програми, занесення програми у память комп'ютера, налагодження програми і її тестування.
Загальна частина містить відомості про об'єкт розробки.
У спеціальній частині приводяться етапи написання програми для ЕОМ.
[1] Реферат
[2] [3] Обєктно-ориєнтоване програмування було оголошено як технологія, котра дозволить в кінці кінців конструювати програми з багатократних використовуючи компонент загального призначення. Автори зайшли так далеко, що вже говорили про обєктно-орієнтованим підході як о представнику «промислової революції» в розробці програмного забезпечення. Доки дійсність не зовсім відповідає очікуванням піонерів ООП. Що дійсно справедливо так це те, що ООП дозволяє вмонтовувати багатократно використовуючи програмні компоненти ще інтенсивніше, ніж раніше. [4] РОЗРОБКА ГРИ «Pacman» [5] 1.1 Постановка задачі [6] 1.2 Ціль розробки програми [7] НАПИСАННЯ ГРИ «PACMAN» [8] 2.1 Структура програми [9] 2.1.1 Модулі [10] 2.2 Робота з програмою [11] 2.3 Екранні форми [12] ЛІТЕРАТУРА [13] ДОДАТОК А [14] ЛІСТИНГ ПРОГРАМИ |
ВСТУП
Object Pascal об'єктно-орієнтований нащадок мови програмування Pascal, відоміший як основна мова програмування середовища Delphi.
Компанія Borland використовувала назву «Object Pascal» для мови програмування у перших версіях RAD Delphi, проте пізніше назвала її «мовою програмування Delphi».
Середовище Delphi містить у собі повний набір візуальних інструментів для швидкої розробки програм, що підтримує розробку інтерфейсу користувача та підключення до корпоративних баз даних.
Саму розробку програми можна поділити на дві частини: візуальну та алгоритмічну.
Застосування ООП дозволяє розробляти програмне забезпечення підвищеної складності за рахунок поліпшення його технологічності (кращих механізмів поділу даних, збільшення повторюваності кодів, використання стандартизованих інтерфейсів користувача й т.д.)
Об'єктно - орієнтоване програмування (ООП) це модель програмування яка базується на стверджені того, що програма це сукупність обєктів які взаємодіють між собою. Кожен обєкт в цій моделі є незалежним, і він здатний отримувати, обробляти дані та відправляти ці дані іншим обєктам.
Основним поняттям ООП є об'єкт. Об'єкт можна визначити як певну сукупність даних(характеристик об'єкта) та методів роботи з ними. Для класифікації об'єктів у ООП використовують класи. Клас служить зразком для створення обєкту, тобто об'єкт є нічим іншим, ніж копією класу.
Кожен об'єкт має процедури і функції(те що він уміє виконувати, наприклад, завантажувати файл, відображати картинку і т.д.), які служать для роботи з даними об'єкта. Ці процедури і функції називаються методами.
Обєктно-ориєнтоване програмування (ООП) стало надмірно популярним в останні декілька років. ООП являється лише останньою ланкою у довгому ланцюгу рішень, котрі були приложені для дозволу «кризи програмного
забезпечення».
Класи в обєктно орієнтованим програмуванні мають декілька різних форм і використовуються для різних цілей. Наступні категорії охоплюють велику частину класів:
Цей список не являється вичерпаним,він достатньо підходить для
учбових цілей.
Механізми багатократного використовування - це тільки перший крок.
Спадковість та композиція забезпечують засоби багатокаратного використання, але щоб бути ефективними, вони повинні застосовуватися єдиному середовищі розробки, котра розпологає підтримкою багатократного
вико
ристання.
Клас - це безліч об'єктів, зв'язаних спільністю структури й поводження. Будь-який об'єкт є екземпляром класу. Визначення класів і об'єктів - одне із самих складних завдань обєктно-ориєнтованого проектування.
Певний вплив одного об'єкта на іншій з метою викликати відповідну реакцію називається операцією. Як правило, в об'єктних і обєктно-риєнтованих мовах операції, виконувані над даним об'єктом, називаються методами і є складовою частиною визначення класу.
Визначення похідних класів, при якому задаються тільки розходження або уточнення, у величезному ступені заощаджує час і зусилля при виробництві й використанні специфікацій і програмного коду.
1 ЗАГАЛЬНА ЧАСТИНА
Програма представляє собою невелику гру в котрій можна проявити себе на кмітливість. Завдання гравця зібрати всі білі крапки на рівні, керуючи pacman-ом, уникаючи зіткнень з привидами. Рівень закінчується, коли з'їдені всі крапки.
Більш докладно вивчити можливості мови програмування Object Pascal та середовища розробки Borland Delphi а також технології обєктно-орієнтованого програмування.
Основною метою розробки програми є навчання складання алгоритму програми, використання процедур і функції, написаних користувачем, а так само, використання стандартних функцій і процедур бібліотек Object Pascal. Відробити основні етапи створення програм: постановку задачі, вибір методу рішення, розробку алгоритму, тестування.
2 СПЕЦІАЛЬНА ЧАСТИНА
Програма використовує наступні модулі:
Модуль UNIT1 в якому описані обєкти (їх властивості та методи) що розташовані на головній формі програми.
Обєкти:
fon: TImage; |
Компонент який виводить графічні обєкти на головну форму програми. |
sb: TStatusBar; |
Виводить на екран кількість життів, кількість зїдених крапок, кількість залишившихся крапок що знаходиться на панелі. |
N2: TMenuItem; |
Початок гри. |
N3: TMenuItem; |
Вихід з гри. |
N4: TMenuItem; |
Пункт з інформацією |
MainMenu1: TMainMenu; |
Головне меню програми. |
Timer1: TTimer; |
Компонент за яким проходить гра |
procedure FormCreate(Sender: TObject); |
Процедура створення компонентів гри. |
procedure N2Click(Sender: TObject); |
Процедура початку гри. |
procedure Timer1Timer(Sender: TObject); |
Процедура за якою виконується гра. |
procedure FormClose(Sender: TObject; var Action: TCloseAction); |
Процедура яка виконує роль очищення екрану. |
procedure N3Click(Sender: TObject); |
Процедура завершення гри. |
procedure move; |
Процедура руху привида. |
procedure ris; |
Процедура малювання поля |
f: text; |
Текстовий документ де знаходиться рівень гри. |
x,y: integer; |
Координати знаходження пакмена |
score1: integer; |
Кількість залишившихся крапок |
live: integer; |
Кількість життів |
pole: array[1..17,1..17] of byte; |
Координати поля |
ss: integer = 1; |
Анімація пакмана |
pic,pic1,pic2,pic3,pic4,kadr:tbitmap; |
Графічне зображення області, в яку пакман буде виведено . |
Структура класу TPacman:
Структура поля ghost
x,y:integer; |
Координати привидів |
DX,DY: integer; |
Переміщення привидів |
Для роботи з програмою потрібний комп'ютер і програма Borland Delphi. Робота починається із запуску файлу Project1.exe засобами програми. При запуску програми з'являється вікно не запущеної гри, наведеної на малюнку 2.1, яку у меню «Гра» потрібно запустити натиснувши «нова гра». Вихід можна здійснити за допомогою натискання «Вихід» у меню «Гра». Вибрав пункт меню «?» - можливо отримати інформацію про розробника програми або про її правила. Вибрав пункт меню «Гра» - користувач повинен обрати «Нова гра». Після вибору цього параметру ми бачимо вікно програми початку гри. Натиская клавіши «←», «→», «↑» або «↓»,ми маємо можливість керувати пакманом.
Вікно не запущеної гри зображене на (Рис2.1). Вікно у випадку виграшу зображено на (Рис.2.2). Вікно у випадку програшу зображено на (Рис.2.3).На (Рис.2.4) ми бачимо вікно програми з інформацією.
2.1 Вікно початку гри
2.2 Вікно у випадку виграшу
2.3 Вікно у випадку програшу
Рис.2.4 Вікно програми з інформацією про програму
ВИСНОВКИ
Курсова робота виконана з метою закріплення отриманих теоретичних і практичних знань при вивченні дисципліни «Обєктно-орієнтоване програмування».
Курсова робота являє собою програму, написану мовою Object Pascal з використанням принципів обєктно-орієнтованого програмування. При розробці програми були створені нові класи обєктів зі своїми властивостями та методами.
Також були відпрацьовані основні етапи створення програми: постановка задачі,розробка алгоритму, складання програми, тестування.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, ComCtrls;
type
TPacman = class(TForm)
fon: TImage;
MainMenu1: TMainMenu;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Timer1: TTimer;
sb: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure N4Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type ghost = record
x,y:integer;
DX,DY: integer;
end;
var
Pacman: TPacman;
f: text;
i,j: integer;
x,y: integer;
score1: integer;
live: integer;
pole: array[1..17,1..17] of byte;
score: integer;
ss: integer = 1;
pic,pic1,pic2,pic3,pic4,kadr:tbitmap;
ghosts:array[1..4] of ghost;
implementation
{$R *.dfm}
procedure move;
var hi,hj,hx,hy:integer;
begin
for i:=1 to 4 do
begin
if random(40)=12 then
begin
ghosts[i].dx:=random(3)-1;
if ghosts[i].dx=0 then ghosts[i].dy:=random(3)-1 else ghosts[i].dy:=0;
end;
case pole[ghosts[i].y+ghosts[i].dy,ghosts[i].x+ghosts[i].dx]of
0: begin
pole[ghosts[i].y,ghosts[i].x]:=0;
pole [ghosts[i].y+ghosts[i].dy,ghosts[i].x+ghosts[i].dx]:=4;
ghosts[i].x:=ghosts[i].x+ghosts[i].dx;
ghosts[i].y:=ghosts[i].y+ghosts[i].dy;
end;
3: begin
pole[ghosts[i].y,ghosts[i].x]:=3;
pole [ghosts[i].y+ghosts[i].dy,ghosts[i].x+ghosts[i].dx]:=4;
ghosts[i].x:=ghosts[i].x+ghosts[i].dx;
ghosts[i].y:=ghosts[i].y+ghosts[i].dy;
end;
2: begin
pole[ghosts[i].y,ghosts[i].x]:=0;
pole [ghosts[i].y+ghosts[i].dy,ghosts[i].x+ghosts[i].dx]:=4;
ghosts[i].x:=ghosts[i].x+ghosts[i].dx;
ghosts[i].y:=ghosts[i].y+ghosts[i].dy;
x:=2; y:=2;
live:=live-1;
end;
1: begin
ghosts[i].dx:=-ghosts[i].dx;
ghosts[i].dy:=-ghosts[i].dy;
pole[ghosts[i].y,ghosts[i].x]:=0;
pole [ghosts[i].y+ghosts[i].dy,ghosts[i].x+ghosts[i].dx]:=4;
ghosts[i].x:=ghosts[i].x+ghosts[i].dx;
ghosts[i].y:=ghosts[i].y+ghosts[i].dy;
end;
end;
end;
end;
procedure ris;
begin
for i:=1 to 17 do
for j:=1 to 17 do
case pole[i,j] of
0: Pacman.fon.Canvas.Draw(j*32,i*32,pic2);
1: Pacman.fon.Canvas.Draw(j*32,i*32,pic);
2: Pacman.fon.Canvas.Draw(j*32,i*32,kadr);
3: Pacman.fon.Canvas.Draw(j*32,i*32,pic3);
4: Pacman.fon.Canvas.Draw(j*32,i*32,pic4);
end;
end;
procedure newgame;
var s: string;
n: integer;
begin
x:=2; y:=2;
score1:=200;
score:=0;
live:=4;
AssignFile(f, 'level.txt');
Reset(f);
n:=1;
for i:=1 to 17 do
begin
readln(f,s);
for j:=1 to 17 do
begin
pole[i,j]:=strtoint(copy(s,j,1));
if pole[i,j]=4 then
begin
ghosts[n].y:=i;
ghosts[n].x:=j;
ghosts[n].dx:=random(3)-1;
if ghosts[n].dx=0 then ghosts[n].dy:=random(3)-1 else ghosts[n].dy:=0;
inc(n);
end;
end;
end;
ris;
close(f);
end;
procedure TPacman.FormCreate(Sender: TObject);
begin
score1:=200;
score:=0;
sb.Panels[5].Text:=inttostr(135);
sb.Panels[3].Text:=inttostr(0);
sb.Panels[1].Text:=inttostr(live);
pic:=tbitmap.Create;
pic.LoadFromFile('sprite.bmp');
pic1:=tbitmap.Create;
pic1.LoadFromFile('sprite1.bmp');
pic2:=tbitmap.Create;
pic2.LoadFromFile('sprite2.bmp');
pic3:=tbitmap.Create;
pic3.LoadFromFile('sprite3.bmp');
pic4:=tbitmap.Create;
pic4.LoadFromFile('mmm.bmp');
kadr:=tbitmap.Create;
kadr.LoadFromFile('1.bmp');
newgame;
end;
procedure TPacman.N2Click(Sender: TObject);
begin
newgame;
timer1.Enabled:=true;
end;
procedure TPacman.Timer1Timer(Sender: TObject);
var x1,y1: integer;
x2,y2: integer;
begin
begin
inc(ss);
case ss of
1: kadr.LoadFromFile('1.bmp');
2: kadr.LoadFromFile('2.bmp');
3: kadr.LoadFromFile('3.bmp');
4: kadr.LoadFromFile('4.bmp');
5: kadr.LoadFromFile('1.bmp');
6: kadr.LoadFromFile('5.bmp');
7: kadr.LoadFromFile('6.bmp');
8: kadr.LoadFromFile('7.bmp');
9: kadr.LoadFromFile('8.bmp');
10:kadr.LoadFromFile('5.bmp');
end;
if ss = 5 then ss:=0;
if ss = 10 then ss:=6;
x1:=0; y1:=0;
if getkeystate(vk_left)<0 then
begin
ss:=5;
x1:=-1;
y1:=0;
end;
if getkeystate(vk_right)<0 then
begin
ss:=1;
x1:=1;
y1:=0;
end;
if getkeystate(vk_up)<0 then
begin
y1:=-1;
x1:=0;
end;
if getkeystate(vk_down)<0 then
begin
y1:=1;
x1:=0;
end;
case pole[y+y1,x+x1] of
0: begin
pole[y,x]:=0;
pole [y+y1,x+x1]:=2;
x:=x+x1;y:=y+y1;
end;
3:
begin
pole[y,x]:=0;
pole [y+y1,x+x1]:=2;
x:=x+x1;y:=y+y1;
score:=score+5;
score1:=score1-5;
sb.Panels[3].Text:=inttostr(score);
sb.Panels[5].Text:=inttostr(score1);
if score1=0 then
begin
timer1.Enabled:=false;
ShowMessage(' Вы победили '#13' Поздравляю ');
end;
end;
4:
begin
pole[y,x]:=0;
pole [y+y1,x+x1]:=4;
x:=2; y:=2;
live:=live-1;
end;
end
end;
sb.Panels[1].Text:=inttostr(live);
if live=0 then
begin
timer1.Enabled:=false;
ShowMessage(' Вас съели ');
end;
move;
ris;
end;
procedure TPacman.FormClose(Sender: TObject; var Action: TCloseAction);
begin
pic.Free;
pic1.Free;
pic2.Free;
pic4.Free;
end;
procedure TPacman.N4Click(Sender: TObject);
begin
showmessage('курсова робота з об''''єктно орієнтованого програмування'+#10+#13+' виконала ст.гр ПЗ-10/9-1Д Авчарова Анжеліка');
end;
procedure TPacman.N3Click(Sender: TObject);
begin
Close;
end;
end.