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.