Автор работы: Пользователь скрыл имя, 26 Января 2012 в 07:33, отчет по практике
ПОСТАНОВКА ЗАДАЧИ
Ознакомиться с различными типами компьютерных игр, моделированием систем реального времени, создать собственный вариант программы компьютерной игры. Согласно варианту игра «Гидроцикл», и музыкальное сопровождение Игорь Тальков Родина.
Федеральное агентство по образованию
Государственное образовательное учреждение
высшего профессионального образования
«Ижевский
государственный технический
Факультет «Информатика и вычислительная техника»
Кафедра
«Программное обеспечение»
Лабораторная работа №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(
//Задаем движение препятствия
Block1.Top:=Block1.Top+(
//Проверяем не произошла ли аварии
if (Block1.Top+Block1.Height)>(
if (Block1.Left+1<=Car.Left)
and (Car.Left<=(Block1.Left+
then GameOver;
if (Block1.Top+Block1.Height)>(
if (Block1.Left+1<=(Car.Left+Car.
then GameOver;
//Дошло ли препятствие до нижней границы
If Block1.Top+Block1.Height>=(
begin
Bonus:=Bonus+1;
Block1.Hide;
Block1.Top:=1;
//Препятствие не должно выходить за левую или правую границу
repeat
Block1.Left:=Random(450-Car.
until (Block1.Left>10);
Block1.Show;
Алгоритм управления лодкой
procedure TMainForm.FormMouseDown(
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:=
MainForm.Timer2.Enabled:=
MainForm.Timer3.Enabled:=
MainForm.Timer4.Enabled:=
MainForm.Timer5.Enabled:=
MainForm.Timer6.Enabled:=
MainForm.Timer7.Enabled:=
MainForm.Timer8.Enabled:=
MainForm.Timer9.Enabled:=
MainForm.Timer10.Enabled:=
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.
Result := 1
else if
List.Strings[Index1]=List.
Result := 0
else
Result := -1;
end;
procedure rezalt;
var s:TStringList;
begin
Form1.Memo1.Lines.Add(
s:=TStringList.Create;
s.Clear;
s.Text:=Form1.Memo1.Lines.
s.Sorted:=true;
s.CustomSort(MySort);
Form1.Memo1.Lines.Clear;
Form1.memo1.Lines.Text:=s.
end;
//Если случилась авария
procedure GameOver;
begin
MainForm.Timer1.Enabled:=
MainForm.Timer2.Enabled:=
MainForm.Timer3.Enabled:=
MainForm.Timer4.Enabled:=
MainForm.Timer5.Enabled:=
MainForm.Timer6.Enabled:=
MainForm.Timer7.Enabled:=
MainForm.Timer8.Enabled:=
MainForm.Timer9.Enabled:=
MainForm.Timer10.Enabled:=
ShowMessage('Вы врезались');
PlayerName:=InputBox('Введите имя','Введите имя','ИмяИгрока');
rezalt;
end;
procedure TMainForm.FormMouseDown(
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(
//Задаем движение препятствия1
Block1.Top:=Block1.Top+(
//Проверяем не произошла ли авария
if (Block1.Top+Block1.Height)>(
if
(Block1.Left+1<=Car.Left) and (Car.Left<=(Block1.Left+
then GameOver;
if (Block1.Top+Block1.Height)>(
if
(Block1.Left+1<=(Car.Left+Car.
then GameOver;
//Дошло ли препятствие до нижней границы
If Block1.Top+Block1.Height>=(
begin
Bonus:=Bonus+1;
Block1.Hide;
Block1.Top:=1;
//препятствие не должно вылазить за левую границу
repeat
Block1.Left:=Random(450-Car.
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;
//Включаем все таймеры;