Компьютерная игра

Автор работы: Пользователь скрыл имя, 26 Января 2012 в 07:33, отчет по практике

Описание

ПОСТАНОВКА ЗАДАЧИ
Ознакомиться с различными типами компьютерных игр, моделированием систем реального времени, создать собственный вариант программы компьютерной игры. Согласно варианту игра «Гидроцикл», и музыкальное сопровождение Игорь Тальков Родина.

Работа состоит из  1 файл

trpo1.docx

— 260.72 Кб (Скачать документ)

Федеральное агентство по образованию

Государственное образовательное учреждение

высшего профессионального образования

«Ижевский государственный технический университет»

Факультет «Информатика и вычислительная техника»

Кафедра «Программное обеспечение» 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Лабораторная  работа №1

по дисциплине: «Технология разработки  программного обеспечения»

на тему: «Компьютерная игра»

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Выполнил:

студент гр.7-78-11         Верняев С.В. 

Принял:          Килин И. В. 
 
 
 
 

Ижевск 2011

ПОСТАНОВКА ЗАДАЧИ

Ознакомиться  с различными типами компьютерных игр, моделированием систем реального времени,  создать собственный вариант  программы компьютерной игры. Согласно варианту игра «Гидроцикл», и музыкальное  сопровождение Игорь Тальков  Родина.

ОПИСАНИЕ РЕШЕНИЯ ЗАДАЧИ

Основной принцип: пользователь управляет машинкой правой  и левой кнопками мыши, объезжая препятствия, как только препятствие  доходит до границы экрана, игрок  набирает 1 очко.

Объявим глобальные переменные:

Bonus:integer; - количество очков пользователя.

11 компонентов Image, 10 из них назовем Block1,Block2..Block10. А одна будет называться Car.

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

Каждому таймеру  напишем процедуру (Изменяться будет только имя Image - для Timer1 будет Block1, для Timer2 будет Block2): 

//Отображаем  очки игрока

Label1.Caption:=IntToStr(Bonus); 

 //Задаем движение препятствия

Block1.Top:=Block1.Top+(Block1.Height div 2); 

//Проверяем не произошла ли аварии

if (Block1.Top+Block1.Height)>(Car.Top) then

   if (Block1.Left+1<=Car.Left) and (Car.Left<=(Block1.Left+Block1.Width-1))

    then  GameOver; 

if (Block1.Top+Block1.Height)>(Car.Top) then

   if (Block1.Left+1<=(Car.Left+Car.Width)) and ((Car.Left+Car.Width)<=(Block1.Left+Block1.Width-1))

       then GameOver; 

//Дошло ли препятствие до нижней границы

 If  Block1.Top+Block1.Height>=(MainForm.ClientHeight) then

begin

  Bonus:=Bonus+1;

  Block1.Hide;

  Block1.Top:=1; 

//Препятствие не должно выходить за левую или правую границу

        repeat

          Block1.Left:=Random(450-Car.Width);

        until (Block1.Left>10);

        Block1.Show;

Алгоритм управления лодкой

procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

//Управление машиной кнопками мыши

If (Button=mbLeft) and (Car.Left>10) then

    Car.Left:=Car.Left-(Car.Width div 2); 

If (Button=mbRight) and (Car.Left<(450-Car.Width)) then

    Car.Left:=Car.Left+(Car.Width div 2);

При нажатии кнопки старт включаем таймеры и распологаем  картинки в нужном месте

Также есть возможность  приостановить игру - кнопка Пауза

Процедура окончания  игры

procedure GameOver;

begin

MainForm.Timer1.Enabled:=false;

 MainForm.Timer2.Enabled:=false;

MainForm.Timer3.Enabled:=false;

MainForm.Timer4.Enabled:=false;

MainForm.Timer5.Enabled:=false;

MainForm.Timer6.Enabled:=false;

MainForm.Timer7.Enabled:=false;

MainForm.Timer8.Enabled:=false;

MainForm.Timer9.Enabled:=false;

MainForm.Timer10.Enabled:=false; 

 ShowMessage('Вы врезались');

end; 

Контрольный пример

 

 
 
 
 
 
 

Код программы:

unit UMain; 

interface 

uses

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

  Dialogs, ExtCtrls, StdCtrls, jpeg;

var

  MainForm: TMainForm;

  //Мои переменные

  PlayerName:string;

  Bonus:integer; //Очки игрока 
 

implementation 

uses Unit1, Unit2; 

{$R *.dfm} 

function MySort(List: TStringList; Index1, Index2: Integer): Integer;

begin

  if List.Strings[Index1]<List.Strings[Index2] then

    Result := 1

  else if List.Strings[Index1]=List.Strings[Index2] then

    Result := 0

  else

    Result := -1;

end; 

procedure rezalt;

var s:TStringList;

begin 

Form1.Memo1.Lines.Add(IntToStr(Bonus)+' очков '+ PlayerName);

s:=TStringList.Create;

s.Clear;

s.Text:=Form1.Memo1.Lines.Text;

s.Sorted:=true;

s.CustomSort(MySort);

Form1.Memo1.Lines.Clear;

Form1.memo1.Lines.Text:=s.Text;

end; 

//Если случилась авария

procedure GameOver; 

begin

MainForm.Timer1.Enabled:=false;

MainForm.Timer2.Enabled:=false;

MainForm.Timer3.Enabled:=false;

MainForm.Timer4.Enabled:=false;

MainForm.Timer5.Enabled:=false;

MainForm.Timer6.Enabled:=false;

MainForm.Timer7.Enabled:=false;

MainForm.Timer8.Enabled:=false;

MainForm.Timer9.Enabled:=false;

MainForm.Timer10.Enabled:=false;

ShowMessage('Вы врезались');

PlayerName:=InputBox('Введите имя','Введите имя','ИмяИгрока');

rezalt; 
 

end; 

procedure TMainForm.FormMouseDown(Sender: TObject; Button: TMouseButton;

  Shift: TShiftState; X, Y: Integer);

begin

//Управление машиной кнопками мышки

If (Button=mbLeft) and (Car.Left>10) then

    Car.Left:=Car.Left-(Car.Width div 2); 

If (Button=mbRight) and (Car.Left<(450-Car.Width)) then

    Car.Left:=Car.Left+(Car.Width div 2); 
 

end; 

procedure TMainForm.Timer1Timer(Sender: TObject);

begin

//Отображаем очки игрока

Label1.Caption:=IntToStr(Bonus); 

//Задаем движение препятствия1

  Block1.Top:=Block1.Top+(Block1.Height div 2); 

//Проверяем не произошла ли авария

if (Block1.Top+Block1.Height)>(Car.Top) then

   if (Block1.Left+1<=Car.Left) and (Car.Left<=(Block1.Left+Block1.Width-1))

    then  GameOver; 
 

if (Block1.Top+Block1.Height)>(Car.Top) then

   if (Block1.Left+1<=(Car.Left+Car.Width)) and ((Car.Left+Car.Width)<=(Block1.Left+Block1.Width-1))

       then GameOver; 
 

//Дошло  ли препятствие  до нижней границы

  If  Block1.Top+Block1.Height>=(MainForm.ClientHeight) then

begin

        Bonus:=Bonus+1;

        Block1.Hide;

        Block1.Top:=1; 

        //препятствие не  должно вылазить  за левую границу

        repeat

          Block1.Left:=Random(450-Car.Width);

        until (Block1.Left>10);

        Block1.Show;

end; 
 
 
 

end; 

procedure TMainForm.FormCreate(Sender: TObject); 

begin

Randomize;

Label1.Caption:='';

end; 

procedure TMainForm.Button2Click(Sender: TObject);

begin

Application.Terminate;

end; 

procedure TMainForm.Button1Click(Sender: TObject);

begin

//Располагаем  препятсвия

Block1.Left:=128;

  Block1.Top:=288; 

Block2.Left:=384;

Block2.Top:=216; 

Block3.Left:=32;

Block3.Top:=8; 

Block4.Left:=205;

Block4.Top:=32; 

Block5.Left:=400;

Block5.Top:=8; 

Block6.Left:=312;

Block6.Top:=112; 

Block7.Left:=104;

Block7.Top:=120; 

Block8.Left:=208;

Block8.Top:=176; 

Block9.Left:=312;

Block9.Top:=280; 

Block10.Left:=32;

Block10.Top:=240; 

Car.Left:=216;

Car.Top:=416; 

  Bonus:=0; 

Label1.Caption:='0'; 
 

//Показываем  препятствия

  Block1.Show;

Block2.Show;

Block3.Show;

Block4.Show;

Block5.Show;

Block6.Show;

Block7.Show;

Block8.Show;

Block9.Show;

  Block10.Show;

Car.Show; 

//Включаем  все таймеры;

Информация о работе Компьютерная игра