Автор работы: Пользователь скрыл имя, 23 Ноября 2009 в 18:54, Не определен
Условие задачи: Разработать программу, моделирующую игру «Сбей самолет». По экрану летят вражеские самолеты. Цель играющего – сбить их. Пусковая установка находится в нижней строке экрана, её можно передвигать по строке вперед и назад.
Оглавление
Задание на курсовую работу по дисциплине
«Программирование
на языке высокого уровня»
Студент группы:
Направление: «Информатика и ВТ»
№ контракта:
Тема: Разработка приложений для Windows, представляющего собой компьютерную игру «Сбей самолет».
Условие
задачи: Разработать программу, моделирующую
игру «Сбей самолет». По экрану летят вражеские
самолеты. Цель играющего – сбить их. Пусковая
установка находится в нижней строке экрана,
её можно передвигать по строке вперед
и назад.
Задание
выдано: _______________________
(подпись)
Необходимо разработать учебную программу. Область применения: досуг программиста. Поскольку ставится задача разработать приложение для Windows, то использоваться программа может под управлением Windows 9x/2000/XP.
Как указано в условии задачи необходимо, чтобы по экрану летели вражеские самолеты, а в нижней части экрана находилась пусковая установка, с помощью которой необходимо сбить самолеты. В данном примере для реализации такой задачи используется графический вывод на экран всех объектов игры.
Так как почти все объекты игры могут находиться в движении в любой момент игры неизвестный изначально, то необходимо постоянно обновлять изображение в игровом поле. Обновление игрового поля должно происходить через определенные промежутки времени. Для этого нужно использовать таймер, с помощью которого будет вызываться процедура обновления. Также с помощью этого таймера, через такие же промежутки времени, но перед выводом, для того чтобы игра развивалась, будут происходить расчеты для новых положений и состояний объектов игры.
Игровое поле состоит из следующих элементов. В самом верху игрового поля сверху вниз находятся невидимых пять маршрутов, по которым могут лететь самолеты слева направо по горизонтали. То есть эти пути представляют собой ячейки, из которых выпускаются самолеты. Если по одному пути летит самолет, то он закрыт для выпуска второго в этот же путь. Это напоминает движение настоящих самолетов по заданным маршрутам. Таким образом, одновременно на экране может находиться максимум пять самолетов, которые можно сбивать с помощью пусковой установки.
Для наглядности игры и придания большей заинтересованности игроку используются три типа самолетов: дирижабль, вертолет и самолет. У каждого типа своя определенная скорость полета.
Для того чтобы было интересно играть в эту игру, смысл в нее заложен следующий. Примерно за две минуты игроку необходимо сбить максимально возможное количество самолетов. В зависимости от типа самолета сбитого или пропущенного, а также в зависимости от высоты этого самолета игроку начисляются очки. Если игрок пропустил самолет, то чем медленней был самолет, тем больше очков у него отнимется. Также чем ниже был пропущен самолет, т. е. в него проще всего было попасть, тем больше отнимется у игрока очков. Отсюда следует, что чем проще всего было сбить пропущенный самолет, тем больше отнимается очков у игрока. И наоборот, чем выше и скоростней оказывается сбитый самолет, тем больше очков прибавляется игроку.
Пусковую установку с помощью клавиатуры можно передвигать. Пусковая установка может выпустить максимум три пули.
При запуске приложения первым делом из файлов считываются картинки всех объектов игры. Изображения в файлах нарисованы на фоне с таким же цветом, как и цвет фона на игровом поле. Это необходимо, для того чтобы объекты отображались не в рамках отличного цвета от фона игрового поля.
Далее, когда игрок нажмет на кнопку «Поехали» всем переменных задаются начальные значения и начинается игровой процесс, который продлится две минуты.
По ходу игры выводится результаты. При закрытии приложения происходит выгрузка картинок из памяти.
Общая
схема алгоритма работы всего приложения,
с представлением в ней всех процедур
как отдельных блоков, приведена на рисунке
1. Более конкретный алгоритм приложения
представлен на рисунке 2.
Рисунок 1 - Обобщенная схема работы всего приложения
Рисунок 2 - Алгоритм работы приложения
Делается
вывод о необходимости
Входными данными являются команды, поступающие от пользователя о направлении движения пусковой установки и выстрелах. В зависимости от этих данных определяется положение установки на игровом поле.
После
обработки поступающих данных в игровом
процессе на экран выдается результат
(выходные данные) в виде полученных очков.
Также во время игры случайным образом
создаются самолеты и летят по случайно
заданным «маршрутам». Результат этих
действий игрок видит на экране.
Для разработки приложения игры «Сбей самолет» используется среда визуального программирования Delphi. Проект программы содержит одно окно. Окно – Form1 представлено на рисунке 3.
Рисунок
3 - Окно приложения
Компонент Form1
Свойства:
Caption-Самолетик;
Border-
bssingle;
1-компонент Button1;
свойства:
caption-Поехали;
Событие:
Onclick-
активация ttimer1
2-компонент label2;
свойства:
caption-
для того чтобы остановить игру нажмите
клавишу ESC
3-компонент label1;
свойства:
caption-вы
сбили
4-компонент label3;
свойства:
caption-кол-во
сбитых самолетов;
5-компонент image1;
поле
на котором рисуется поле битвы
6-компонент ttimer1;
свойства:
enable-false;
interval-10 мс;
Исполняемый файл программы «Сбей самолет» имеет название Project1.exe. Его работоспособность не зависит от расположения на диске. Необходимо, чтобы файлы, прилагающиеся к программе, находились в указанных каталогах. Наименования файлов входящих в проект и краткая информация об их содержании представлены в приложении.
unit
Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Timer1: TTimer;
Button1: TButton;
Label2: TLabel;
Label1: TLabel;
Label3: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
//=======================
procedure FillZap(ind: integer);
//=======================
const
n=10;
type
TSprite= record
X,Y : integer;
vectX, vectY: integer;
koef_a, koef_b: real;
speed : integer;
Gr : TBitmap;
end;
TRocket= record
X,Y: integer;
Gr : TBitmap;
Destroed: Boolean;
end;
var
Form1: TForm1;
a:integer=0;
Su25: array [1..n] of TSprite;
turel: TSprite;
rocket: TRocket;
Killed: integer=0;
implementation
{$R *.dfm}
//=======================
procedure Colision;
var I: integer;
begin
for i:=1 to n do
begin
if (rocket.X>Su25[i].X) and (rocket.X<(Su25[i].X+Su25[i].
(rocket.Y<(Su25[i].Y+Su25[i].
begin
rocket.Destroed:=true;
rocket.Y:=Form1.Image1.Height+
inc(Killed);
FillZap(i);
end;