Предмет:
Тип роботи:
Індивідуальне завдання
К-сть сторінок:
35
Мова:
Українська
16;POLET = 10;POLEL = 10;
prefix = 'Fishka';
var
Form1: TForm1;
btn: array[N..M] of Tfish;
sorseAr: array[N..M] of boolean;
zeroX, zeroY: integer;
XYmatrix: array[1..M, 1..2] of integer;
hour, min, sec, go, level, id: integer;
time:string;
implementation
uses Unit2, Unit4, Unit3, Unit5, Unit6, Unit7, Unit8, Unit9, Unit10,
Unit11, Unit12;{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var i, ty, lx: integer;
begin
hour:=0;min:=0;sec:=0;go:=0;time:='';id:=0;randomize; i := 0;
// заполняем массив коорденатами на которые будут случайным образом ставиться
ty := POLET; lx := POLEL;
for i := N to M do begin
XYmatrix[i, 1] := lx;
XYmatrix[i, 2] := ty;
lx := lx + L;
if i mod NXM = 0 then begin
ty := ty + L;
lx := POLEL;
end; end;end;
procedure TForm1.FormShow(Sender: TObject);
begin CreatFishkas();end;
{ сбрасывает все элементы массива в true,
массив отвечает за неповторяющиеся порядковые номера фишек
которые выбираются случайным образом
нужно при иницилизации новой игры}
function dump(): boolean;
var i: integer;
begin
i := 0;for i := N to M do sorseAr[i] := true; ;
end;
// непосредственно алгоритм выборки неповторяющихся значений случайным образом
function choose(): integer;
var i: integer;
begin
i := 0;result := random(M) + 1;while sorseAr[result] = false do result := random(M) + 1; sorseAr[result] := false;
end;
procedure TForm1.CreatFishkas;
// НОВАЯ ИГРА, создание игрового поля
var i, ty, lx, ch: integer;
begin
randomize;dump();ty := POLET; lx := POLEL;for i := N to M do begin
btn[i] := Tfish.Create(Self);btn[i].Width := W;btn[i].Height := W;btn[i].Font.Size := 26;btn[i].Font.Style := [fsBold];ch := choose(); // получаем случайным образом число 1-16, числа не повторяються btn[i].Left := XYmatrix[ch, 1]; // получаем коорденату Х btn[i].Top := XYmatrix[ch, 2]; // получаем коорденату У
btn[i].Tag := ch; // в Tag будем держать текущее положение фишки
btn[i].Name := prefix + inttostr(i);
if i <> M then begin
btn[i].Caption := inttostr(i);
btn[i].OnClick := ButClicked;
end else begin
btn[i].Caption := '';
zeroX := btn[i].Left; zeroY := btn[i].Top;
end;
btn[i].Parent := Self;
end;
end;
function TForm1.position(const x, y: integer): integer;
var i: integer;
begin
i := 0;
result := -32;
for i := N to M do begin
if ((XYmatrix[i, 1] = x) and (XYmatrix[i, 2] = y)) then
begin
result := i; break;
end;
end;
end;
procedure TForm1.ButClicked(Sender: TObject);
var X, Y, ps: integer;
begin
X := Tfish(Sender).left; Y := Tfish(Sender).Top;
if ((X = zeroX + L) and (Y = zeroY)) or
((X = zeroX - L) and (Y = zeroY)) or
((X = zeroX) and (Y = zeroY + L)) or
((X = zeroX) and (Y = zeroY - L)) then
begin
Tfish(Sender).Left := zeroX;
Tfish(Sender).Top := zeroY;
Tfish(FindComponent(prefix + inttostr(M))).left := X;
Tfish(FindComponent(prefix + inttostr(M))).top := Y;
ps := position(zeroX, zeroY);
if ps <> -32 then
Tfish(Sender).Tag := ps else
ShowMessage('Ошибка в логике проги. КООРДЕНАТЫ');
zeroX := X; zeroY := Y;
//Счетчик ходов Begin
go:=go+1;
Edit4.Text:=inttostr(go);
if go=level Then
Begin
{KillOldFihkas();CreatFishkas();}Timer1.Enabled:=False;Form9.ShowModal;End;victopia();end;end;
procedure TForm1.victopia;
var i: integer; b: boolean;
begin
b := true; i := 0;for i := N to M - 1 do
begin
if strtoint(Tfish(FindComponent(prefix +inttostr(i))).Caption)
Tfish(FindComponent(prefix + inttostr(i))).Tag then
begin b := false; break;end;end;
if b then //победа
Begin
time:=IntToStr(hour)+':'+IntToStr(min)+':'+IntToStr(sec);Timer1.Enabled:=False;Form10.Label1.Caption:=Name_Igrok+Form10.Label1.Caption;Form10.Label2.Caption:='За'+time+'времени';Form10.Label9.Caption:='И за '+inttostr(go)+' ходов';Form10.Show;
Begin Form11.ADOQuery1.Recordset.MoveLast;id:=Form11.ADOQuery1.Recordset.Fields[0].Value;Form11.ADOQuery1.InsertRecord([IntToStr(id+1),Name_Igrok,IntToStr(go),time, Label3.Caption]);End;End;end;
procedure TForm1.KillOldFihkas;
var i: integer;
begin for i := N to M do FreeAndNil(btn[i]);end;
procedure TForm1.F21Click(Sender: TObject);
begin KillOldFihkas();CreatFishkas();Timer1.Enabled:=False;hour:=0;min:=0;sec:=0;go:=0;BitBtn1.Visible:=True;BitBtn3.Visible:=False;Edit1.Text:='00';Edit2.Text:='00';Edit3.Text:='00';Edit4.Text:='0000';Label13.Visible:=True;Label3.Caption:='Возраст';Label12.Caption:='Не указан';Label14.Caption:='';Image1.Visible:=True;Image2.Visible:=False;Image3.Visible:=False;Form2.Edit1.Text:='';Form2.RadioButton1.Checked:=False;Form2.RadioButton2.Checked:=False;Form2.ComboBox1.Text:='Укажите ваш возраст';Form2.ComboBox2.Text:='не указано';Form2.BitBtn1.Enabled:=False;Form2.ComboBox2.Enabled:=False;Form2.ShowModal;end;
procedure TForm1.F101Click(Sender: TObject);
begin Form11.Show;end;
procedure TForm1.N3Click(Sender: TObject);
begin KillOldFihkas();CreatFishkas();Timer1.Enabled:=False;hour:=0;min:=0;sec:=0;go:=0;BitBtn1.Visible:=False;Edit1.Text:='00';Edit2.Text:='00';Edit3.Text:='00';Edit4.Text:='00000';Form12.ShowModal;end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin Timer1.Enabled:=False; Form4.ShowModal;end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin sec:=sec+1; if sec>=60 thenbegin sec:=0; min:=min+1 end; if min>=60 then begin min:=0;hour:=hour+1 end;Edit1.Text:=IntToStr(hour);Edit2.Text:=IntToStr(min);Edit3.Text:=IntToStr(sec);end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin Form2.Close; Form3.Close; Form4.Close;end;
procedure TForm1.N5Click(Sender: TObject);
begin Form5.Show;end;
procedure TForm1.N6Click(Sender: TObject);
begin Form6.Show;end;
procedure TForm1.N4Click(Sender: TObject);
begin Form7.Show;end;
procedure TForm1.N7Click(Sender: TObject);
begin Timer1.Enabled:=False; Form8.ShowModal;end;
procedureTForm1.BitBtn3Click(Sender:TObject);begin KillOldFihkas();CreatFishkas();hour:=0;min:=0;sec:=0;go:=0;Timer1.Enabled:=True;BitBtn1.Visible:=True;BitBtn3.Visible:=False;end;procedureTForm1.Button1Click(Sender:TObject);begintime:=IntToStr(hour)+':'+IntToStr(min)+':'+IntToStr(sec);Timer1.Enabled:=False;Form10.Label1.Caption:=Name_Igrok+Form10.Label1.Caption;Form10.Label2.Caption:='За'+time+'времени';Form10.Label9.Caption:='Иза'+inttostr(go)+'ходов';Form10.Show;Begin Form11.ADOQuery1.Recordset.MoveLast;id:=Form11.ADOQuery1.Recordset.Fields[0].Value;Form11.ADOQuery1.InsertRecord([IntToStr(id+1),Name_Igrok,IntToStr(go),time,Label3.Caption]);End;end;procedure TForm1.N8Click(Sender: TObject);beginApplication.Terminate();end;end.
Додаток Б
Лістинг модуля Unit2
unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons, XPMAN;
type
TForm2 = class(TForm)Label1: TLabel;Label2: TLabel;Label3: TLabel;Label4: TLabel;BitBtn1: TBitBtn;Image1: TImage;Edit1: TEdit;RadioButton1: TRadioButton;RadioButton2: TRadioButton;Label5: TLabel;Label6: TLabel;Label7: TLabel;ComboBox1: TComboBox;Label8: TLabel;ComboBox2: TComboBox;procedure BitBtn1Click(Sender: TObject);procedure ComboBox1Change(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form2: TForm2;Name_Igrok:String; implementation
uses Unit1, Unit3, Unit4, Unit10, Unit11, Unit12, Unit5, Unit6, Unit7, Unit8, Unit9;{$R *.dfm}
procedure TForm2.BitBtn1Click(Sender: TObject);
begin Begin if Edit1.Text='' Then Edit1.Text:='Аноним';Name_Igrok:=Edit1.Text;Form1.Label2.Caption:=Name_Igrok; End;if RadioButton1.Checked=True then Begin Form1.Image2.Visible:=True;Form1.Image1.Visible:=False;Form1.Image3.Visible:=False;End;if RadioButton2.Checked=True then Begin Form1.Image3.Visible:=True; Form1.Image1.Visible:=False;Form1.Image2.Visible:=False;End;Form3.Timer1.Enabled:=True;Form3.ShowModal;end;procedure TForm2.ComboBox1Change(Sender: TObject);
var Spisok:byte;
begin
ComboBox2.Enabled:=True; Spisok:=ComboBox1.ItemIndex;
case Spisok of
0:begin Form1.Label3.Caption:='1Год';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
...
16:begin Form1.Label3.Caption:='17лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
17:begin Form1.Label3.Caption:='18лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False; end;
18:begin Form1.Label3.Caption:='19лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
19:begin Form1.Label3.Caption:='20лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;
...
99:begin Form1.Label3.Caption:='99лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end else
Begin Form1.Label3.Caption:='100лет';Form1.Label3.Font.Color:=clpurple;Form1.Label13.Visible:=False;end;end;end;
procedure TForm2.ComboBox2Change(Sender: TObject);
Var Levelof:byte;
begin
BitBtn1.Enabled:=True;
Levelof:=ComboBox2.ItemIndex;
case Levelof of
0:begin Form1.Label12.Caption:='Легкий'; Form1.Label14.Caption:='1000 ходов'; Form1.Label12.Font.Color:=clGreen;level:=1000;end;
1:begin Form1.Label12.Caption:='Нормальный';Form1.Label14.Caption:='500 ходов';Form1.Label12.Font.Color:=clBlue;level:=500; end;2:begin Form1.Label12.Caption:='Тяжелый';Form1.Label14.Caption:='150 ходов';Form1.Label12.Font.Color:=clOlive;level:=150;end elsebeginForm1.Label12.Caption:='Нереальний';Form1.Label14.Caption:='1ход';Form1.Label12.Font.Color:=clOlive;level:=1;end;end;end;end.
Додаток В
Лістинг модуля Unit3
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, XPMAN, ComCtrls, ExtCtrls, jpeg;
type
TForm3 = class(TForm)
Image1: TImage;
Timer1: TTimer;
ProgressBar1: TProgressBar;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations } public { Public declarations } end;
var
Form3: TForm3;i:integer;
implementation
uses Unit1, Unit2, Unit4, Unit10, Unit11, Unit12, Unit5, Unit6, Unit7,
Unit8, Unit9;
{$R *.dfm}
procedure TForm3.Timer1Timer(Sender: TObject);
begin
i:=i+1; ProgressBar1.Position:=i;
if i=100 then begin Timer1.Enabled:=False; i:=0;
Form1.Show; Form2.Visible:=False; Form3.Close;
Form1.Timer1.Enabled:=True;
end;end;end.