unit _fm_Sugg;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, ExtCtrls, Buttons;
type
Tfm_Suggest = class(TForm)
Panel1 : TPanel;
lbPatts : TListBox;
Panel2 : TPanel;
sgWords : TStringGrid;
laWords : TLabel;
laPatts : TLabel;
stWords : TStaticText;
Panel4 : TPanel;
btUnuse : TBitBtn;
btCancel : TBitBtn;
btApply : TBitBtn;
stPatts : TStaticText;
procedure FormActivate(Sender: TObject);
procedure btApplyClick(Sender: TObject);
procedure sgWordsSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure btUnuseClick(Sender: TObject);
procedure lbPattsClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
fm_Suggest : Tfm_Suggest;
Fix : string;
PattMaxL,PattMaxR : integer;
implementation
uses _fm_Main, _fm_DMan, Computer, LangSupp;
{$R *.DFM}
{------------------------------------------------------------------------------}
procedure Tfm_Suggest.FormActivate(Sender: TObject);
begin
sgWords.ColWidths[0] := 150;
sgWords.ColWidths[1] := 30;
sgWords.ColWidths[2] := 30;
sgWords.ColWidths[3] := 20;
sgWords.ColWidths[4] := 20;
sgWords.Cells[0,0] := _C_cWord;
sgWords.Cells[1,0] := _G_cWWeight;
sgWords.Cells[2,0] := _G_cDir;
sgWords.Cells[3,0] := _G_cPosX;
sgWords.Cells[4,0] := _G_cPosY;
stWords.Caption := Format(_G_cTotalWords, [sgWords.RowCount-1]);
stPatts.Caption := Format(_G_cTotalPatts, [PatternsCount]);
// sgWords.Row := TheBestWordNo;
// - 1;
sgWords.SetFocus;
end;
{------------------------------------------------------------------------------}
procedure Tfm_Suggest.btApplyClick(Sender: TObject);
var
i : integer;
begin
Suggested := false;
TheBestWordNo := sgWords.Row;
// + 1;
WordDirHor := Patterns[Drafts[TheBestWordNo].PattNo].DirHor;
sWord := Drafts[TheBestWordNo].Word;
for i:=1 to length(sWord) do
if WordDirHor then
if Field[SCol + i - 1,SRow].Letter=' ' then
WordCross[i] := false
else
WordCross[i] := true
else
if Field[SCol,SRow + i - 1].Letter=' ' then
WordCross[i] := false
else
WordCross[i] := true;
{Все в порядке; Игрок согласился с подсказкой ---------------------------------}
GameState := gsGame;
{Сохранение предыдущего состояния поля}
Field2 := Field;
{Расчет веса слова}
WWeight := WordWeight;
{Заполение массива поля новым словом}
WriteWord;
{Запись счета}
MessageDlg(Format(_G_mIPoints, [WWeight, Ending(WWeight)]), mtInformation, [mbOk], 0);
Players[PCurrent].Rec.Caption := IntToStr(StrToInt(Players[PCurrent].Rec.Caption)+
WWeight);
Players[PCNo].Rec.Caption := IntToStr(StrToInt(Players[PCNo].Rec.Caption)+
SuggestionValue);
{Запись подсказки как хода в архив ходов}
inc(PlayerMoves);
PlayerMove[PlayerMoves].PlayerName := Players[PCNo].Name.Text;
PlayerMove[PlayerMoves].DirHor := WordDirHor;
PlayerMove[PlayerMoves].Pos := Point(SCol,SRow);
PlayerMove[PlayerMoves].Word := Format(_G_cHelp,[AnsiUpperCase(sWord)]);
PlayerMove[PlayerMoves].Points := SuggestionValue;
PlayerMove[PlayerMoves].Total := StrToInt(Players[PCurrent].Rec.Caption);
PlayerMove[PlayerMoves].UsedLetters := '';
PlayerMove[PlayerMoves].ReceivedLetters := '';
Close;
end;
{------------------------------------------------------------------------------}
procedure Tfm_Suggest.sgWordsSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
var
i,j : integer;
begin
{Если ход компьютера, то не реагировать на sgWords.SelectCell}
if not Suggested then
exit;
{Прорисовываем на поле место будущего слова}
// sgWords.Refresh;
// sgWords.Repaint;
// sgWords.Update;
// sgWords.UpdateControlState;
// sgWords.UpdateControlState;
TheBestWordNo := ARow;
// + 1;
//sgWords.Row;
//ARow;
SCol := Drafts[TheBestWordNo].WCol;
SRow := Drafts[TheBestWordNo].WRow;
for i:=0 to MaxWordLength-1 do
for j:=0 to MaxWordLength-1 do
Field[i,j].JustSet:=false;
if Patterns[Drafts[TheBestWordNo].PattNo].DirHor then
for i:=1 to length(Drafts[TheBestWordNo].Word) do
Field [SCol+i-1,SRow].JustSet:=true
else for i:=1 to length(Drafts[TheBestWordNo].Word) do
Field [SCol,SRow+i-1].JustSet:=true;
lbPatts.ItemIndex := Drafts[TheBestWordNo].PattNo - 1;
fm_Main.sg.Repaint;
end;
{------------------------------------------------------------------------------}
procedure Tfm_Suggest.btUnuseClick(Sender: TObject);
var
i : integer;
begin
i := FindWordInFounded(sgWords.Cells[sgWords.Col,sgWords.Row]);
for i:=i to FoundedWords-1 do
Drafts[i]:=Drafts[i+1];
dec(FoundedWords);
fm_DMan.lbActive.Items.Delete(SendMessage(fm_DMan.lbActive.Handle, LB_FindStringExact,
0, Longint(PChar(sgWords.Cells[sgWords.Col,sgWords.Row]))));
SearchBestWord;
stWords.Caption := Format(_G_cTotalWords, [sgWords.RowCount-1]);
end;
{------------------------------------------------------------------------------}
procedure Tfm_Suggest.lbPattsClick(Sender: TObject);
var
i,j,
ACol,ARow : integer;
begin
ACol := Patterns[lbPatts.ItemIndex + 1].FixPos.x;
ARow := Patterns[lbPatts.ItemIndex + 1].FixPos.y;
i := 1;
while Patterns[lbPatts.ItemIndex + 1].Pattern[i]='*' do
inc(i);
if Patterns[lbPatts.ItemIndex + 1].DirHor then
ACol := ACol - i + 1
else
ARow := ARow - i + 1;
for i:=0 to MaxWordLength-1 do
for j:=0 to MaxWordLength-1 do
Field[i,j].JustSet:=false;
if Patterns[lbPatts.ItemIndex + 1].DirHor then
for i:=1 to length(Patterns[lbPatts.ItemIndex + 1].Pattern) do
Field [ACol+i-1,ARow].JustSet:=true
else for i:=1 to length(Patterns[lbPatts.ItemIndex + 1].Pattern) do
Field [ACol,ARow+i-1].JustSet:=true;
fm_Main.sg.Repaint;
end;
end.