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.