Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 12:10, курсовая работа
Для курсовой работы я выбрала игру Pac-Man. Меня заинтересовала история создания этой игры. Pac-Man — культовая компьютерная игра в жанре аркады, впервые вышедшая в 1979 г. в Японии. Игра была разработана в основном работником компании Namco Тору Иватани в течение восемнадцати месяцев. Сначала это творение называлось pakku-man [пакку-ман]., что на расово японском означает «поедать, откусывать, многократно широко раскрывая рот и захлопывая его». Часто упоминается, что идея игры к Иватани пришла, когда он увидел пиццу без одного кусочка пиццы. В интервью 1986 года он отметил, что это было наполовину правдой: Иватани округлил иероглиф кути (яп. рот) как символ поедания и придал ему подобие рта.
Иватани попытался сделать игру интересной для более широких слоёв населения, п
Основные данные о работе 1
Содержание 2
Основная часть 5
1 Разработка эскизного и технического проектов программы 5
2 Разработка рабочего проекта 6
Заключение 42
Глоссарий 45
Список использованных источников 46
Приложения 47
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;
2.2 Написание программы
Вся игра сделана руками и лично. Т.е. нет никаких чужих вставок, библиотек, рисунков - всё сделано самостоятельно. Кроме звуков так как, для получения качественных звуков нужна хорошая студия, аппаратура, софт, их "нарисовать" как картинки не получается, а у меня под рукой ничего такого не оказалось. Поэтому звуки пришлось взять готовые. Всё остальное – сделано собственными руками. Вся графика нарисована в ArtIcon, скомпонована в Adobe Photoshop CS4. В качестве "редактора" уровней использовала Excel, т.к. уровни не совсем простые. Дело в том, что после съедения призрака, от него остаются глаза, которые должны убежать в «загончик». Если делать это алгоритмом поиска, то они будут «сигать» по кратчайшему пути, а это не стильно. Поэтому в саму структуру уровня зашиты направления движения бегающих глазок, чтобы они покрутились, немного вокруг. Уровни получились двухслойными: один слой (младший полубайт) - сам уровень, где расписаны стены, стартовые позиции, места для зёрнышек и телепортов, а второй слой (старший полубайт) - карта перемещений бегающих глазок.
2.3 Спецификация программы
Исполняемый файл программы «PacMan» имеет название DPacMan.exe и расположен в каталоге PacMan.
Таблица 2.1
Состав проекта
Наименование | Обозначение | Примечание |
DPacMan.dof | Файл параметров проекта | Содержит текущие установки проекта: настройки компилятора и компоновщика, имена служебных каталогов, условные директивы. |
DPacMan.dpr | Файл проекта | Связывает между собой все файлы, из которых состоит проект |
DPacMan.res | Файл ресурсов | Содержит пиктограммы, графические изображения |
UMain.pas | Файл программного модуля Формы 1 | Определяет функциональность формы №1 |
UMain.dfm | Файл формы 1 | Содержит список всех компонентов, включенных в форму 1 |
UMain.dcu | Объектный файл для Unit1.Pas | Откомпилированная версия UMain.Pas |
DPacMan.identcache | состоит из пути к ".pas" файлу (всего одна строчка) | служит для быстрой идентификации |
Bigseed.wave
Bonuseated.wave Bonusshow.wave Die.wave Ghosteated.wave Ghostrespawn.wave Loose.wave Newlevel.wave Pacman.wave Seed.wave Win.wave |
Звуковые файлы | Аудио файлы , описывающие различные действия (выигрыш, проигрыш). |
DPacMan.bmp
Logo.bmp |
Точечный рисунок | Графические изображения |
2.4 Текст программы
unit UMain;
//----------------------------
// Программа DPacMan (Delphi PacMan)
// Автор: Титова Татьяна Игоревна
//----------------------------
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,
ExtCtrls, StdCtrls, ImgList, StrUtils, MPlayer;
type
TState=(stMenu,stGame);
TEnemyState=(esNormal, esShy, esAttention, esEyes);
TCollide = set of byte;
TScore=record
Seed,Tomato,Carrot,Grape,
end;
TBonus=record
Time,Life:integer;
Kind:byte;
end;
TPlayer=record
x,y:integer;
direction, newdir:byte;
StartPos:TPoint;
Lives:byte;
Frame:byte;
AgeNewDir:integer;
end;
TEnemy=record
x,y:integer;
direction:byte;
StartPos:TPoint;
State:TEnemyState;
ColorIndex:byte;
ShyCount:integer;
ndCount:integer;
Frame:byte;
Delay:byte;
Speed:byte;
end;
TCanvasPanel = class (TPanel) // Панелька для отображения самого процесса. Сделана из-за наличия doublebuffered
protected
procedure PaintWindow(DC: HDC); override;
public
Canvas:TCanvas; // Для рисования нужна канва
constructor Create(AOwner: TComponent); override;
end;
TFmain = class(TForm)
ImExit: TImage;
GameTimer: TTimer;
S_Frame2: TShape;
ImLife: TImage;
ImScoreTomato: TImage;
Label1: TLabel;
S_Frame1: TShape;
LScoreTomato: TLabel;
LCountTomato: TLabel;
LCountCarrot: TLabel;
ImScoreCarrot: TImage;
Label5: TLabel;
LScoreCarrot: TLabel;
LCountGrape: TLabel;
ImScoreGrape: TImage;
Label8: TLabel;
LScoreGrape: TLabel;
LCountCherry: TLabel;
ImScoreCherry: TImage;
Label11: TLabel;
LScoreCherry: TLabel;
LCountGhost: TLabel;
ImScoreGhost: TImage;
Label14: TLabel;
LScoreGhost: TLabel;
LScoreTotal: TLabel;
Shape2: TShape;
LCopyrights: TLabel;
ImLogo: TImage;
LCountSeed: TLabel;
ImScoreSeed: TImage;
Label19: TLabel;
LScoreSeed: TLabel;
ImList: TImageList;
Label2: TLabel;
Label3: TLabel;
LLevel: TLabel;
DelayTimer: TTimer;
ImStart: TImage;
LStart: TLabel;
ImLeave: TImage;
LLeave: TLabel;
Label4: TLabel;
LLife: TLabel;
procedure S_Frame1MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
procedure L_ExitClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
procedure ImExitClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure NewLevel(level:byte);
procedure FormKeyDown(Sender:TObject; var Key:Word; Shift:TShiftState);
procedure LoadLevels;
procedure Prepare(level:byte);
function CheckDir(x,y:integer; dir:byte; Collide: TCollide):boolean;
procedure GameTimerTimer(Sender: TObject);
procedure UpdateScore;
procedure Teleport(dir:byte; var x,y:integer);
procedure DelayTimerTimer(Sender: TObject);
procedure AI;
end;
const
mpNone=0;
mpSeed=1;
mpBigSeed=2;
mpPlayerStart=3;
mpPort=4;
mpEnemyStart=5;
mpGate=6;
mpWall=7;
dNone=0;
dUp=1;
dRight=2;
dDown=3;
dLeft=4;
plPacman=0;
plSeed=1;
plBigSeed=2;
plBonusShow=3;
plBonusEated=4;
plGhostEated=5;
plGhostRespawn=6;
plOther=7;
msgNext='Вы перешли на уровень №';
msgDie='Вас съели! Попробуйте еще раз.';
msgWin='Поздравляю! Вы победили.!';
msgLoose='Увы.
Вы проиграли...';
PlayerFrames:array [0..5] of byte =(0,1,2,3,2,1);
DirAge=15;
PacManSpeed=2;
bonTomato=1;
bonCarrot=2;
bonGrape=3;
bonCherry=4;
BonusLife=700; // Время "жизни" бонуса. В тиках игры.
ShyTime=700;
// Время, за которое можно «