- •Кафедра Информатики
- •Объектно-ориентированное программирование Моделирование выборов президента
- •Содержание
- •Введение
- •1. Анализ технического задания
- •Анализ предметной области
- •1.2 Выбор среды программирования
- •2. Разработка
- •2.1 Uml диаграмма классов
- •2.2 Разработка проекта программы
- •3. Реализация
- •3.1 Блок-схемы алгоритмов программы
- •3.2 Тестирование
- •Заключение
- •Приложение a Документированный текст программы
- •Приложение б Экранные формы
3. Реализация
3.1 Блок-схемы алгоритмов программы
Блок-схема алгоритма дачи взятки и проверки денег представлены на рисунках 3.1 и 3.2 соответственно.
Рис 3.1 процедуры TForm2.ButtonVzyatkaClick
Рис 3.2 функции TForm2.ProverkaMoney
3.2 Тестирование
В данной программе наиболее критическими являются ошибки, возникающие при ввода данных взятки и подделки бюллетеней, за этот процессы отвечают модули ButtonVzyatkaClick и ButtonNasClick. Так как их реализация обрабоки ошибок одинакова, то достаточно протестировать один модуль.
Объект испытания: ButtonVzyatkaClick.
Цель испытания: выявить все возможные варианты неправильного ввода и предусмотреть их ввод пользователем.
Требования к модулю: данный модуль проверяет правильность ввода данных и работает с ними в дальнейшем. Вводимые данные не могут быть отрицательными, могут содержать в себе только цифры, количество введенных символов не должно превышать семи.
Метод испытаний: модуль тестировался методом черного ящика.
Нормальными условиями для данного модуля является положительное десятичное число. При нормальных условиях модуль выдаёт правильный результат. Результаты приведены в таблице 3.31.
Таблица 3.31 Тестирование при нормальных условиях
-
Входные данные
Сбой в работе
15646
нет
1222
нет
232456
нет
Граничным значением для данного модуля является ввод строки c 7 символами, при данных условиях алгоритм работает верно. При вводе малого количества цифр модуль выдаёт правильный результат. Результаты приведены в таблице 3.32.
Таблица 3.32 Тестирование при граничных значениях
-
Входные данные
Сбой в работе
9999999
нет
0
нет
Экстремальными данными является отсутствие введенных символов. Результаты приведены в таблице 3.33.
Таблица 3.33 Тестирование при экстремальных данных
-
Входные данные
Сбой в работе
Сообщение: Введите данные!
В ходе тестирования серьёзных ошибок (приводящих к досрочному выходу из программы) не было выявлено. Все крайние ситуации, возникающие при вводе данных, были предусмотрены. Программа работает верно, во всех выше изложенных ситуациях и возвращает правильный результат.
Заключение
В ходе выполнения работы была подробно рассмотрена предметная область, в результате чего были выделены объекты, их свойства и методы. Были учтены пределы изменения числовых значений, что сделало программу более надежной. Выполнили все задачи, поставленные во введении. Получили гибкую систему, которую можно надстраивать и пополнять новыми возможностями.
Приложение a Документированный текст программы
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, ComCtrls, jpeg, Xpman, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
ProgressBar1: TProgressBar;
Timer1: TTimer;
Label1: TLabel;
procedure FormActivate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure exits;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
extglobal:boolean;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
begin
Timer1.Enabled:=true;
extglobal:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ProgressBar1.Position>=ProgressBar1.Max then begin
Timer1.Enabled:=false;
form1.Hide;
Form2.Visible:=true;
end;
ProgressBar1.Position:=ProgressBar1.Position+25;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
exits;
if extglobal then
Action:=caFree;
end;
procedure TForm1.exits;
var ext:byte;
begin
ext:=MessageDlg('Вы действительно хотите выйти?',mtCustom,mbOKCancel,1);
if ext=mrOk then
extglobal:=true;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg, OleCtrls, MARQUEELib_TLB,
Buttons, XPMan, TeeProcs, TeEngine, Chart, Series, Menus, AppEvnts;
type
TFirstClass=class
protected
procedure SetValue(NewValue:integer); virtual; abstract;
function GetValue:integer; virtual; abstract;
end;
Tokrug=class (TFirstClass)
public
Fnaselenie:integer;
FMaskNas:boolean;
FMaskMinVs:boolean;
FLider:integer;
Floyalnost:byte;
FReklama:byte;
FMinimalMoney:integer;
FAct:array[0..5] of boolean;
procedure SetValue(NewValue:integer); override;
function GetValue:integer; override;
property Lider:integer read GetValue write SetValue;
end;
TKandidat=class(TFirstClass)
public
FNominal:integer;
FReiting:byte;
procedure SetValue(NewValue:integer); override;
function GetValue:integer; override;
procedure SetReiting(NewValue:byte);
function GetReiting:byte;
function ProverkaMoney:boolean;
property Nominal:integer read GetValue write SetValue;
property Reiting:byte read GetReiting write SetReiting;
end;
TZhylik=class(TKandidat)
private
procedure SetReiting(NewValue:byte);
property Reiting:byte read GetReiting write SetReiting;
end;
TForm2 = class(TForm)
BackGround: TImage;
Map: TImage;
Marquee1: TMarquee;
XPManifest1: TXPManifest;
Graphics: TChart;
Series1: TBarSeries;
StartMenu: TRadioGroup;
MainMenu1: TMainMenu;
GameMenu: TMenuItem;
StartBtn: TMenuItem;
ExitBtn: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
ButtonStart: TButton;
LabelKarta: TLabel;
Portret: TImage;
InfoOfOkrug: TGroupBox;
MenuOfActions: TRadioGroup;
Dalnvostok: TImage;
Sibir: TImage;
Ural: TImage;
Privolga: TImage;
N_W: TImage;
Centre: TImage;
Sorth: TImage;
Naselenie: TLabeledEdit;
Lider: TLabeledEdit;
Loyalnost: TLabeledEdit;
MinVzyatka: TLabeledEdit;
WindowOfInfo: TGroupBox;
Kapital: TLabeledEdit;
Reiting: TLabeledEdit;
ButtonOfActions: TButton;
ButtonDecDays: TSpeedButton;
OstatokDays: TLabel;
OstatokXodov: TLabel;
LabelDay: TLabel;
N1: TMenuItem;
EndBtn: TMenuItem;
ReklamaGroupBox: TGroupBox;
ReklamaOne: TRadioButton;
ReklamaTwo: TRadioButton;
ButtonReklama: TButton;
VzytkaGroupBox: TGroupBox;
ButtonVzyatka: TButton;
Vzyatka: TLabeledEdit;
VzyatkaLabel: TLabel;
NasGroupBox: TGroupBox;
Nas: TLabel;
ButtonNas: TButton;
NasVzytka: TLabeledEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Image1: TImage;
Timer1: TTimer;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure Graphic;
procedure ExitBtnClick(Sender: TObject);
procedure StartBtnClick(Sender: TObject);
procedure ButtonStartClick(Sender: TObject);
procedure OkrugRandom;
procedure DalnvostokDblClick(Sender: TObject);
procedure SibirDblClick(Sender: TObject);
procedure UralDblClick(Sender: TObject);
procedure N_WDblClick(Sender: TObject);
procedure PrivolgaDblClick(Sender: TObject);
procedure CentreDblClick(Sender: TObject);
procedure SorthDblClick(Sender: TObject);
function NameOfKandidat(index:integer):string;
procedure ButtonDecDaysClick(Sender: TObject);
procedure ButtonOfActionsClick(Sender: TObject);
procedure EndBtnClick(Sender: TObject);
function ProverkaMoney(summa:integer; okr:Tokrug):boolean;
procedure GetBonus(Plus:boolean);
procedure Actions(okr:tOkrug);
procedure xod;
procedure ButtonReklamaClick(Sender: TObject);
procedure UpDates(okr:tokrug);
procedure VzyatkaKeyPress(Sender: TObject; var Key: Char);
procedure ButtonVzyatkaClick(Sender: TObject);
function NameOfOkrug(index:integer):Tokrug;
procedure ButtonNasClick(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const bonus=2;
var
Form2: TForm2;
Zhirik,Proxor,Zugan,Kandidat1:TKandidat;
Pytin,kandidat2:TZhylik;
Centr,Vostok,Sybir,S_Zap,Ug,Yral,Volga:Tokrug;
Player,okrug,day,hod:byte;
act0,act1,act2,act3,act4,ac5,zhyl:boolean;
reklama:string;
//Округа: 1:Южный, 2:Центр, 3:Север, 4:Волга, 5:Урал, 6:Сибирь, 7:Восток
implementation
uses Unit1, Unit3, Math, Unit4;
{$R *.dfm}
procedure TForm2.GetBonus(Plus:boolean);
var k1,k2:integer;
begin
repeat
k1:=random(3);
k2:=random(3);
until (k1<>Player) and (k1<>k2) and (k2<>Player);
case k1 of
0:if Plus then Pytin.Reiting:=Pytin.Reiting-bonus-1 else Pytin.Reiting:=Pytin.Reiting-bonus+1;
1:if Plus then Proxor.Reiting:=Proxor.Reiting-bonus+1 else Proxor.Reiting:=Proxor.Reiting+bonus-1;
2:if Plus then Zhirik.Reiting:=Zhirik.Reiting-bonus+1 else Zhirik.Reiting:=Zhirik.Reiting+bonus-1;
3:if Plus then Zugan.Reiting:=Zugan.Reiting-bonus+1 else Zugan.Reiting:=Zugan.Reiting+bonus-1;
end;
case k2 of
0:if Plus then Pytin.Reiting:=Pytin.Reiting-bonus-1 else Pytin.Reiting:=Pytin.Reiting-bonus+1;
1:if Plus then Proxor.Reiting:=Proxor.Reiting-bonus+1 else Proxor.Reiting:=Proxor.Reiting+bonus-1;
2:if Plus then Zhirik.Reiting:=Zhirik.Reiting-bonus+1 else Zhirik.Reiting:=Zhirik.Reiting+bonus-1;
3:if Plus then Zugan.Reiting:=Zugan.Reiting-bonus+1 else Zugan.Reiting:=Zugan.Reiting+bonus-1;
end;
case Player of
0:if Plus then Pytin.Reiting:=Pytin.Reiting+bonus else Pytin.Reiting:=Pytin.Reiting-bonus-4;
1:if Plus then Proxor.Reiting:=Proxor.Reiting+bonus else Proxor.Reiting:=Proxor.Reiting-bonus;
2:if Plus then Zhirik.Reiting:=Zhirik.Reiting+bonus else Zhirik.Reiting:=Zhirik.Reiting-bonus;
3:if Plus then Zugan.Reiting:=Zugan.Reiting+bonus else Zugan.Reiting:=Zugan.Reiting-bonus;
end;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
Form1.Close;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
Naselenie.Text:='';
Lider.Text:='';
Loyalnost.Text:='';
MinVzyatka.Text:='';
VzyatkaLabel.Caption:='Важно! Размер взятки должен быть выше '+#10+' величины минимальной взятки! ';
Nas.Caption:='Важно! Количество биллютеней должно быть '+#10+' выше величины населения! ';
zhyl:=false;
hod:=3;
day:=7;
OstatokDays.Caption:='До выборов осталось '+inttostr(day)+' дней ';
Application.Title:='Выборы 2012';
Marquee1.MarqueeDisplayText:='Здесь должна быть ваша реклама';
Centr:=Tokrug.Create;
S_Zap:=Tokrug.Create;
Ug:=Tokrug.Create;
Volga:=Tokrug.Create;
Yral:=Tokrug.Create;
Sybir:=Tokrug.Create;
Vostok:=Tokrug.Create;
WindowOfInfo.Visible:=false;
MenuOfActions.Visible:=false;
ButtonOfActions.Visible:=false;
LabelKarta.Visible:=false;
Map.Visible:=false;
Portret.Visible:=false;
InfoOfOkrug.Visible:=false;
Marquee1.Visible:=false;
ButtonStart.Visible:=false;
Graphics.Visible:=false;
OstatokDays.Visible:=false;
OstatokXodov.Visible:=false;
ButtonDecDays.Visible:=false;
LabelDay.Visible:=false;
OkrugRandom;
Marquee1.Enabled:=false;
end;
procedure TForm2.Graphic;
begin
with Series1 do begin
Clear;
Add(Pytin.FReiting,'Путин',clBlue);
Add(Zugan.FReiting,'Зюганов',clRed);
Add(Zhirik.FReiting,'Жириновский',clYellow);
Add(Proxor.FReiting,'Прохоров',clGreen);
end;
end;
procedure TForm2.ExitBtnClick(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm2.StartBtnClick(Sender: TObject);
begin
Image1.Visible:=false;
Label1.Visible:=false;
Label2.Visible:=false;
Label3.Visible:=false;
Label4.Visible:=false;
StartMenu.Visible:=true;
ButtonStart.Visible:=true;
EndBtn.Enabled:=true;
StartBtn.Enabled:=false;
end;
procedure TForm2.ButtonStartClick(Sender: TObject);
var dir:string;
begin
FormCreate(Sender);
dir:=ExtractFilePath(Application.ExeName);
OstatokDays.Visible:=true;
OstatokXodov.Visible:=true;
ButtonDecDays.Visible:=true;
LabelDay.Visible:=true;
ButtonStart.Visible:=false;
StartMenu.Visible:=false;
Pytin:=TZhylik.Create;
with Pytin do begin
Nominal:=1000000;
Reiting:=33;
end;
Proxor:=TKandidat.Create;
with Proxor do begin
Nominal:=750000;
Reiting:=20;
end;
Zhirik:=TKandidat.Create;
with Zhirik do begin
Nominal:=650000;
Reiting:=20;
end;
Zugan:=TKandidat.Create;
with Zugan do begin
Nominal:=700000;
Reiting:=25;
end;
case StartMenu.ItemIndex of
0: begin Portret.Picture.LoadFromFile(dir+'/Путин.jpg'); zhyl:=true; kandidat2:=Pytin end;
1: begin Portret.Picture.LoadFromFile(dir+'/Прохоров.jpg'); Kandidat1:=Proxor; end;
2: begin Portret.Picture.LoadFromFile(dir+'/Жириновский.jpg'); Kandidat1:=Zhirik; end;
3: begin Portret.Picture.LoadFromFile(dir+'/Зюганов.jpg'); Kandidat1:=Zugan; end;
end;
Player:=StartMenu.ItemIndex;
WindowOfInfo.Visible:=true;
LabelKarta.Visible:=true;
Map.Visible:=true;
Portret.Visible:=true;
Marquee1.Visible:=true;
InfoOfOkrug.Visible:=true;
if zhyl then begin
Kapital.Text:=InttoStr(Kandidat2.Nominal);
Reiting.Text:=IntToStr(Kandidat2.Reiting);
end else begin
Kapital.Text:=InttoStr(Kandidat1.Nominal);
Reiting.Text:=IntToStr(Kandidat1.Reiting);
end;
case player of
0: begin
ReklamaOne.Caption:='Великой стране – сильный лидер! ';
ReklamaTwo.Caption:='Великой стране – достойное будущее! ';
end;
1: begin
ReklamaOne.Caption:='Новый президент – новая Россия! ';
ReklamaTwo.Caption:='Требуйте большего! ';
end;
2: begin
ReklamaOne.Caption:='Жириновский. Или будет хуже. ';
ReklamaTwo.Caption:='Жириновский. И будет лучше. ';
end;
3: begin
ReklamaOne.Caption:='Власть и собственность – народу! ';
ReklamaTwo.Caption:='4 марта выбираем Зюганова! ';
end;
end;
end;
procedure TForm2.OkrugRandom;
var i:integer;
begin
randomize;
with Centr do begin
for i:=0 to 5 do
Centr.FAct[i]:=false;
Lider:=random(4);
FMaskNas:=true;
FMaskMinVs:=true;
Floyalnost:=0;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);
FMinimalMoney:=RandomRange(100000,400000);
end;
with S_Zap do begin
for i:=0 to 5 do
S_Zap.FAct[i]:=false;
Lider:=random(4);
FMaskNas:=true;
FMaskMinVs:=true;
Floyalnost:=0;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);
FMinimalMoney:=RandomRange(100000,400000);
end;
with Ug do begin
for i:=0 to 5 do
Ug.FAct[i]:=false;
Lider:=random(4);
FMaskNas:=true;
FMaskMinVs:=true;
Floyalnost:=0;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);;
FMinimalMoney:=RandomRange(100000,400000);
end;
with Volga do begin
for i:=0 to 5 do
Volga.FAct[i]:=false;
Lider:=random(4);
Floyalnost:=0;
FMaskNas:=true;
FMaskMinVs:=true;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);
FMinimalMoney:=RandomRange(100000,400000);
end;
with Yral do begin
for i:=0 to 5 do
Yral.FAct[i]:=false;
Lider:=random(4);
Floyalnost:=0;
FMaskNas:=true;
FMaskMinVs:=true;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);
FMinimalMoney:=RandomRange(100000,400000);
end;
with Sybir do begin
for i:=0 to 5 do
Sybir.FAct[i]:=false;
Lider:=random(4);
Floyalnost:=0;
FMaskNas:=true;
FMaskMinVs:=true;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);
FMinimalMoney:=RandomRange(100000,400000);
end;
with Vostok do begin
for i:=0 to 5 do
Vostok.FAct[i]:=false;
Lider:=random(4);
Floyalnost:=0;
FMaskNas:=true;
FMaskMinVs:=true;
FReklama:=random(20);
Fnaselenie:=RandomRange(50000,250000);
FMinimalMoney:=RandomRange(100000,400000);
end;
end;
{ Tokrug }
function Tokrug.GetValue: integer;
begin
Result:=FLider;
end;
procedure Tokrug.SetValue(NewValue: integer);
begin
FLider:=NewValue;
end;
{ TKandidat }
function TKandidat.GetValue: integer;
begin
Result:=FNominal;
end;
function TKandidat.GetReiting: byte;
begin
Result:=FReiting;
end;
procedure TKandidat.SetValue(NewValue: integer);
begin
FNominal:=NewValue;
end;
procedure TKandidat.SetReiting(NewValue: byte);
begin
FReiting:=NewValue;
end;
function TKandidat.ProverkaMoney: boolean;
begin
if zhyl then begin
if Kandidat2.Nominal>0 then
Result:=true else Result:=false;
end else begin
if Kandidat1.Nominal>0 then
Result:=true else Result:=false;
end
end;
{ TZhylik }
procedure TZhylik.SETREITING(NewValue:byte);
begin
FReiting:=NewValue+2;
end;
procedure TForm2.DalnvostokDblClick(Sender: TObject);
begin
if (Vostok.FMaskNas) and (Vostok.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (Vostok.FMaskMinVs) and (Vostok.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(Vostok.Fnaselenie);
Lider.Text:=NameOfKandidat(Vostok.Lider);
Loyalnost.Text:=inttostr(Vostok.Floyalnost);
MinVzyatka.Text:=IntToStr(Vostok.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Дальневосточный округ)';
okrug:=7;
end;
procedure TForm2.SibirDblClick(Sender: TObject);
begin
if (Sybir.FMaskNas) and (Sybir.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (Sybir.FMaskMinVs) and (Sybir.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(Sybir.Fnaselenie);
Lider.Text:=NameOfKandidat(Sybir.Lider);
Loyalnost.Text:=inttostr(Sybir.Floyalnost);
MinVzyatka.Text:=IntToStr(Sybir.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Сибирский округ)';
okrug:=6;
end;
procedure TForm2.UralDblClick(Sender: TObject);
begin
if (Yral.FMaskNas) and (Yral.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (Yral.FMaskMinVs) and (Yral.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(Yral.Fnaselenie);
Lider.Text:=NameOfKandidat(Yral.Lider);
Loyalnost.Text:=inttostr(Yral.Floyalnost);
MinVzyatka.Text:=IntToStr(Yral.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Уральский округ)';
okrug:=5;
end;
procedure TForm2.N_WDblClick(Sender: TObject);
begin
if (S_Zap.FMaskNas) and (S_Zap.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (S_Zap.FMaskMinVs) and (S_Zap.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(S_Zap.Fnaselenie);
Lider.Text:=NameOfKandidat(S_Zap.Lider);
Loyalnost.Text:=inttostr(S_Zap.Floyalnost);
MinVzyatka.Text:=IntToStr(S_Zap.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Северо-Западный округ)';
okrug:=3;
end;
procedure TForm2.PrivolgaDblClick(Sender: TObject);
begin
if (Volga.FMaskNas) and (Volga.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (Volga.FMaskMinVs) and (Volga.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(Volga.Fnaselenie);
Lider.Text:=NameOfKandidat(Volga.Lider);
Loyalnost.Text:=inttostr(Volga.Floyalnost);
MinVzyatka.Text:=IntToStr(Volga.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Приволжский округ)';
okrug:=4;
end;
procedure TForm2.CentreDblClick(Sender: TObject);
begin
if (Centr.FMaskNas) and (Centr.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (Centr.FMaskMinVs) and (Centr.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(Centr.Fnaselenie);
Lider.Text:=NameOfKandidat(Centr.Lider);
Loyalnost.Text:=inttostr(Centr.Floyalnost);
MinVzyatka.Text:=IntToStr(Centr.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Центральный округ)';
okrug:=2;
end;
procedure TForm2.SorthDblClick(Sender: TObject);
begin
if (Ug.FMaskNas) and (Ug.Floyalnost<50) then Naselenie.PasswordChar:='?' else
Naselenie.PasswordChar:=#0;
if (Ug.FMaskMinVs) and (Ug.Floyalnost<50) then MinVzyatka.PasswordChar:='?' else
MinVzyatka.PasswordChar:=#0;
Naselenie.Text:=Inttostr(Ug.Fnaselenie);
Lider.Text:=NameOfKandidat(Ug.Lider);
Loyalnost.Text:=inttostr(ug.Floyalnost);
MinVzyatka.Text:=IntToStr(Ug.FMinimalMoney);
ButtonOfActions.Visible:=true;
MenuOfActions.Visible:=true;
MenuOfActions.Caption:='Выберите действие (Южный округ)';
okrug:=1;
end;
function TForm2.NameOfKandidat(index: integer): string;
begin
case index of
0: Result:='Путин';
1: Result:='Прохоров';
2: Result:='Жириновский';
3: Result:='Зюганов';
end;
end;
procedure TForm2.ButtonDecDaysClick(Sender: TObject);
var btn:byte;
i:integer;
begin
if day=0 then begin EndBtnClick(Sender); exit; end;
btn:=MessageDlg('Вы уверены, что хотите завершить день?',mtInformation,mbOKCancel,1);
if btn=mrCancel then exit;
Dec(day);
hod:=3;
for i:=1 to 7 do begin
NameOfOkrug(i).FReklama:=random(1);
NameOfOkrug(i).FAct[0]:=false;
end;
if zhyl then begin kandidat2.Nominal:=kandidat2.Nominal+kandidat2.Reiting*10000; Kapital.Text:=inttostr(kandidat2.Nominal) end else
begin kandidat1.Nominal:=kandidat1.Nominal+kandidat1.Reiting*10000; Kapital.Text:=inttostr(kandidat1.Nominal) end;
MenuOfActions.Visible:=false;
ButtonOfActions.Visible:=false;
OstatokXodov.Caption:='Осталось '+inttostr(hod)+' хода ';
if day>4 then
OstatokDays.Caption:='До выборов осталось '+inttostr(day)+' дней ' else
if day>1 then
OstatokDays.Caption:='До выборов осталось '+inttostr(day)+' дня 'else
OstatokDays.Caption:='До выборов осталось '+inttostr(day)+' день ';
if day=0 then begin
OstatokDays.Caption:='Выборы сегодня! ';
Graphic;
Graphics.Visible:=true;
if zhyl then
if (kandidat2.Reiting>Proxor.Reiting) and (kandidat2.Reiting>Zhirik.Reiting) and (kandidat2.Reiting>Zugan.Reiting) then
ShowMessage('Поздравляем! Вы победили!!!') else
ShowMessage('Увы! Вы проиграли!') else
if Kandidat1.Reiting>Pytin.Reiting then
ShowMessage('Поздравляем! Вы победили!!!') else
ShowMessage('Увы! Вы проиграли!');
EndBtnClick(Sender);
end;
end;
procedure TForm2.ButtonOfActionsClick(Sender: TObject);
begin
if NameOfOkrug(okrug).Floyalnost=100 then begin
ShowMessage('Данный округ полностью поддерживает вас!');
exit;
end;
Actions(NameOfOkrug(okrug));
UpDates(NameOfOkrug(okrug));
end;
procedure TForm2.EndBtnClick(Sender: TObject);
var btn:integer;
begin
btn:=MessageDlg('Вы уверены, что хотите завершить игру?'+#10+'(Все данные будут потеряны)',mtInformation,[mbYes,mbNo],1);
if btn=mrNo then exit;
if btn=mrYes then begin
EndBtn.Enabled:=false;
StartBtn.Enabled:=true;
FormCreate(Sender);
Label1.Visible:=true;
Label2.Visible:=true;
Label3.Visible:=true;
Label4.Visible:=true;
Image1.Visible:=true;
StartMenu.Visible:=false;
end;
end;
function TForm2.ProverkaMoney(summa: integer; okr: Tokrug): boolean;
begin
if Player=okr.Lider then summa:=summa div 2;
if zhyl then begin
Kandidat2.Nominal:=Kandidat2.Nominal-summa;
if Kandidat2.Nominal<0 then begin
ShowMessage('Недостаточно средств для проведения данного действия!');
Result:=false;
Kandidat2.Nominal:=Kandidat2.Nominal+summa;
end else
Result:=true;
end else begin
Kandidat1.Nominal:=Kandidat1.Nominal-summa;
if Kandidat1.Nominal<0 then begin
ShowMessage('Недостаточно средств для проведения данного действия!');
Result:=false;
Kandidat1.Nominal:=Kandidat1.Nominal+summa;
end else
Result:=true;
end;
end;
procedure TForm2.Actions(okr: tOkrug);
begin
if hod=0 then begin
ShowMessage('Ходы кончились!'+#10+'Необходимо завершить день!');
exit;
end;
case MenuOfActions.ItemIndex of
0: begin
if okr.FAct[0] then begin ShowMessage('Данное действие уже было выполнено!'); exit end;
if not ProverkaMoney(50000,Okr) then exit;
MenuOfActions.Visible:=false;
ButtonOfActions.Visible:=false;
ReklamaGroupBox.Visible:=true;
ReklamaOne.Checked:=true;
okr.FAct[0]:=true;
xod;
end;
1: begin
if okr.FAct[1] then begin ShowMessage('Данное действие уже было выполнено!'); exit end;
if not ProverkaMoney(500000,okr) then exit;
ShowMessage('Население благодарно вам за помощь!');
GetBonus(true);
okr.Floyalnost:=okr.Floyalnost+25;
if NameOfOkrug(okrug).Floyalnost=100 then GetBonus(true);
okr.FAct[1]:=true;
xod;
end;
2: begin
if okr.FAct[2] then begin ShowMessage('Данное действие уже было выполнено!'); exit end;
xod;
MenuOfActions.Visible:=false;
VzytkaGroupBox.Visible:=true;
okr.FAct[2]:=true;
end;
3: begin
if okr.FAct[3] then begin ShowMessage('Данное действие уже было выполнено!'); exit end;
xod;
MenuOfActions.Visible:=false;
NasGroupBox.Visible:=true;
okr.FAct[3]:=true;
end;
4: begin
if okr.FAct[4] then begin ShowMessage('Данное действие уже было выполнено!'); exit end;
if not ProverkaMoney(250000,okr) then exit;
okr.FMaskNas:=false;
okr.FMaskMinVs:=false;
Naselenie.PasswordChar:=#0;
MinVzyatka.PasswordChar:=#0;
okr.FAct[4]:=true;
xod;
ShowMessage('Ваша компания успешно провела разведку');
end;
end;
end;
procedure TForm2.xod;
begin
Dec(hod);
if hod>1 then
OstatokXodov.Caption:='Осталось '+inttostr(hod)+' хода ' else
OstatokXodov.Caption:='Остался '+inttostr(hod)+' ход ';
end;
procedure TForm2.ButtonReklamaClick(Sender: TObject);
begin
if (ReklamaOne.Checked) and(NameOfOkrug(okrug).FReklama<10) then begin
Marquee1.MarqueeDisplayText:=ReklamaOne.Caption;
ShowMessage('Народ доволен вашей рекламой!');
NameOfOkrug(okrug).Floyalnost:=NameOfOkrug(okrug).Floyalnost+25;
GetBonus(true);
end else
if (ReklamaTwo.Checked) and(NameOfOkrug(okrug).FReklama>=10) then begin
Marquee1.MarqueeDisplayText:=ReklamaTwo.Caption;
ShowMessage('Народ доволен вашей рекламой!');
NameOfOkrug(okrug).Floyalnost:=NameOfOkrug(okrug).Floyalnost+25;
GetBonus(true);
end else begin
if ReklamaTwo.Checked then
Marquee1.MarqueeDisplayText:=ReklamaTwo.Caption else
Marquee1.MarqueeDisplayText:=ReklamaOne.Caption;
ShowMessage('Народ разочарован вашей рекламой!');
GetBonus(false);
end;
UpDates(NameOfOkrug(okrug));
ReklamaGroupBox.Visible:=false;
MenuOfActions.Visible:=true;
ButtonOfActions.Visible:=true;
if NameOfOkrug(okrug).Floyalnost=100 then GetBonus(true);
end;
procedure TForm2.UpDates(okr: tokrug);
begin
if zhyl then begin
Kapital.Text:=IntToStr(Kandidat2.Nominal);
Reiting.Text:=intTostr(Kandidat2.Reiting);
end else begin
Kapital.Text:=IntToStr(Kandidat1.Nominal);
Reiting.Text:=intTostr(Kandidat1.Reiting);
end;
Loyalnost.Text:=inttostr(okr.Floyalnost);
if okr.Floyalnost>=50 then begin
Naselenie.PasswordChar:=#0;
MinVzyatka.PasswordChar:=#0;
end;
if okr.Floyalnost=100 then begin
okr.Lider:=Player;
Lider.Text:=NameOfKandidat(Player);
end;
end;
procedure TForm2.VzyatkaKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9',#8]) then key:=#0;
end;
procedure TForm2.ButtonVzyatkaClick(Sender: TObject);
begin
try
if not ProverkaMoney(strtoint(Vzyatka.text),NameOfOkrug(okrug)) then exit;
If strtoint(Vzyatka.Text)>=nameofokrug(okrug).FMinimalMoney then begin
GetBonus(true);
NameOfOkrug(okrug).Floyalnost:=NameOfOkrug(okrug).Floyalnost+25;
ShowMessage('Взятка прошла успешно!');
end else begin
GetBonus(false);
ShowMessage('Взятка не удалась!');
end;
VzytkaGroupBox.Visible:=false;
MenuOfActions.Visible:=true;
if NameOfOkrug(okrug).Floyalnost=100 then GetBonus(true);
UpDates(NameOfOkrug(okrug));
except
ShowMessage('Введите данные');
end;
end;
function TForm2.NameOfOkrug(index: integer): Tokrug;
begin
case index of
1:Result:=Ug;
2:Result:=Centr;
3:Result:=S_Zap;
4:Result:=Volga;
5:Result:=Yral;
6:Result:=Sybir;
7:Result:=Vostok;
end;
end;
procedure TForm2.ButtonNasClick(Sender: TObject);
begin
try
if not ProverkaMoney(strtoint(NasVzytka.text),NameOfOkrug(okrug)) then exit;
If strtoint(NasVzytka.Text)>=nameofokrug(okrug).Fnaselenie then begin
GetBonus(true);
NameOfOkrug(okrug).Floyalnost:=NameOfOkrug(okrug).Floyalnost+25;
ShowMessage('Биллютени подделаны успешно!');
end else begin
GetBonus(false);;
ShowMessage('Подделка биллютеней не удалась!');
end;
NasGroupBox.Visible:=false;
MenuOfActions.Visible:=true;
if NameOfOkrug(okrug).Floyalnost=100 then GetBonus(true);
UpDates(NameOfOkrug(okrug));
except
ShowMessage('Введите данные!');
end;
end;
procedure TForm2.N5Click(Sender: TObject);
var i:integer;
begin
i:=Form3.ShowModal;
end;
procedure TForm2.N6Click(Sender: TObject);
var i:integer;
begin
i:=form4.ShowModal;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
end.
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm4 = class(TForm)
Memo1: TMemo;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
end.