Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 12:10, курсовая работа
Для курсовой работы я выбрала игру Pac-Man. Меня заинтересовала история создания этой игры. Pac-Man — культовая компьютерная игра в жанре аркады, впервые вышедшая в 1979 г. в Японии. Игра была разработана в основном работником компании Namco Тору Иватани в течение восемнадцати месяцев. Сначала это творение называлось pakku-man [пакку-ман]., что на расово японском означает «поедать, откусывать, многократно широко раскрывая рот и захлопывая его». Часто упоминается, что идея игры к Иватани пришла, когда он увидел пиццу без одного кусочка пиццы. В интервью 1986 года он отметил, что это было наполовину правдой: Иватани округлил иероглиф кути (яп. рот) как символ поедания и придал ему подобие рта.
Иватани попытался сделать игру интересной для более широких слоёв населения, п
Основные данные о работе 1
Содержание 2
Основная часть 5
1 Разработка эскизного и технического проектов программы 5
2 Разработка рабочего проекта 6
Заключение 42
Глоссарий 45
Список использованных источников 46
Приложения 47
ImMap.Canvas.FillRect(rect(0,
ImLogo.Picture.LoadFromFile('.
State:=stMenu;
Fmain.DoubleBuffered:=true;
ShowPanel:=TCanvasPanel.
ShowPanel.Left:=12;
ShowPanel.Top:=12;
ShowPanel.Width:=575;
ShowPanel.Height:=575;
SHowPanel.Color:=0;
ShowPanel.Parent:=self;
ShowPanel.BorderStyle:=bsNone;
ShowPanel.BevelInner:=bvNone;
ShowPanel.BevelOuter:=bvNone;
ShowPanel.Canvas.Font.Size:=
ShowPanel.Canvas.Font.Name:='
ShowPanel.Canvas.Font.Style:=
LMSG:=TLabel.Create(Self);
LMSG.Font.Color:=$0048C2FF;
LMSG.Font.Size:=20;
LMSG.Font.Name:='Arial';
LMSG.Font.Style:=LMSG.Font.
LMSG.Transparent:=True;
LMSG.Alignment:=taCenter;
LMSG.Visible:=false;
LMSG.Parent:=ShowPanel;
LMSG.Top:=200;
// Для звуклв, которые могут проигрываться
одновременно используются
// Для звуков, вроде завершения уровня, смерти, проигрыша и выигрыша, используется один проигрыватель.
for a:=0 to 7 do
begin
pl[a]:=TMediaPlayer.Create(
pl[a].Visible:=false;
pl[a].Parent:=self;
end;
pl[plPacman].FileName:='.\
pl[plSeed].FileName:='.\Data\
pl[plBigseed].FileName:='.\
pl[plBonusShow].FileName:='.\
pl[plBonusEated].FileName:='.\
pl[plGhostEated].FileName:='.\
pl[plGhostRespawn].FileName:='
for a:=0 to 6 do
pl[a].Open;
end;
//----------------------------
function TFmain.CheckDir(x,y:integer; dir:byte; Collide: TCollide):boolean;
var mx,my:integer;
begin
result:=false;
mx:=x div 23;
my:=y div 23;
case dir of
dUp: my:=my-1;
dRight: mx:=mx+1;
dDown: my:=my+1;
dLeft: mx:=mx-1;
end;
if (not (map[my+level*25,mx] and 15 in Collide)) and (x mod 23 <3) and (y mod 23 <3) then result:=true;
end;
//----------------------------
procedure TFmain.FormKeyDown(Sender:
begin
case State of
stMenu: case Key of
VK_ESCAPE:FMain.Close;
VK_RETURN: begin pl[plseed].Play;loadlevels; NewLevel(level); Prepare(level); end;
end;
stGame: begin
case Key of
VK_LEFT: begin Player.newdir:=dLeft; Player.AgeNewDir:=DirAge; end;
VK_UP : begin Player.newdir:=dUp; Player.AgeNewDir:=DirAge; end;
VK_RIGHT:begin Player.newdir:=dRight; Player.AgeNewDir:=DirAge; end;
VK_DOWN: begin Player.newdir:=dDown; Player.AgeNewDir:=DirAge; end;
end;
end;
end;
end;
//----------------------------
procedure TFmain.UpdateScore;
begin
LCountSeed.Caption:=inttostr(
LCountTomato.Caption:=
LCountCarrot.Caption:=
LCountGrape.Caption:=inttostr(
LCountCherry.Caption:=
LCountGhost.Caption:=inttostr(
Score.Total:=Score.Seed*10+
LScoreTotal.caption:=Inttostr(
end;
//----------------------------
procedure TFmain.Teleport(dir:byte; var x,y:integer);
var nx,ny,prt:integer;
begin
nx:=0; ny:=0;
case dir of
dUp:ny:=-23;
dRight:nx:=23;
dDown:ny:=23;
dLeft:nx:=-23
end;
if (x div 23 = port[0].x) and (y div 23 = port[0].y) then
prt:=1
else
prt:=0;
x:=port[prt].x*23+nx;
y:=port[prt].y*23+ny;
end;
//----------------------------
procedure TFmain.AI;
var a,temp:byte;
newDir:TstringList;
begin
newDir:=TstringList.Create;
for a:=0 to level+1 do
begin
temp:=0;
newDir.Clear;
if Enemy[a].ndCount>0 then dec(Enemy[a].ndCount);
if Enemy[a].State<>esEyes then
if (Enemy[a].x mod 23 <3) and (Enemy[a].y mod 23 <3) and (Enemy[a].ndCount=0) then
begin
if checkDir(Enemy[a].x,Enemy[a].
if checkDir(Enemy[a].x,Enemy[a].
if checkDir(Enemy[a].x,Enemy[a].
if checkDir(Enemy[a].x,Enemy[a].
// Существует 16 теоретически возможных вариантов расположения проходов, практисечки же - 11.
// На основе текущей матрицы
возможных решений, призрак
// После AI v2.0:Artificial Idiots™ была сделана система AI v3.0:Actually Insane™, которая
// позволяла призракам
// играть становится просто
case temp of
3: case Enemy[a].direction of
dUp,dLeft: NewDir.Add('1');
dRight,dDown: NewDir.Add('2');
end;
5: case Enemy[a].direction of
dUp,dLeft: NewDir.Add('1');
dRight,dDown: NewDir.Add('3');
end;
6: case Enemy[a].direction of
dUp,dRight: NewDir.Add('2');
dLeft,dDown: NewDir.Add('3');
end;
7: case Enemy[a].direction of
dUp: begin NewDir.Add('1'); NewDir.Add('2'); end;
dRight: NewDir.Add('2');
dDown: begin NewDir.Add('3'); NewDir.Add('2'); end;
dLeft: begin NewDir.Add('3'); NewDir.Add('1'); end;
end;
9: case Enemy[a].direction of
dUp,dRight: newDir.Add('1');
dLeft,dDown: NewDir.Add('4');
end;
10: case Enemy[a].direction of
dUp,dRight: NewDir.Add('2');
dLeft,dDown: NewDir.Add('4');
end;
11: case Enemy[a].direction of
dUp: NewDir.Add('1');
dRight: begin NewDir.Add('1'); NewDir.Add('2'); end;
dDown: begin NewDir.Add('4'); NewDir.Add('2'); end;
dLeft: begin NewDir.Add('1'); NewDir.Add('4'); end;
end;
12: case Enemy[a].direction of
dUp,dLeft: NewDir.Add('4');
dRight,dDown: NewDir.Add('3');
end;
13: case Enemy[a].direction of
dUp: begin NewDir.Add('1'); NewDir.Add('4'); end;
dRight: begin NewDir.Add('1'); NewDir.Add('3'); end;
dDown: begin NewDir.Add('4'); NewDir.Add('3'); end;
dLeft: NewDir.Add('4');
end;
14: case Enemy[a].direction of
dUp: begin NewDir.Add('4'); NewDir.Add('2'); end;
dRight: begin NewDir.Add('2'); NewDir.Add('3'); end;
dDown: NewDir.Add('3');
dLeft: begin NewDir.Add('4'); NewDir.Add('3'); end;
end;
15: case Enemy[a].direction of
dUp: begin NewDir.Add('4'); NewDir.Add('1'); NewDir.Add('2'); end;
dRight: begin NewDir.Add('1'); NewDir.Add('2'); NewDir.Add('3'); end;
dDown: begin NewDir.Add('2'); NewDir.Add('3'); NewDir.Add('4'); end;