Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 12:10, курсовая работа
Для курсовой работы я выбрала игру Pac-Man. Меня заинтересовала история создания этой игры. Pac-Man — культовая компьютерная игра в жанре аркады, впервые вышедшая в 1979 г. в Японии. Игра была разработана в основном работником компании Namco Тору Иватани в течение восемнадцати месяцев. Сначала это творение называлось pakku-man [пакку-ман]., что на расово японском означает «поедать, откусывать, многократно широко раскрывая рот и захлопывая его». Часто упоминается, что идея игры к Иватани пришла, когда он увидел пиццу без одного кусочка пиццы. В интервью 1986 года он отметил, что это было наполовину правдой: Иватани округлил иероглиф кути (яп. рот) как символ поедания и придал ему подобие рта.
Иватани попытался сделать игру интересной для более широких слоёв населения, п
Основные данные о работе 1
Содержание 2
Основная часть 5
1 Разработка эскизного и технического проектов программы 5
2 Разработка рабочего проекта 6
Заключение 42
Глоссарий 45
Список использованных источников 46
Приложения 47
dLeft: begin NewDir.Add('3'); NewDir.Add('4'); NewDir.Add('1'); end;
end;
end;
if newdir.Count<>0 then
begin
Enemy[a].direction:=strtoint(
Enemy[a].x:=Enemy[a].x div 23 * 23;
Enemy[a].y:=Enemy[a].y div 23 * 23;
Enemy[a].ndCount:=23;
end;
end;
end;
end;
//----------------------------
procedure TFmain.GameTimerTimer(Sender: TObject);
var a:byte;
begin
ImBack.Canvas.FillRect(rect(0,
ImBack.Canvas.CopyRect(rect(0,
if bonus.Kind=0 then
begin
Case Random(10) of // Чем круче бонус, тем, по идее, реже должен появляться
0..3: Bonus.Kind:=1; // 40%
4..6: Bonus.Kind:=2; // 30%
7,8: Bonus.Kind:=3; // 20%
9: Bonus.Kind:=4; // 10%
end;
Bonus.Time:=random(500)+500;
end
else
dec(Bonus.Time);
if (bonus.Kind<>0) and (Bonus.Time=0) then
begin
pl[plbonusshow].Play;
Bonus.Life:=BonusLife;
end;
if Bonus.Life<>0 then
begin
Imlist.Draw(ImBack.Canvas,
dec(Bonus.Life);
if Bonus.Life=0 then Bonus.Kind:=0;
end;
if Player.direction <> Player.newdir then
If CheckDir(Player.x,Player.y,
begin
if not(Player.direction+Player.
begin
Player.x:=(Player.x div 23)*23; // точные координаты клетки.
Player.y:=(Player.y div 23)*23; // Чтобы PacMan не срезал углы.
end;
Player.direction:=Player.
end
else if Player.AgeNewDir<>0 then dec(Player.AgeNewDir) else Player.newdir:=Player.
for a:=0 to level+1 do // Обрабатываем вражин
begin
if Enemy[a].Delay<>0 then
begin
dec(Enemy[a].Delay);
if Enemy[a].Delay=0 then Enemy[a].Speed:=2; // Исключение лишней проверки в цикле.
end;
if Enemy[a].ShyCount<>0 then
begin
dec(Enemy[a].ShyCount);
// Предупреждаем, что время скромности призраков подходит к концу и они скоро озвереют.
if Enemy[a].ShyCount<200 then if (Enemy[a].ShyCount mod 20 >10) then Enemy[a].State:=esAttention else Enemy[a].State:=esShy;
if Enemy[a].ShyCount=0 then begin Enemy[a].Speed:=2; Enemy[a].State:=esNormal; end; // Исключение лишней проверки в цикле.
end;
if abs(Enemy[a].x-Player.x)<hit then // Высокоинтелектуальный детектор столкновений PacMan с призраками.
if abs(Enemy[a].y-Player.y)<hit then
begin
if Enemy[a].State in [esShy, esAttention] then // Вчера тореодор - быка...
begin
pl[plghosteated].Play;
inc(Score.Ghost);
UpdateScore;
Enemy[a].State:=esEyes;
Enemy[a].ShyCount:=0;
Enemy[a].Speed:=3;
Enemy[a].direction:=(map[
Enemy[a].x:=Enemy[a].x div 23 * 23;
Enemy[a].y:=Enemy[a].y div 23 * 23;
end;
if Enemy[a].State=esNormal then // А сегодня бык - тореодора (анекдот)
begin
pl[plother].FileName:='.\Data\
pl[plother].open;
pl[plother].play;
GameTimer.Enabled:=false;
dec(Player.Lives);
if Player.Lives<>0 then
begin
LLife.Caption:=inttostr(
LMSG.Caption:=msgDie;
LMSG.Left:=(575-ShowPanel.
LMSG.Visible:=true;
DelayTimer.Enabled:=true;
end
else
begin
pl[plother].FileName:='.\Data\
pl[plother].open;
pl[plother].play;
LLife.Caption:=inttostr(
LMSG.Caption:=msgLoose;
LMSG.Left:=(575-ShowPanel.
LMSG.Visible:=true;
State:=stMenu;
ImStart.Visible:=true;
ImLeave.Visible:=true;
LStart.Visible:=true;
LLEave.Visible:=true;
end;
end;
end;
AI; // Внутри процедуры еще один перебор по врагам. Это позволяет им вести себя более энергично.
if Enemy[a].State=esEyes then
begin // Если это глазки, то ведём их к месту старта.
if (Enemy[a].x mod 23 <3) and (Enemy[a].y mod 23 <3) and (map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] and 15 = mpEnemyStart) then
begin // Глазки добрались - приводим призрака в злобный вид.
pl[plghostrespawn].Play;
Enemy[a].x:=Enemy[a].x div 23 * 23;
Enemy[a].y:=Enemy[a].y div 23 * 23;
Enemy[a].State:=esNormal;
Enemy[a].direction:=dUp;
Enemy[a].ShyCount:=0;
Enemy[a].Speed:=0;
Enemy[a].Delay:=100; // Инкубационный период :)
end
else
begin
if Enemy[a].direction<>(map[
begin
if (Enemy[a].x mod 23 <3) and (Enemy[a].y mod 23 <3) then
begin
Enemy[a].x:=Enemy[a].x div 23 * 23;
Enemy[a].y:=Enemy[a].y div 23 * 23;
Enemy[a].direction:=(map[
end;
end;
case Enemy[a].direction of
dUp: Enemy[a].y:=Enemy[a].y-Enemy[
dRight: Enemy[a].x:=Enemy[a].x+Enemy[
dDown : Enemy[a].y:=Enemy[a].y+Enemy[
dLeft: Enemy[a].x:=Enemy[a].x-Enemy[
end;
end;
end
else
case Enemy[a].direction of
dUp: if Enemy[a].y mod 23>2 then Enemy[a].y:=Enemy[a].y-Enemy[
else
if CheckDir(Enemy[a].x,Enemy[a].
dRight: if Enemy[a].x mod 23>2 then Enemy[a].x:=Enemy[a].x+Enemy[
else
if CheckDir(Enemy[a].x,Enemy[a].
dDown: if Enemy[a].y mod 23>2 then Enemy[a].y:=Enemy[a].y+Enemy[
else
if CheckDir(Enemy[a].x,Enemy[a].
dLeft: if Enemy[a].x mod 23>2 then Enemy[a].x:=Enemy[a].x-Enemy[
else
if CheckDir(Enemy[a].x,Enemy[a].
end;
if map[Enemy[a].y div 23+level*25,Enemy[a].x div 23] and 15 = mpPort then Teleport(Enemy[a].direction, Enemy[a].x, Enemy[a].y);
if Enemy[a].State=esShy then Imlist.Draw(ImBack.Canvas,
else if Enemy[a].State<>esEyes then Imlist.Draw(ImBack.Canvas,
Imlist.Draw(ImBack.Canvas,
inc(Enemy[a].Frame); if Enemy[a].Frame>19 then
begin
Enemy[a].Frame:=0;