Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР 4.doc
Скачиваний:
0
Добавлен:
19.08.2019
Размер:
368.13 Кб
Скачать

3. Иерархическая схема

ВольнаяБорьбаV1.1

Unit1

TimerTimer

FormCreate

StopButtonClick

ExitButtonClick

LoadButtonClick

ResGridDrawCell

StartButtonClick

TrackBarChange

Comm_b

MakePair

Solve

Comm_med

Comm_e

GameTableDrawCell

Clear

ВольнаяБорьбаV1.1 – основная программа.

Unit1 – модуль для главной формы программы, в нем моделируются соревнования.

FormCreate – процедура создания формы.

TrackBarChange – процедура, вызывается при изменении положения указателя TrackBar, меняет интервал времени Timer.Interval за который будет моделироваться одна секунда моделируемого времени.

StopButtonClick – процедура, при нажатии на кнопку StopButton останавливает ход моделирования, меняет надпись на кнопке с «Стоп» на «Продолжить», при повторном нажатии меняет надпись на «Стоп», продолжает ход моделирования.

ExitButtonClick – процедура, выходит из программы. При нажатии на кнопку ExitButton выведет сообщение «Вы действительно хотите выйти?», тем самым пользователь сможет подтвердить намерение закрыть программу.

LoadButtonClick – процедура чтения данных о спортсменах в компонент HeroList из внешнего файла in.txt.

ResGridDrawCell – процедура, обрисовывает клетки компонента ResGrid.

StartButtonClick – процедура, начинает моделирование соревнования на имеющихся входных данных, если спортсменов в компоненте HeroList указано меньше, чем двое, то выведет сообщение об ошибке и не будет моделировать столь предсказуемое соревнование.

TimerTimer – процедура, по истечению интервала времени Timer.Interval моделирует соревнование.

Solve – процедура, сортирует текущие результаты соревнования и выводит их в компонент ResGrid.

MakePair – процедура, случайным образом выбирает 2 борцов, которые еще не состязались друг с другом.

Comm_b – процедура, случайным образом выводит комментарий, соответствующий началу соревнования.

Comm_med – процедура, случайным образом выводит комментарий, соответствующий ходу соревнования.

Comm_e – процедура, случайным образом выводит комментарий, соответствующий окончанию соревнования.

Clear – процедура, обнуляет двумерный массив rr, в котором хранится для индекса i,j хранится 1, если i-ый спортсмен выиграл j-ого и -1 в обратном случае; инициализирует значения компонента GameTable.

GameTableDrawCell – процедура, обрисовывает компонент GameTable.

4. Схема программы

n:=4;

Gbegin[1]:='Игра обещает быть во многом захватывающей... Посмотрим.';

Gbegin[2]:='С вами я, Дмитрий Губерниев. А состязаться сейчас будут';

Gbegin[3]:='Битва за звание чемпиона по версии WWE.';

Gbegin[4]:='Титаны будут сотрясать эту бренную землю.';

Gbegin[5]:='Немедленно уберите от экранов слабонервных, беременных женщин и маленьких детей!';

Gbegin[6]:='Надежда русской вольной борьбы!';

Gbegin[7]:='Встречайте! Герои нашего времени!';

Gbegin[8]:='Во многом решающий для противников матч.';

Gbegin[9]:='Будет жарко...';

Gbegin[10]:='Да начнётся битва!';

Gend[1]:='Бой закончен.';

Gend[2]:='Победил сильнейший!';

Gend[3]:='Выдохни! Всё закончилось!';

Gend[4]:='Битва отшумела...';

Gend[5]:='Да здравствуют чемпионы!';

Gend[6]:='Да здравствует разум! Да сгинет маразм!';

Gend[7]:='Нет ничего невозможного!';

Gend[8]:='Противники были достойны друг друга, но...';

Gend[9]:='И вот он результат!';

Gend[10]:='Исход игры очень неожиданный.';

Gmed[1]:=' проводит опасный захват! неужели это победа?';

Gmed[2]:=' не так прост, как кажется! Хитро уселся на противника жмет его к полу.';

Gmed[3]:=' - это провал сезона. Я отказываюсь комментировать это неспортивное поведение!';

Gmed[4]:=' явно не хватает кальция! Я со своей рубки слышу, как у него хрустят кости!';

Gmed[5]:=' вновь поражает! Вырваться из столь сложного захвата! Мастерски!';

Gmed[6]:=' идёт к успеху, но бой еще не закончен.';

Gmed[7]:=' явно готовился к этому бою всю жизнь. Вы посмотрите на его атаки!';

Gmed[8]:=' нужно сделать лицо попроще. Хотя, находясь в таком захвате, это сделать...кгхм...проблематично.';

Gmed[9]:=' пора уносить с поля. Это уже провал.';

Gmed[10]:=' идёт к техничной, методической победе.';

Application.CreateForm(TForm1, Form1);

GotWinner:=true;

Form1.ResGrid.Canvas.Font.Color:=clBlack;

Form1.ResGrid.Canvas.TextOut(Rect.Left+2,Rect.Top+2,

Form1.ResGrid.Cells[ACol,ARow]);

Нет Да

Нет Да

Form1.ResGrid.Canvas.Brush.Color:=clAqua;

Form1.ResGrid.Canvas.Brush.Color:= clYellow;

Form1.ResGrid.Canvas.Brush.Color:= clRed;

Нет Да

Нет Да

Нет Да

Form1.ResGrid.Canvas.FillRect(Rect);

Form1.ResGrid.RowCount:=0;

Form1.ResGrid.ColCount:=0;

Form1.GameTable.RowCount:=0;

Form1.GameTable.ColCount:=0;

Guberniev.Text:='';

I:=0;

N:=HeroListLines[i];

Нет Да

N:=1;

a[i+1].name:=HeroList.Lines[i];

a[i+1].score:=0;

a[i+1].battles:=0;

a[i+1].wins:=0;

inc(I);

Нет Да

MessageDlg('Количество спортсменов не может быть меньше 2', mtWarning, [mbOk],0);

ff:=false;

GotWinner:=false;

ResGrid.RowCount := n + 1;

ResGrid.ColCount := 5;

ResGrid.ColWidths[0]:=40;

ResGrid.ColWidths[1]:=150;

ResGrid.ColWidths[2]:=60;

ResGrid.ColWidths[3]:=60;

ResGrid.ColWidths[4]:=80;

ResGrid.Width:=400;

Нет Да

Form1.GameTable.ColCount:=n+1;

Form1.GameTable.RowCount:=n+1;

ResGrid.FixedCols:=1;

ResGrid.FixedRows:=1;

GameTable.FixedCols:=1;

GameTable.FixedRows:=1;

I:=0;

К стр. 8

К стр.8

Form1.GameTable.ColWidths[i]:=80;

Form1.GameTable.Cells[0,i]:=a[i].name;

Form1.GameTable.Cells[i,0]:=a[i].name;

Inc(i);

Из стр.7

Нет Да

I:=1;

TT:=1;

J:=1;

Used[I,j]:=false;

Inc(j);

Inc(i);

Нет Да

Нет Да

I:=1;

Used[i,i]:=false;

Inc(i);

Нет Да

Из стр.7

W:= random(10000) + 1;

progress.position := progress.position + SpeedBar.Position;

TSec:=TSec+SpeedBar.Position;

TMin:=TMin + TSec div 60;

TSec:=TSec mod 60;

str(TMin:2,s1);

str(TSec,s2);

TimeM.Caption:='Время: ' + s1 + ':' + s2;

progress.position:=0;

TMin:=0;

TSec:=0;

p1:=random(15);

p2:=random(15);

w:=random(2);

Да

К стр.10

Нет

Нет Да

Н

Нет

К стр.10

Да

К стр.10

p1:=p1+10;

str(p1,s1);

str(p2,s2);

Res1.Font.Color:=clBlue;

Res2.Font.Color:=clRed;

rr[tek1,tek2]:=1;

rr[tek2,tek1]:=-1;

Form1.GameTable.Cells[tek2,tek1]:=s2 + ':' + s1;

Form1.GameTable.Cells[tek1,tek2]:=s1 + ':' + s2;

s1:=’Победил ’ ' + a[tek1].name + ' co счётом ' + s1;

s2:='Проиграл' + a[tek2].name + ' co счётом ' + s2;

inc(a[tek1].wins);

p2:=p2+10;

str(p1,s1);

str(p2,s2);

Res2.Font.Color:=clBlue;

Res1.Font.Color:=clRed;

rr[tek1,tek2]:=-1;

rr[tek2,tek1]:=1;

Form1.GameTable.Cells[tek2,tek1]:=s2 + ':' + s1;

Form1.GameTable.Cells[tek1,tek2]:=s1 + ':' + s2;

s2:=’Победил ' + a[tek2].name + ' co cчетом ' + s2;

s1:='Проиграл ' + a[tek1].name + ' co cчетом' + s1;

inc(a[tek2].wins);

Res1.Caption:=s1;

Res2.Caption:=s2;

a[tek1].score := a[tek1].score + p1;

inc(a[tek1].battles);

a[tek2].score := a[tek2].score + p2;

inc(a[tek2].battles);

inc(TT);

str(p1,s1);

str(p2,s2);

GotWinner:=true;

ff:=true;

MessageDlg('Соревнования окончились..' + #13 + 'Победил ' + list[1].name + '.',

mtInformation,[mbOk],0);

Из стр.9

Нет Да

Из

стр.9

Нет Да

Из стр.9

I:=1;

list[i]:=a[i];

inc(i);

Нет Да

I:=n;

J:=1;

buf := list[j];

list[j] := list[i];

list[i] := buf;

Inc(j);

Нет Да

Нет Да (list[j].wins < list[i].wins)

or (list[j].wins=list[i].wins)

and (list[j].score<list[i].score)

I:=1;

К стр.12

str(i,ss);

Form1.ResGrid.Cells[0,i]:=ss;

Form1.ResGrid.Cells[1,i]:=list[i].name;

str(list[i].battles,ss);

Form1.ResGrid.Cells[2,i]:=ss;

str(list[i].wins,ss);

Form1.ResGrid.Cells[3,i]:=ss;

str(list[i].score,ss);

Form1.ResGrid.Cells[4,i]:=ss;

Inc(i);

Из стр.11

Нет Да

Form1.ResGrid.Cells[0,0]:='Место';

Form1.ResGrid.Cells[1,0]:='Имя';

Form1.ResGrid.Cells[2,0]:='Игр';

Form1.ResGrid.Cells[3,0]:='Побед';

Form1.ResGrid.Cells[4,0]:='Очки';

Form1.Guberniev.Text:=Form1.Guberniev.Text +

Gbegin[random(10)+1] + ' ' + a[tek1].name + ' против ' + a[tek2].name

+ #13 + #13;

Form1.Guberniev.Perform(wm_vscroll,sb_bottom,0)

str(p1,s1);

str(p2,s2);

Form1.Guberniev.Text:=Form1.Guberniev.Text +

Gend[random(10)+1] + #13 + 'Окончательный счёт:' + #13

+ a[tek1].name + ' ' + s1 + ' ' +

a[tek2].name + ' ' + s2 + #13 + #13;

Form1.Guberniev.Perform(wm_vscroll,sb_bottom,0)

W:=random(2);

name:=a[tek1].name

name:=a[tek2].name

Form1.Guberniev.Text:=Form1.Guberniev.Text + name +

Gmed[random(10)+1] + #13 + #13;

Form1.Guberniev.Perform(wm_vscroll,sb_bottom,0)

Да Нет

tek1:=random(n) + 1;

inc(tek1);

tek1:=1;

Tek2:=random(n) + 1;

inc(tek2);

Tek2:=1;

used[tek1][tek2]:=true;

used[tek2][tek1]:=true;

Form1.Hero1.Text:=a[tek1].name;

Form1.Hero2.Text:=a[tek2].name;

Нет Да

Нет

Да

Нет Да

Нет

Да

Timer.Interval:=1000 - TrackBar.Position * 20;

ResGrid.ColCount := 5;

ResGrid.ColWidths[0]:=40;

ResGrid.ColWidths[1]:=150;

ResGrid.ColWidths[2]:=60;

ResGrid.ColWidths[3]:=60;

ResGrid.ColWidths[4]:=80;

ResGrid.Width:=400;

GameTable.ColCount := 5;

I:=0;

GameTable.ColWidths[i]:=80;

Inc(i);

Form1.Timer.Enabled:=false;

Form1.StopButton.Caption:='Продолжить';

Form1.Timer.Enabled:=true;

Form1.StopButton.Caption:='Стоп';

Form1.Close;

Нет

Да

Нет Да

Нет MessageDlg('Вы

Действительно хотите

выйти?', mtInformation,

[mbYes,mbNo],0)=mrYes

Да

Да

HeroList.Lines.LoadFromFile('in.txt');

Form1.GameTable.Canvas.Brush.Color:=clAqua

Form1.GameTable.Canvas.Brush.Color:=clRed

Form1.GameTable.Canvas.FillRect(rect);

Form1.GameTable.Canvas.Font.Color:=clBlack;

Form1.GameTable.Canvas.TextOut(Rect.Left+2,Rect.Top+2,

Form1.GameTable.Cells[ACol,ARow]);

Нет Да

Нет Да

Нет Да

I:=1;

J:=1;

Rr[I,j]:=0;

GameTable.Cells[I,j]:=’’;

Inc(j);

Inc(i);

Нет Да

Нет Да

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]