
- •Реферат
- •1 Загальна частина розробка гри «Pacman»
- •1.1 Постановка задачі
- •1.2 Ціль розробки програми
- •2 Спеціальна частина написання гри «pacman»
- •2.1 Структура програми
- •2.1.1 Модулі
- •2.2 Робота з програмою
- •2.3 Екранні форми
- •2.1 Вікно початку гри
- •2.2 Вікно у випадку виграшу
- •2.3 Вікно у випадку програшу
- •Висновки
- •Література
- •Додаток а лістинг програми
2.2 Робота з програмою
Для роботи з програмою потрібний комп'ютер і програма Borland Delphi. Робота починається із запуску файлу Project1.exe засобами програми. При запуску програми з'являється вікно не запущеної гри, наведеної на малюнку 2.1, яку у меню «Гра» потрібно запустити натиснувши «нова гра». Вихід можна здійснити за допомогою натискання «Вихід» у меню «Гра». Вибрав пункт меню «?» - можливо отримати інформацію про розробника програми або про її правила. Вибрав пункт меню «Гра» - користувач повинен обрати «Нова гра». Після вибору цього параметру ми бачимо вікно програми початку гри. Натиская клавіши «←», «→», «↑» або «↓»,ми маємо можливість керувати пакманом.
2.3 Екранні форми
Вікно не запущеної гри зображене на (Рис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.