83230

Разработка игры «Сбей самолет»

Курсовая

Информатика, кибернетика и программирование

Компьютерные игры часто создаются на основе фильмов и книг; есть и обратные случаи. С 2011 года компьютерные игры официально признаны в США отдельным видом искусства. Компьютерные игры оказали столь существенное влияние на общество, что в информационных технологиях отмечена устойчивая тенденция к геймификации для неигрового...

Русский

2015-03-12

1.22 MB

14 чел.

27

МИНИСТЕРСТВО ОБРЗОВАНИЯ И НАУКИ,

МОЛОДЕЖИ И СПОРТА УКРАИНЫ

КЕРЧЕНСКИЙ КОЛЛЕДЖ ЭКОНОМИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Цикловая комиссия специальности

‹‹Обслуживание компьютерных систем и сетей››

КУРСОВАЯ РАБОТА

По дисциплине ‹‹Программирование››

Тема: «Разработать игру “Сбей самолет”»

Выполнил:

Ст. гр. ОКСиС-111

Курбатов Андрей Алексеевич

Руководитель

Ширяева Ирина Владимировна

Керчь 2013

Реферат

Курсовой проект содержит 28 страниц, 9 иллюстраций, 8приложений.

Объект исследования среда программирования Delphi Borland 7, язык программирования Pascal.

Цель работы: создать развлекательную программу, игру “Сбей самолет”. Развлекательное приложение предназначено для проведения досуга с целью отдыха.

В результате работы была получена развлекательная программа представляющую собой игру “Сбей самолет”. Область применения: Досуг программиста.

РАЗВЛЕКАТЕЛЬНАЯ ПРОГРАММА, ИГРА, ДОСУГ ПРОГРАММИСТА.


Содержание: 

Реферат 2

Содержание: 3

ВВЕДЕНИЕ: 4

РАЗДЕЛ 1 6

1.1 ТАЙМЕР 6

РАЗДЕЛ 2. 7

2.1 РАЗРАБОТКА РАБОЧЕГО ПРОЭКТА 7

2.2 РАЗРАБОТКА АЛГОРИТМА РЕШЕНИЯ 8

2.3 ОПИСАНИЕ ЛОГИЧЕСКОЙ СТРУКТУРЫ 10

ВЫВОДЫ 12

СПИСОК ИССПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 13

ПРИЛОЖЕНИЕ 1 14

ПРИЛОЖЕНИЕ 2 24

ПРИЛОЖЕНИЕ 3 24

ПРИЛОЖЕНИЕ 4 25

ПРИЛОЖЕНИЕ 5 25

ПРИЛОЖЕНИЕ 6 26

ПРИЛОЖЕНИЕ 7 27

ПРИЛОЖЕНИЕ 8 28


ВВЕДЕНИЕ:

Компьютерная игра — компьютерная программа, служащая для организации игрового процесса, связи с партнёрами по игре, или сама выступающая в качестве партнёра.

Компьютерные игры часто создаются на основе фильмов и книг; есть и обратные случаи. С 2011 года компьютерные игры официально признаны в США отдельным видом искусства. Компьютерные игры оказали столь существенное влияние на общество, что в информационных технологиях отмечена устойчивая тенденция к  геймификации для неигрового прикладного программного обеспечения.

Первые примитивные компьютерные игры были разработаны в 1950 и 1960 годах. Они работали на таких платформах, как университетские мейнфреймы и компьютеры EDSAC.

В 1952 году появилась программа «OXO», имитирующая игру «крестики-нолики», созданная А. С. Дугласом как часть его докторской диссертации в Кембриджском Университете. Игра работала на большом университетском компьютере, известном как EDSAC (Electronic Delay Storage Automatic Calculator).

В 1958 году Уильям Хигинботам, помогавший строить первую ядерную бомбу в Брукхейвенской национальной лаборатории, для развлечения посетителей создал «Tennis for Two», (Теннис для двоих).

В 1962 году Стив Рассел (англ.) русск. разработал игру «Spacewar!» для миникомпьютера PDP-1 в Массачусетском технологическом институте, которая быстро распространилась по всем университетам США.

В 1969 году Ральф Баер, который позже стал известен как «Король видеоигр», запросил патент на раннюю версию игровой консоли «Television Gaming and Training Apparatus». В 1967 году Баер создал игру пинг-понг, похожую на «Теннис для двоих». Вместе с Magnavox он работал над созданием первой консоли, названной Magnavox Odyssey в 1972 году.

Разработка игровых автоматов в 1970-х годах привела к так называемому «Золотому веку аркад». Одна из самых известных игр того времени — «Pong».


РАЗДЕЛ 1

1.1 ТАЙМЕР

Таймер (от англ. Timer) — в информатике средство обеспечения задержек и измерения времени средствами компьютера.

Главной характеристикой таймера является его точность — минимальный гарантированно выдерживаемый интервал времени. По этому параметру таймеры делят на:

1. Малоточные (ошибка измерения может достигать 0,1 с)

2. Точные (ошибка измерения не превышает 0,001 с)

3. Сверхточные (ошибка измерения не превышает 10−6 c)

Существуют два вида таймеров:

1. Аппаратные таймеры функционируют независимо от центрального процессора и в момент срабатывания генерируют прерывание.

2. Программные таймеры реализуются за счёт выполнения в цикле заданного количества одинаковых «пустых» операций. При фиксированной частоте работы процессора это позволяет точно определять прошедшее время. Главными минусами такого метода являются: зависимость количества итераций цикла от типа и частоты процессора, невозможность выполнения других операций во время задержки.


РАЗДЕЛ 2. 

2.1 РАЗРАБОТКА РАБОЧЕГО ПРОЭКТА

Для разработки приложения игры «Сбей самолет» используется среда визуального программирования Delphi. Проект программы содержит одно окно (Приложение 2).

Что бы реализовать движение самолета необходимо присвоить его какой-то координате, затем через некоторое время передвинуть изображение на несколько пикселей.

В данной программе самолеты расположены за границей окна и после запуска игры вылетают из-за нее. Таким образом, складывается впечатление, что самолет вылетает из-за границы окна и движется в заданном направлении. Как только самолет залетает за противоположную границу окна, изображению задается первоначальная координата и движение начинается сначала.

Основную работу выполняет процедура обработки событий Timer, которая передвигает картинку с определенной скоростью (интервалом). Запуск ракеты и управления танком обеспечивает процедура обработки события KeyDown (это событие генерируется до тех пор, пока пользователь удерживает клавишу). Процедура, в зависимости от того, какую клавишу удерживает игрок, задает направление перемещения установки.


2.2 РАЗРАБОТКА АЛГОРИТМА РЕШЕНИЯ

В программе решается одна независимая подзадача: Мультипликация.

Алгоритм мультипликации самолета представлен на рисунке 1:

Присвоить самолету координаты Х

Х := Х + 10

                  Рис.1. Схема алгоритма мультипликации

После запуска программы на экран выводиться окно (Приложение 6) Программа выполняется следующим образом: Сначала на форму выводятся объекты – летящие самолеты (приложение 3), и пушка (приложение 4). Игрок запускает ракету (приложение 5), которая может сбить или не сбить самолет. За один раз можно пустить только одну ракету. Если ракета попадает в самолет, то стирается самолет и ракета, увеличивается счетчик сбитых самолетов, счетчик ракет не изменяется, самолет начинает «полет» снова, а игрок получает право пустить следующую ракету. Если игрок не попал в самолет, ракета долетает до верхней границы окна, счетчик ракет уменьшается на 1, и игрок получает право пустить следующую ракету. Окно во время работы программы (Приложение 7). Если счетчик ракет достигает (0) то программа выводит сообщение о том сколько самолетов сбито. После нажатия на кнопку «Ок» программа завершает свое выполнение. Также во время игры игрок может поставить игру на паузу нажав кнопку «р.». После нажатия все таймеры прекращают свое выполнение. Для восстановления игры потребуется нажать на кнопку «о». После нажатия этой кнопки самолеты продолжают свое выполнение. Возможно также запустить игру с начала, если нажать кнопку «I». Все счетчики сбрасываются, а таймеры начинают снова свое выполнение.  

После завершения игры на экран выводиться окно результатов (Приложение 8).


2.3 ОПИСАНИЕ ЛОГИЧЕСКОЙ СТРУКТУРЫ

В программе главную роль выполняет мультипликация. Она позволяет реализовать движение самолетов.

Что бы реализовать движение самолета, необходимо создать цикл или таймер в котором текущей координате изображения присвоить координаты изображения со сдвигом.

Так с каждым сигналом таймера положение изображения будет меняться и у наблюдателя возникнет ощущение непрерывного движения. Пример:

sam1.left: =sam1.left+(n);

Для реализации движения пушки в обе возможные стороны, ее координаты по горизонту должны меняться в соответствии с нажатой клавишей.

Что бы определить попала ли ракета в самолет, необходимо сравнить координаты самолета и ракеты. Если они совпадают то переместить ракету в исходное положение, а самолет за форму. Количество сбитых самолетов увеличивается. Если же ракета не попадает то самолет продолжает свое движение, а ракета присваивается начальной координате. Кол-во оставшихся ракет уменьшается.

Пример:

raketa.top: =raketa.top-20;

if raketa.top<0 then              

begin

j: =j-1;

timer2.Enabled:=false;

raketa.left: =tank.left+50;

raketa.top: =tank.top+70;

Что бы завершить программу, кол-во оставшихся ракет должно достигнуть своего предела (0).

Пример:

if raketa.top<0 then              

begin

j: =j-1;

Где j-это кол-во оставшихся ракет.


ВЫВОДЫ

В ходе выполнения данной курсовой работы на основе различных источников данных была проанализирована заданная предметная область. 

В процессе кодирования была изучена RAD Delphi в части пользовательского интерфейса и технологий отображения графики. 

В результате выполнения проекта была полностью реализована игра «Сбей самолет», однако в приложение можно добавить озвучивание событий игры, уровень сложности игры и разные настройки параметров игры. Это вызвало бы больший интерес к игре. Приложение представляет собой очень простой вариант игры «Сбей самолет».

В процессе тестирования приложения ошибок не обнаружено.


СПИСОК ИССПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1.  Фаронов В. В. Delphi 4: Учебный курс. – М.: Издательство

“Нолидж”, 1998.

  1.  Дарахвелидзе П., Марков Е. Программирование в Delphi 4. – СПб.: БХВ – Санкт-Петербург, 1999.
  2.  Культин Н.Б. Основы программирования в Turbo Delphi. – СПб.: БХВ - Петербург, 2007.
  3.  Культин Н.Б. Delphi в задачах и примерах. – СПб.: БХВ – Петербург, 2003.
  4.  Вирт. Н. Алгоритмы и структуры данных: Пер. с англ. – М.: Мир, 1989.
  5.  Фокс Дж. Программное обеспечение и его разработка: Пер. с англ. – М.: Мир, 1985.
  6.  Роб Баас, Майк Фервай, Хайдемария Гюнтер. Delphi 4. Полное руководство. – К.: Издательская группа BHV, 1999.
  7.  Архангельский А. Я. Delphi5. – М., ЗАО «Издательство «Бином», 2001.
  8.  Электронная энциклопедия.


ПРИЛОЖЕНИЕ 1

Текст программы

Unit Unit1;

interface

Uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Grids, ExtCtrls, jpeg;

 type

 TForm1 = class(TForm)

   samolet1: TTimer;

   tank: TImage;

   sam1: TImage;

   raketa: TImage;

   timer2: TTimer;

   label1: TLabel;

   fon: TImage;

   Timer3: TTimer;

   sam2: TImage;

   Timer4: TTimer;

   sam3: TImage;

   label2: TLabel;

   sam4: TImage;

   Timer5: TTimer;

   boom: TImage;

   boom2: TImage;

   boom3: TImage;

   boom4: TImage;

   Label3: TLabel;

   procedure FormKeyDown(Sender: TObject; var Key: Word;

     Shift: TShiftState);

   procedure samolet1Timer(Sender: TObject);

   procedure timer2Timer(Sender: TObject);

   procedure Timer3Timer(Sender: TObject);

   procedure Timer4Timer(Sender: TObject);

   procedure FormCreate(Sender: TObject);

   procedure Timer5Timer(Sender: TObject);

private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 i,j,n:integer;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; //движение танка

 Shift: TShiftState);

begin

DoubleBuffered := True;

if (key=VK_left) and (tank.left>=0) then

tank.left:=tank.left-20;

if (key=VK_right) and (tank.left + tank.width <= Form1.Clientwidth)then

tank.left:=tank.left+20;

if key=vk_space  then

timer2.enabled:=true;

if key=$49 then

begin

i:=0;

j:=10;

sam1.Left:=-1000;

sam2.Left:=-1000;

sam3.left:=+1000;

sam4 .Left:=+700;

label1.caption:='Самолетов уничтожено:'+inttostr(i); //вывод сбитых самолетов

label2.Caption:='Ракет осталось:'+inttostr(j);       //вывод оставшихся ракет

end;

if key=$50 then                //пауза кнопкой "p"

begin

samolet1.Enabled:=false;

timer2.Enabled:=false;

timer3.Enabled:=false;

timer4.Enabled:=false;

timer5.Enabled:=false;

end;

if key=$4F then                //возобновить игру кнопкой "о"

begin

samolet1.Enabled:=true;

timer3.Enabled:=true;

timer4.Enabled:=true;

timer5.Enabled:=true ;

end;

if timer2.enabled=false then     //ракета движется вместе с танком

begin

if (key=vk_left) then raketa.top:=tank.top+70;

if (key=vk_left) then raketa.left:=tank.left+50;

if (key=vk_right) then  raketa.top:=tank.top+70;

if (key=vk_right) then  raketa.left:=tank.left+50;

end;

end;

procedure TForm1.samolet1Timer(Sender: TObject);   //самолет 1

begin

sam1.left:=sam1.left+(n);

if sam1.Left > Form1.Clientwidth then

begin

sam1.Left:=form1.Width-1000

end;

if sam1.left>(-500) then

boom.visible:=false;

end;

procedure TForm1.Timer3Timer(Sender: TObject);  //самолет 2

begin

sam2.left:=sam2.left+(n);

if sam2.Left > Form1.Clientwidth then

begin

sam2.Left:=form1.Width-1500

end;

if sam2.left >(-500) then

boom2.visible:=false;

end;

procedure TForm1.Timer4Timer(Sender: TObject);  //самолет 3

begin

 sam3.left:=sam3.left-(n);

if sam3.Left < (-100) then

begin sam3.Left:=sam3.Left+1000

end;

if sam3.left<700 then

boom3.visible:=false;

end;

procedure TForm1.Timer5Timer(Sender: TObject);  //самолет 4

begin

 sam4.left:=sam4.left-(n);

if sam4.Left < (-100) then

begin sam4.Left:=sam4.Left+700

end;

if sam4.left<500 then

boom4.visible:=false;

end;

procedure TForm1.timer2Timer(Sender: TObject); //ракета

begin

raketa.top:=raketa.top-20;

if raketa.top<0 then              //если ракета достигает края формы то возвращается

begin

j:=j-1;

timer2.Enabled:=false;

raketa.left:=tank.left+50;

raketa.top:=tank.top+70;

end;

if   ((raketa.Top > sam1.Top) and      //если координаты 1 самолета и ракеты равны

(raketa.Top < sam1.Top+ sam1.height)

and

(raketa.left > sam1.left) and

(raketa.left < sam1.left+sam1.Width))

 then

begin

timer2.Enabled:=false;                   ////////////////////////

raketa.left:=tank.left+50;

raketa.top:=tank.top+70;

boom.Left:=sam1.Left;

boom.Visible:=true;

sam1.Left:=sam1.left-1000;

i:=i+1;

end;

if   ((raketa.Top > sam2.Top) and      //если координаты 2 самолета и ракеты равны

(raketa.Top < sam2.Top+ sam2.height)

and

(raketa.left > sam2.left) and

(raketa.left < sam2.left+sam2.Width))

 then

begin

timer2.Enabled:=false;

raketa.left:=tank.left+50;

raketa.top:=tank.top+70;

boom2.Left:=sam2.Left;

boom2.Visible:=true;

sam2.left:=-1000;

i:=i+1;

end;

if   ((raketa.Top > sam3.Top) and     //если координаты 3 самолета и ракеты равны

(raketa.Top < sam3.Top+ sam3.height)

and

(raketa.left > sam3.left) and

(raketa.left < sam3.left+sam3.Width))

 then

begin

timer2.Enabled:=false;

raketa.left:=tank.left+50;

raketa.top:=tank.top+70;

boom3.Left:=sam3.Left;

boom3.Visible:=true;

sam3.left:=+1000;

i:=i+1;

end;

if   ((raketa.Top > sam4.Top) and    //если координаты 4 самолета и ракеты равны

(raketa.Top < sam4.Top+ sam4.height)

and

(raketa.left > sam4.left) and

(raketa.left < sam4.left+sam4.Width))

 then

begin

timer2.Enabled:=false;

raketa.left:=tank.left+50;

raketa.top:=tank.top+70;

boom4.Left:=sam4.Left;

boom4.Visible:=true;

sam4.left:=+700;

i:=i+1;

end;

if i=20 then begin

n:=10;

label3.Caption:='Уровень сложности:2';

end;

if i=40 then begin

n:=14;

label3.Caption:='Уровень сложности:3';

end;

if i=60 then begin

n:=20;

label3.Caption:='Уровень сложности:4';

end;

label1.caption:='Самолетов уничтожено:'+inttostr(i); //вывод сбитых самолетов

label2.Caption:='Ракет осталось:'+inttostr(j);       //вывод оставшихся ракет

if j<1 then                                          //если ракеты закончились

begin                                                //игра останавливается и выводиться сообщение

showmessage('Cамолетов врага уничтожено:'+inttostr(i));//вывод сбитых самолетов

close;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);         //при запуске игры выводиться сообщение

begin

showmessage('p-пауза,о-возобновить игру,i-навая игра,space-огонь, <-,-> -управление танком');

j:=10;

boom.Visible:=false;                                             //стартовое кол-во ракет

boom2.Visible:=false;

boom3.Visible:=false;

boom4.Visible:=false;

n:=8;

label1.caption:='Самолетов уничтожено:'+inttostr(i); //вывод сбитых самолетов

label2.Caption:='Ракет осталось:'+inttostr(j);       //вывод оставшихся ракет

label3.Caption:='Уровень сложности:1';

end;

end.


ПРИЛОЖЕНИЕ 2

Основное окно программы (Form1)

ПРИЛОЖЕНИЕ 3

Изображение самолета

ПРИЛОЖЕНИЕ 4

Изображение ракетной установки

ПРИЛОЖЕНИЕ 5

Изображение ракеты


ПРИЛОЖЕНИЕ 6

Окно во время работы программы


ПРИЛОЖЕНИЕ 7

Окно во время работы программы

ПРИЛОЖЕНИЕ 8

Окно после завершения работы программы


 

А также другие работы, которые могут Вас заинтересовать

31305. Методичні вказівки до виконання контольних і розрахункових завданнь з курсу “Теорія електропривода” 725.5 KB
  Сумісна робота двигуна і робочої машини. Вираз характеристик двигуна у відносних одиницях. Гальмівні режими роботи двигуна: а з віддачею енергії в мережу рекуперативне гальмування; б режим противмикання; в режим електродинамічного гальмування. Механічні характеристики і регулювання швидкості двигуна при шунтуванні якоря.
31306. ТЕОРІЯ ЕЛЕКТРОПРИВОДА 397.5 KB
  Незважаючи на різноманітність систем електропривода в завданні на проект а також у методичних вказівках здійснюється загальний підхід до розв’язання задач вибору потужності двигуна дослідження статичних і неусталених режимів. Розрахувати відсутні параметри тахограми орієнтовно визначити потужність двигуна вибрати за каталогом двигун і редуктор. Виконати уточнений розрахунок потужності електродвигуна використовуючи формули приведення моментів і мас що обертаються. Розрахувати й побудувати статичні характеристики двигуна в розімкненій і...
31307. Методичні вказівки щодо виконання лабораторних робіт з навчальної дисципліни «Теорiя електропривода» (частина I) 2.27 MB
  Гальмівний режим Залежно від того як використовується перетворена електрична енергія існує декілька гальмівних режимів: режим рекуперативного гальмування або генераторний режим із віддачею енергії у мережу; при цьому активна механічна потужність із вала двигуна перетворюється в електричну і за відрахуванням втрат віддається в мережу тобто. Перехід із рушійного режиму в режим рекуперативного гальмування здійснюється при кутовій швидкості двигуна вище кутової швидкості ідеального холостого ходу; режим противмикання; при цьому двигун...
31308. «ТЕОРIЯ ЕЛЕКТРОПРИВОДA» (ЧАСТИНА IІ) 4.07 MB
  1 На відміну від каскаду сталої потужності додаткова ЕРС вводиться в ротор АД від машини постійного струму механічно не зв’язаної з валом робочого двигуна рис. Очевидно що і потужність приводного двигуна ПД МПС повинна бути в цьому випадку однаковою з потужністю АД. машини постійного струму і випрямленої напруги ротора асинхронного двигуна. ЛАБОРАТОРНА РОБОТА №2 ДОСЛІДЖЕННЯ МЕХАНІЧНИХ ХАРАКТЕРИСТИК ДВИГУНА ПОСТІЙНОГО СТРУМУ В СИСТЕМІ КВ – Д МЕТА РОБОТИ Одержати експериментально швидкісні і за допомогою розрахунку –...
31309. Методичні вказівки щодо оформлення дипломних проектів (робіт) для студентів денної та заочної форм навчання 1.08 MB
  Зразок обкладинки дипломної роботи. Додаток Б Зразок обкладинки дипломного проекту. Додаток В Зразок титульної сторінки комплексного дипломного проекту Додаток Г Зразок титульної сторінки дипломного проекту. Додаток Д Оформлення аркуша технічного завдання на дипломний проект роботу Додаток Е Оформлення відомості дипломного проекту.
31310. ФОРМИРОВАНИЕ ПРЕДСТАВЛЕНИЙ О ВРЕМЕНИ И ПРОСТРАНСТВЕ У ДЕТЕЙ ДОШКОЛЬНОГО ВОЗРАСТА СРЕДСТВАМИ ИСКУССТВА 139.5 KB
  Выявить особенности представлений детей о пространстве и времени, отражённых в различных видах искусства. Разработать содержание и методы, обеспечивающие формирование представлений и времени и о пространстве, сохраняющих культурные ценности. Разработать целостную систему занятий по формированию представлений о пространстве и времени для детей 5-7 лет...
31311. Обучающая подсистема для лабораторного исследования характеристик замкнутых САУ в среде интернет 3.05 MB
  В данном дипломном проекте рассматривается Обучающая подсистема для лабораторного исследования характеристик замкнутых САУ в среде интернет. В экономической части дается техникоэкономическое обоснование разработки Обучающей подсистемы для лабораторного исследования характеристик замкнутых САУ в среде интернет с помощью частотных критериев устойчивости проводится расчет ее сметной стоимости и стоимости эксплуатации.1 Описание предметной области по характеристикам и частотным показателям качества САУ .
31312. Экспериментальная работа по ознакомлению детей старшего дошкольного возраста с Олимпийскими играми 281 KB
  Теоретические основы формирования представлений у детей старшего дошкольного возраста об Олимпийских играх. Научные основы развития детей старшего дошкольного возраста посредством олимпийского образования. Специфика формирования представлений детей старшего дошкольного возраста об Олимпийских играх 22 Выводы 31 II. Экспериментальная работа по ознакомлению детей старшего дошкольного возраста с Олимпийскими играми 2.
31313. Строительство электрической сети и расчет капитальных вложений 5.39 MB
  Без учета влияния cosφ определим по формуле: β –стоимость потерянного кВтч равная 105 руб. кВтч или 1050 руб. На распределительном силовом щите РСЩ отключить рубильник блока профилактируемой камеры. На рукоятке рубильника повесить плакат Не включать Работают люди.