Мегаобучалка Главная | О нас | Обратная связь


Организация входных и выходных данных



2019-12-29 206 Обсуждений (0)
Организация входных и выходных данных 0.00 из 5.00 0 оценок




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

После обработки поступающих данных в игровом процессе на экран выдается результат (выходные данные) в виде полученных очков. Также во время игры случайным образом создаются самолеты и летят по случайно заданным «маршрутам». Результат этих действий игрок видит на экране.

 

Разработка рабочего проекта

Разработка программы

Для разработки приложения игры «Сбей самолет» используется среда визуального программирования 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].Gr.Width)) and

(rocket.Y<(Su25[i].Y+Su25[i].Gr.Height)) and (rocket.Y>Su25[i].Y) then

begin

    rocket.Destroed:=true;

    rocket.Y:=Form1.Image1.Height+10;

    inc(Killed);

    FillZap(i);

end;

end;

end;

//==============================================================================

procedure FillZap(ind: integer);

begin

Su25[ind].X:=random(Form1.Image1.Width-35);

Su25[ind].Y:=-1;

Su25[ind].vectX:=random(Form1.Image1.Width div 2);

Su25[ind].vectY:=Form1.Image1.Height+10;

Su25[ind].koef_b:=Su25[ind].X;

Su25[ind].koef_a:=Su25[ind].vectX/Su25[ind].vectY;

end;

//==============================================================================

procedure Calc;

var i: integer;

begin

For i:=1 to n do

begin

if Su25[i].Y>Form1.Image1.Height then FillZap(i);

  Su25[i].X:=round(Su25[i].Y*Su25[i].koef_a+Su25[i].koef_b);

  inc(Su25[i].Y,random(10));

end;

 

if rocket.Destroed<>true then dec(rocket.Y,10);

if rocket.Y<-10 then

begin

rocket.Destroed:=true;

rocket.Y:=Form1.Image1.Height+10;

end;

end;

//==============================================================================

procedure ClearScr;

begin

Form1.Image1.Canvas.Brush.Color:=clBlack;

Form1.Image1.Canvas.FillRect(Rect(0,0,Form1.Image1.Width,Form1.Image1.Height));

end;

//==============================================================================

procedure LoadImages_;

var i: integer;

begin

For i:=1 to n do

begin

Su25[i].Gr:=TBitmap.Create;

Su25[i].Gr.LoadFromFile('graph\samolet1.bmp');

Su25[i].Gr.TransparentColor:=clRed;

Su25[i].Gr.Transparent:=true;

end;

turel.Gr:=TBitmap.Create;

turel.Gr.LoadFromFile('graph\turel.bmp');

turel.Gr.TransparentColor:=clRed;

turel.Gr.Transparent:=true;

turel.X:=turel.Gr.Width+10;

turel.Y:=521-turel.Gr.Height;

 

Rocket.Gr:=TBitmap.Create;

Rocket.Gr.LoadFromFile('graph\bullet.bmp');

Rocket.Gr.TransparentColor:=clWhite;

Rocket.Gr.Transparent:=true;

Rocket.Y:=Form1.Image1.Height+10;

Rocket.Destroed:=true;

 

end;

//==============================================================================

procedure DrawScene;

var I: integer;

begin

 For i:=1 to n do

begin

Form1.Image1.Canvas.Draw(Su25[i].X,Su25[i].Y, Su25[i].Gr);

 

end;

Form1.Image1.Canvas.Draw(turel.X,turel.Y,turel.Gr);

Form1.Image1.Canvas.Draw(rocket.x,rocket.Y, rocket.Gr);

end;

//==============================================================================

procedure Precache_;

var i: integer;

begin

For i:=1 to n do FillZap(i);

end;

//==============================================================================

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Calc;

Colision;

ClearScr;

DrawScene;

label3.Caption:=inttostr(Killed)+' самолетов';

if killed>=100 then

begin

label3.Caption:='Вы выйграли';

Timer1.Enabled:=false;

Button1.Enabled:=true;

killed:=0;

end;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

Randomize;

LoadImages_;

Precache_;

ClearScr;

end;

 

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Timer1.Enabled:=false;

end;

 

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

Shift: TShiftState);

begin

 case Key of

VK_LEFT : begin

          if turel.X >0 then dec(turel.X,10);

          end;

VK_RIGHT : begin

          if turel.X<Image1.Width-turel.Gr.Width then inc(turel.X,10);

          end;

VK_SPACE : begin

            if rocket.Destroed then

              begin

                 rocket.Destroed:=false;

                 rocket.X:=turel.X + turel.Gr.Width div 2;

              end;

          end;

VK_ESCAPE : begin

            Timer1.Enabled:=false;

            Button1.Enabled:=true;

 

          end;

 end;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

 

Button1.Enabled:=false;

Timer1.Enabled:=true;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Showmessage('Игра "Сбей самолет"'#13#13#13'Автор: студент Дин-809-01 Быстрикова Анна')

end;

end.

 

Описание программы

Общие сведения: программа разработана в среде программирования Delphi 7.

Функциональное назначение программы: программа предназначена для развлечения.

Используемые технические средства: при разработке программы были использованы следующие технические и программные средства:

ü компьютер на базе процессора Intel Pentium 4 3.00 GHz

ü объем оперативной памяти 512 Мб

ü операционная система Windows XP Professional

Вызов и загрузка: для того, чтобы запустить программу, необходимо запустить файл «Project1.exe».

 



2019-12-29 206 Обсуждений (0)
Организация входных и выходных данных 0.00 из 5.00 0 оценок









Обсуждение в статье: Организация входных и выходных данных

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (206)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.005 сек.)