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);
Нет Да
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);
Нет Да
Нет Да