Torpedó
Írjunk Delphiben torpedó játékot. A torpedó egy kétszemélyes játék. Az egyik játékos legyen a Gép. A játék egyik közismert szabálya szerint egy négyzet alakú játéktéren különböző méretű és alakú „hajókat” rejtünk el, melyet az ellenfélnek el kell süllyeszteni. A lövés koordináták megadásával történik. Egy lehetséges flotta:
– 1-es hajó: 5 darab;
– 2-es hajó: 5 darab;
– 3-as hajó (vonalas elrendezésben): 3 darab;
– 3-as hajó (L alakban): 3 darab;
– 4-es hajó (T alakban): 2 darab;
– 4-es hajó (vonalas elrendezésben): 2 darab.
A hajók elhelyezésének csak egyetlen fontos szabálya van: a hajók sem lapjaik mentén, sem csúcsokban nem érintkezhetnek. Az elhelyezést a gép véletlen-szám generátorára bízzuk. Ha a játéktér nem túlzottan nagy a hajók által elfoglalt területhez képest (itt ez a helyzet), akkor egy egyszerű véletlen választás biztosan hibás elrendezést eredményez. Ezért a helyes hadrend kialakítását az ütközésmentesítő algoritmusra bízzuk. A hajókat egy-egy sztringrácsban jelenítjük meg (a gépét természetesen nem), és az egyszerűség kedvéért a hajó mezőit a típusszámuk kiírásával jelöljük. A hajók nemcsak a képernyőn fekete négyzetekkel megjelenítet helyzetben, hanem tetszőlegesen elforgatva is elhelyezkedhetnek a játéktéren.
A játékot a Játékos kezdi és a Géppel felváltva lőnek a másik játékterére. Az győz, aki hamarabb süllyeszti el az ellenfél hajóit. A játék végén a gép kiírja, hogy ki a győztes. A játék elején a Játékos új flottaelrendezést kérhet, ha a megjelenített számára nem szimpatikus. (Kézi elrendezésre nincs lehetőség, és a flotta összetétele sem változtatható). A Játékos számára rendelkezésre áll egy Help funkció, mely a Gép játéktérének azon mezőit, melyre még lőhet a Játékos, sárga háttérrel jeleníti meg. A helyes játékmenet ellenőrzése végett a Játékos mezői automatikusan színessé válnak ott, ahova a Gép már lőtt és ahova már nem kell a Gépnek lőnie.
Annak érdekében, hogy a játék ne legyen unalmas, programozzunk be a Gép számára némi stratégiát (de természetesen nem azt, hogy direktben keresse meg a Játékos hajóit.) A játék közben bármikor új játékot indíthatunk, vagy kiléphetünk a programból.
A program a játék kezdete előtt:
A játék közben:
A játék végén:
A program listája:
UNIT UTorpedo;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
Const HMax=20;
TM=16;
type
THely=Record
X,Y: Integer;
End;
THajo=Record
Tip: Word;
Mezo: Array[1..4] Of THely;
End;
TFlotta=Record
Hajok: Array[1..HMax] Of THajo;
FUtSz: Word;
End;
TfmTorpedo = class(TForm)
lbTorpedo: TLabel;
lbGepJatekos: TLabel;
btKilepes: TButton;
sgGepTer: TStringGrid;
sgJatTer: TStringGrid;
sgFlotta: TStringGrid;
btUjFlotta: TButton;
lbFlotta: TLabel;
ldGHajok: TListBox;
ldJHajok: TListBox;
btHelp: TButton;
btUjJatek: TButton;
Procedure HajoKesz(Var F: TFlotta; N: Word);
Function Utkoz(Var F: TFlotta): Word;
Procedure Forgat(Var F: TFlotta; N: Word);
Procedure Rendez(Var F: TFlotta);
Procedure Kepre(F: TFlotta; SG: TStringGrid);
Procedure FlottaList(LD: TListBox);
Procedure GepLoves;
procedure btKilepesClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btUjFlottaClick(Sender: TObject);
procedure sgGepTerDblClick(Sender: TObject);
procedure sgFlottaDrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
procedure btHelpClick(Sender: TObject);
procedure sgGepTerDrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
procedure btUjJatekClick(Sender: TObject);
procedure sgJatTerDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fmTorpedo: TfmTorpedo;
Gep, Jat, Puf: TFlotta;
GJTer, JJTer, HT, GL: Array[1..TM,1..TM] Of Word;
Xk, Yk: Integer;
HBe, PCol, PRow: Word;
Vege, Kozel: Boolean;
implementation
{$R *.dfm}
procedure TfmTorpedo.btKilepesClick(Sender: TObject);
begin
Close;
end;
procedure TfmTorpedo.sgFlottaDrawCell(Sender: TObject; Col,
Row: Integer; Rect: TRect; State: TGridDrawState);
begin
With sgFlotta.Canvas Do
Begin
With Brush Do
If (Col>1) And (Col<7) And (sgFlotta.Cells[Col,Row]<>'') Then
Color:= clBlack Else Color:= clWindow;
TextRect(Rect,Rect.Left+1,Rect.Top+1, sgFlotta.Cells[Col,Row]);
End;
end;
procedure TfmTorpedo.sgGepTerDrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
begin
With sgGepTer.Canvas Do
Begin
With Brush Do
If HT[Col,Row]=1 Then Color:= clYellow Else Color:= clWindow;
TextRect(Rect,Rect.Left+1,Rect.Top+1, sgGepTer.Cells[Col,Row]);
End;
end;
procedure TfmTorpedo.sgJatTerDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
With sgJatTer.Canvas Do
Begin
With Brush Do
If GL[ACol,ARow]=7 Then Color:= clAqua Else Color:= clWindow;
TextRect(Rect,Rect.Left+1,Rect.Top+1, sgJatTer.Cells[ACol,ARow]);
End;
end;
Procedure TfmTorpedo.HajoKesz(Var F: TFlotta; N: Word);
Var I: Word;
Begin
With F.Hajok[N] Do
Begin
Case N Of
1..5: Tip:= 1;
6..10: Tip:= 2;
11..13: Tip:= 3;
14..16: Tip:= 4;
17..18: Tip:= 5;
19..20: Tip:= 6;
End;
For I:= 1 To 4 Do Begin Mezo[I].X:= 0; Mezo[I].Y:= 0 End;
Mezo[1].X:= Random(TM)+1; Mezo[1].Y:= Random(TM)+1;
Case Tip Of
2: Begin
If Mezo[1].X=TM Then Mezo[1].X:= TM-1;
Mezo[2].X:=Mezo[1].X+1; Mezo[2].Y:= Mezo[1].Y;
End;
3: Begin
If Mezo[1].X>TM-2 Then Mezo[1].X:= TM-2;
Mezo[2].X:=Mezo[1].X+1; Mezo[2].Y:= Mezo[1].Y;
Mezo[3].X:=Mezo[1].X+2; Mezo[3].Y:= Mezo[1].Y;
End;
4: Begin
If Mezo[1].X>TM-2 Then Mezo[1].X:= TM-2;
If Mezo[1].Y>TM-2 Then Mezo[1].Y:= TM-2;
Case Random(4) Of
0: Begin
Mezo[2].X:= Mezo[1].X; Mezo[2].Y:= Mezo[1].Y+1;
Mezo[3].X:= Mezo[2].X+1; Mezo[3].Y:= Mezo[1].Y+1;
End;
1: Begin;
Mezo[2].X:= Mezo[1].X+1; Mezo[2].Y:= Mezo[1].Y;
Mezo[3].X:= Mezo[1].X; Mezo[3].Y:= Mezo[1].Y+1;
End;
2: Begin;
Mezo[2].X:= Mezo[1].X+1; Mezo[2].Y:= Mezo[1].Y;
Mezo[3].X:= Mezo[1].X+1; Mezo[3].Y:= Mezo[1].Y+1;
End;
3: Begin;
Mezo[1].X:= Mezo[1].X+1;
Mezo[2].X:= Mezo[1].X; Mezo[2].Y:= Mezo[1].Y+1;
Mezo[3].X:= Mezo[1].X-1; Mezo[3].Y:= Mezo[1].Y+1;
End;
End;
End;
5: Begin
If Mezo[1].X>TM-2 Then Mezo[1].X:= TM-2;
If Mezo[1].Y>TM-2 Then Mezo[1].Y:= TM-2;
Case Random(4) Of
0: Begin
Mezo[2].X:= Mezo[1].X; Mezo[2].Y:= Mezo[1].Y+1;
Mezo[3].X:= Mezo[1].X+1; Mezo[3].Y:= Mezo[1].Y+1;
Mezo[4].X:= Mezo[1].X; Mezo[4].Y:= Mezo[1].Y+2;
End;
1: Begin
Mezo[2].X:= Mezo[1].X+1; Mezo[2].Y:= Mezo[1].Y;
Mezo[3].X:= Mezo[1].X+2; Mezo[3].Y:= Mezo[1].Y;
Mezo[4].X:= Mezo[1].X+1; Mezo[4].Y:= Mezo[1].Y+1;
End;
2: Begin
Mezo[1].X:= Mezo[1].X+1;
Mezo[2].X:= Mezo[1].X-1; Mezo[2].Y:= Mezo[1].Y+1;
Mezo[3].X:= Mezo[1].X; Mezo[3].Y:= Mezo[1].Y+1;
Mezo[4].X:= Mezo[1].X+1; Mezo[4].Y:= Mezo[1].Y+1;
End;
3: Begin
Mezo[1].X:= Mezo[1].X+1;
Mezo[2].X:= Mezo[1].X-1; Mezo[2].Y:= Mezo[1].Y+1;
Mezo[3].X:= Mezo[1].X; Mezo[3].Y:= Mezo[1].Y+1;
Mezo[4].X:= Mezo[1].X; Mezo[4].Y:= Mezo[1].Y+2;
End;
End;
End;
6: Begin
If Mezo[1].X>TM-3 Then Mezo[1].X:= TM-3;
Mezo[2].X:=Mezo[1].X+1; Mezo[2].Y:= Mezo[1].Y;
Mezo[3].X:=Mezo[1].X+2; Mezo[3].Y:= Mezo[1].Y;
Mezo[4].X:=Mezo[1].X+3; Mezo[4].Y:= Mezo[1].Y;
End;
End;
If Tip=1 Then Exit;
If Random(2)=0 Then Forgat(F,N);
End;
End;
Function TfmTorpedo.Utkoz(Var F: TFlotta): Word;
Var I, J, K, N, Ut: Word;
Begin
F.FUtSz:= 0;
For N:= 1 To HMax Do With F.Hajok[N] Do
Begin
Ut:= 0;
For I:= 1 To 4 Do If (Mezo[I].X>0) Then
For J:= 1 To HMax Do If J<>N Then
For K:= 1 To 4 Do
Begin
If (Mezo[I].X=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X+1=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y+1=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X+1=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y+1=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X-1>0) And (Mezo[I].X-1=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y-1>0) And (Mezo[I].Y-1=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X-1>0) And (Mezo[I].X-1=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y-1>0) And (Mezo[I].Y-1=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X+1=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y-1>0) And (Mezo[I].Y-1=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
If (Mezo[I].X-1>0) And (Mezo[I].X-1=F.Hajok[J].Mezo[K].X) And
(Mezo[I].Y+1=F.Hajok[J].Mezo[K].Y) Then Inc(Ut);
End;
Inc(F.FUtSz,Ut);
End;
Utkoz:= F.FUtSz;
End;
Procedure TfmTorpedo.Forgat(Var F: TFlotta; N: Word);
Var I, P: Word;
Begin
With F.Hajok[N] Do For I:= 1 To 4 Do
Begin P:= Mezo[I].X; Mezo[I].X:= Mezo[I].Y; Mezo[I].Y:= P End;
End;
Procedure TfmTorpedo.Rendez(Var F: TFlotta);
Var USz, PUSz: Word;
Begin
USz:= Utkoz(F);
While USz>0 Do
Begin
Puf:= F; HajoKesz(F,Random(HMax)+1); PUSz:= Utkoz(F);
If PUSz>USz Then F:= Puf Else Begin USz:= PUSz End;
End;
End;
Procedure TfmTorpedo.Kepre(F: TFlotta; SG: TStringGrid);
Var I, J: Word;
Begin
With SG Do
Begin
For I:= 1 To ColCount-1 Do For J:= 1 To RowCount-1 Do Cells[I,J]:= '';
For I:= 1 To HMax Do With F.Hajok[I] Do For J:= 1 To 4 Do
Cells[Mezo[J].X,Mezo[J].Y]:= IntToStr(Tip);
End;
End;
Procedure TfmTorpedo.FlottaList(LD: TListBox);
Var I: Word;
Begin
With LD Do
Begin
Clear;
For I:= 1 To 5 Do Items.Add('1');
For I:= 1 To 5 Do Items.Add('2');
For I:= 1 To 3 Do Items.Add('3');
For I:= 1 To 3 Do Items.Add('4');
For I:= 1 To 2 Do Items.Add('5');
For I:= 1 To 2 Do Items.Add('6');
End;
End;
procedure TfmTorpedo.FormCreate(Sender: TObject);
Var I, J: Word;
begin
Randomize;
With sgGepTer Do
Begin
ColWidths[0]:= 0;
RowHeights[0]:= 0;
ColWidths[ColCount-1]:= 0;
RowHeights[RowCount-1]:= 0;
Col:= ColCount-1;
Row:= RowCount-1;
For I:= 1 To ColCount-1 Do For J:= 1 To RowCount-1 Do Cells[I,J]:= '';
End;
With sgJatTer Do
Begin
ColWidths[0]:= 0;
RowHeights[0]:= 0;
ColWidths[ColCount-1]:= 0;
RowHeights[RowCount-1]:= 0;
Col:= ColCount-1;
Row:= RowCount-1;
End;
With sgFlotta Do
Begin
ColWidths[0]:= 0;
ColWidths[7]:= 24;
RowHeights[0]:= 0;
ColWidths[ColCount-1]:= 0;
RowHeights[RowCount-1]:= 0;
Col:= ColCount-1;
Row:= RowCount-1;
Cells[1,2]:= '1:';
Cells[1,4]:= '2:';
Cells[1,6]:= '3:';
Cells[1,8]:= '4:';
Cells[1,11]:= '5:';
Cells[1,14]:= '6:';
Cells[2,2]:= '.';
Cells[2,4]:= '.';
Cells[3,4]:= '.';
For I:= 2 To 4 Do Cells[I,6]:= '.';
Cells[2,8]:= '.';
Cells[2,9]:= '.';
Cells[3,9]:= '.';
Cells[3,11]:= '.';
For I:= 2 To 4 Do Cells[I,12]:= '.';
For I:= 2 To 5 Do Cells[I,14]:= '.';
Cells[7,2]:= '5db';
Cells[7,4]:= '5db';
Cells[7,6]:= '3db';
Cells[7,8]:= '3db';
Cells[7,11]:= '2db';
Cells[7,14]:= '2db';
End;
For I:= 1 To HMax Do HajoKesz(Gep,I); Rendez(Gep); //Kepre(Gep,sgGepTer);
For I:= 1 To TM Do For J:= 1 To TM Do GJTer[I,J]:= 0;
For I:= 1 To HMax Do With Gep.Hajok[I] Do
For J:= 1 To 4 Do If Mezo[J].X>0 Then GJTer[Mezo[J].X,Mezo[J].Y]:= Tip;
FlottaList(ldGHajok);
btUjFlottaClick(Sender);
Vege:= False;
HBe:= 1;
end;
procedure TfmTorpedo.btUjFlottaClick(Sender: TObject);
Var I, J: Word;
begin
With sgJatTer Do
For I:= 1 To ColCount-1 Do For J:= 1 To RowCount-1 Do Cells[I,J]:= '';
For I:= 1 To HMax Do HajoKesz(Jat,I); Rendez(Jat); Kepre(Jat,sgJatTer);
For I:= 1 To TM Do For J:= 1 To TM Do Begin JJTer[I,J]:= 0; GL[I,J]:= 0 End;
For I:= 1 To HMax Do With Jat.Hajok[I] Do
For J:= 1 To 4 Do If Mezo[J].X>0 Then JJTer[Mezo[J].X,Mezo[J].Y]:= Tip;
FlottaList(ldJHajok);
end;
procedure TfmTorpedo.sgGepTerDblClick(Sender: TObject);
Var I, J, AH: Word;
Sullyedt: Boolean;
begin
If Vege Then Exit;
btUjFlotta.Enabled:= False;
With sgGepTer Do
Begin
If Cells[Col,Row]<>'' Then Exit;
If GJTer[Col,Row]>0 Then
Begin
Cells[Col,Row]:= 'O';
AH:= 0;
For I:= 1 To HMax Do With Gep.Hajok[I] Do
For J:= 1 To 4 Do If (Mezo[J].X=Col) And (Mezo[J].Y=Row) Then AH:= I;
Sullyedt:= True;
With Gep.Hajok[AH] Do
Begin
For I:= 1 To 4 Do If Mezo[I].X>0 Then
If Cells[Mezo[I].X,Mezo[I].Y]='' Then Sullyedt:= False;
If Sullyedt Then
Begin
For I:= 1 To 4 Do Cells[Mezo[I].X,Mezo[I].Y]:= 'X';
With ldGHajok do Items.Delete(Items.IndexOf(IntToStr(Tip)));
End;
End;
End
Else Cells[Col,Row]:= '.';
If ldGHajok.Items.Count=0 Then
With Canvas Do
Begin
With Font Do
Begin
Size:= 40;
Name:= 'Times New Roman';
Color:= clRed;
End;
Xk:= ClientWidth Div 2;
Yk:= ClientHeight Div 2;
TextOut(Xk-140,Yk,' You Win ');
Vege:= True;
End
Else
GepLoves;
End;
end;
Procedure TfmTorpedo.GepLoves;
Var I, J, AH, Ism: Word;
Sullyedt: Boolean;
Begin
With sgJatTer Do
Begin
If Not Kozel Then
Begin
Col:= Random(TM)+1; Row:= Random(TM)+1;
While GL[Col,Row]=7 Do Begin Col:= Random(TM)+1; Row:= Random(TM)+1 End;
End
Else
Begin
Col:= PCol+Random(3)-1; Row:= PRow+Random(3)-1; Ism:= 0;
While ((GL[Col,Row]=7) Or
(Col<1) Or
(Col>TM) Or
(Row<1) Or
(Row>TM)) And
(Ism<100) Do
Begin
Inc(Ism);
Case Random(3) Of
0: Begin Col:= PCol+Random(3)-1; Row:= PRow+Random(3)-1 End;
1: Begin Col:= PCol; Row:= PRow+Random(3)-1 End;
2: Begin Col:= PCol+Random(3)-1; Row:= PRow End;
End;
End;
If Ism=100 Then
Begin
Col:= PCol+Random(5)-2; Row:= PRow+Random(5)-2; Ism:= 0;
While ((GL[Col,Row]=7) Or
(Col<1) Or
(Col>TM) Or
(Row<1) Or
(Row>TM)) And
(Ism<100) Do
Begin
Inc(Ism);
Case Random(3) Of
0: Begin Col:= PCol+Random(5)-2; Row:= PRow+Random(5)-2 End;
1: Begin Col:= PCol; Row:= PRow+Random(5)-2 End;
2: Begin Col:= PCol+Random(5)-2; Row:= PRow End;
End;
End;
End;
If Ism=100 Then Kozel:= False;
End;
If Col*Row<>0 Then GL[Col,Row]:= 7;
If JJTer[Col,Row]>0 Then
Begin
Cells[Col,Row]:= 'O';
AH:= 0;
For I:= 1 To HMax Do With Jat.Hajok[I] Do
For J:= 1 To 4 Do If (Mezo[J].X=Col) And (Mezo[J].Y=Row) Then AH:= I;
Sullyedt:= True; Kozel:= False;
With Jat.Hajok[AH] Do
Begin
For I:= 1 To 4 Do If Mezo[I].X>0 Then
If GL[Mezo[I].X,Mezo[I].Y]=0 Then
Begin
Sullyedt:= False;
PCol:= Col; PRow:= Row;
Kozel:= True;
End;
If Sullyedt Then
Begin
For I:= 1 To 4 Do
Begin
Cells[Mezo[I].X,Mezo[I].Y]:= 'X';
If (Mezo[I].X>1) And (Mezo[I].Y>1) Then
GL[Mezo[I].X-1,Mezo[I].Y-1]:= 7;
If Mezo[I].X>1 Then
GL[Mezo[I].X-1,Mezo[I].Y]:= 7;
If (Mezo[I].X>1) And (Mezo[I].Y<TM) Then
GL[Mezo[I].X-1,Mezo[I].Y+1]:= 7;
If Mezo[I].Y>1 Then
GL[Mezo[I].X,Mezo[I].Y-1]:= 7;
GL[Mezo[I].X,Mezo[I].Y]:= 7;
If Mezo[I].Y+1<TM+1 Then
GL[Mezo[I].X,Mezo[I].Y+1]:= 7;
If (Mezo[I].X<TM) And (Mezo[I].Y>1) Then
GL[Mezo[I].X+1,Mezo[I].Y-1]:= 7;
If Mezo[I].X<TM Then
GL[Mezo[I].X+1,Mezo[I].Y]:= 7;
If (Mezo[I].X<TM) And (Mezo[I].Y<TM) Then
GL[Mezo[I].X+1,Mezo[I].Y+1]:= 7;
End;
With ldJHajok do Items.Delete(Items.IndexOf(IntToStr(Tip)));
End;
End;
End
Else Cells[Col,Row]:= '.';
sgJatTer.Repaint;
If ldJHajok.Items.Count=0 Then
With Canvas Do
Begin
With Font Do
Begin
Size:= 40;
Name:= 'Times New Roman';
Color:= clRed;
End;
Xk:= ClientWidth Div 2;
Yk:= ClientHeight Div 2;
TextOut(Xk-140,Yk,' I Win ');
Vege:= True;
End;
Col:= ColCount-1; Row:= RowCount-1;
End;
End;
procedure TfmTorpedo.btHelpClick(Sender: TObject);
Var I, J: Word;
begin
With sgGepTer Do If HBe=1 Then
For I:= 1 To TM Do For J:= 1 To TM Do
Begin
If Cells[I,J]='' Then HT[I,J]:= 1 Else HT[I,J]:= 0;
If (Cells[I,J]='') And
((Cells[I-1,J-1]='X') Or (Cells[I-1,J]='X') Or
(Cells[I-1,J+1]='X') Or (Cells[I,J-1]='X') Or
(Cells[I,J+1]='X') Or (Cells[I+1,J-1]='X') Or
(Cells[I+1,J]='X') Or (Cells[I+1,J+1]='X')) Then HT[I,J]:= 0;
End
Else
For I:= 1 To TM Do For J:= 1 To TM Do HT[I,J]:= 0;
sgGepTer.Repaint;
With btHelp Do
Begin
If HBe=0 Then Caption:= 'Help Be' Else Caption:= 'Help Ki';
HBe:= 1-HBe;
End;
end;
procedure TfmTorpedo.btUjJatekClick(Sender: TObject);
Var I, J: Word;
begin
HBe:= 0; btHelp.Caption:= 'Help Be';
For I:= 1 To TM Do For J:= 1 To TM Do HT[I,J]:= 0;
FormCreate(Sender);
end;
end.