Программирывание на ЯВУ

Автор работы: Пользователь скрыл имя, 21 Декабря 2011 в 12:10, курсовая работа

Краткое описание

Для курсовой работы я выбрала игру Pac-Man. Меня заинтересовала история создания этой игры. Pac-Man — культовая компьютерная игра в жанре аркады, впервые вышедшая в 1979 г. в Японии. Игра была разработана в основном работником компании Namco Тору Иватани в течение восемнадцати месяцев. Сначала это творение называлось pakku-man [пакку-ман]., что на расово японском означает «поедать, откусывать, многократно широко раскрывая рот и захлопывая его». Часто упоминается, что идея игры к Иватани пришла, когда он увидел пиццу без одного кусочка пиццы. В интервью 1986 года он отметил, что это было наполовину правдой: Иватани округлил иероглиф кути (яп. рот) как символ поедания и придал ему подобие рта.
Иватани попытался сделать игру интересной для более широких слоёв населения, п

Содержание работы

Основные данные о работе 1
Содержание 2
Основная часть 5
1 Разработка эскизного и технического проектов программы 5
2 Разработка рабочего проекта 6
Заключение 42
Глоссарий 45
Список использованных источников 46
Приложения 47

Содержимое работы - 1 файл

КР, Программирование на ЯВУ.doc

— 543.00 Кб (Скачать файл)

   ShowPanel.Canvas.Font.Size:=20;

   ShowPanel.Canvas.Font.Name:='Areal';

   ShowPanel.Canvas.Font.Style:=ShowPanel.Canvas.Font.Style+[fsBold];

   LMSG:=TLabel.Create(Self);

   LMSG.Font.Color:=$0048C2FF;

   LMSG.Font.Size:=20;

   LMSG.Font.Name:='Arial';

   LMSG.Font.Style:=LMSG.Font.Style+[fsBold];

   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(self);

         pl[a].Visible:=false;

         pl[a].Parent:=self;

      end;

   pl[plPacman].FileName:='.\Data\pacman.wav';

   pl[plSeed].FileName:='.\Data\seed.wav';

   pl[plBigseed].FileName:='.\Data\bigseed.wav';

   pl[plBonusShow].FileName:='.\Data\bonusshow.wav';

   pl[plBonusEated].FileName:='.\Data\bonuseated.wav';

   pl[plGhostEated].FileName:='.\Data\ghosteated.wav';

   pl[plGhostRespawn].FileName:='.\Data\ghostrespawn.wav';

   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,Cherry,Ghost,Total:integer;

   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;   // Время, за которое можно «поедать» призраков, после съедения большого зёрнышка.

Информация о работе Программирывание на ЯВУ