![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Крестики не вводятся не знаю почему. Если можете посоветова проверку на выйграшь какую нить более лучшую ??
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xo:bool; //
implementation
{$R *.dfm}
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
ARow: Integer; var CanSelect: Boolean);
var
i,j:integer;
summvert,summhorz,summdiag1,summdiag2:string;
begin
with stringgrid1 do
begin
defaultDrawing:=True;// если этот параметр выставить в false, то никакие
//введённые символы отрисовываться не будут
// в фиксированных ячейках нельзя ничего писать, поэтому уберём их
FixedCols:=0;
FixedRows:=0;
Options:=Options-[goEditing];// защита от ввода символов с клавиатуры
end;
begin
if (stringgrid1.Cells[ACol,ARow]<>'') then exit;
if xo then stringgrid1.Cells[ACol,ARow]:='X'
else stringgrid1.Cells[ACol,ARow]:='O'; // -, -
xo:=not xo; //
for i:=0 to 19 do //
for j:=0 to 19 do
begin
summvert:=stringgrid1.cells[i,j]+stringgrid1.cells[i+1,j]+stringgrid1.cells[i+2,j]+stringgrid1.cells[i+3,j]+stringgrid1.cells[i+4,j];
summhorz:=stringgrid1.cells[i,j]+stringgrid1.cells[i,j+1]+stringgrid1.cells[i,j+2]+stringgrid1.cells[i,j+3]+stringgrid1.cells[i,j+4];
summdiag1:=stringgrid1.cells[i,j]+stringgrid1.cells[i+1,j+1]+stringgrid1.cells[i+2,j+2]+stringgrid1.cells[i+3,j+3]+stringgrid1.cells[i+4,j+4];
summdiag2:=stringgrid1.cells[i,j+4]+stringgrid1.cells[i+1,j+3]+stringgrid1.cells[i+2,j+2]+stringgrid1.cells[i+3,j+1]+stringgrid1.cells[i+4,j];
if (summvert='XXXXX') or (summhorz='XXXXX') or (summdiag1='XXXXX') or(summdiag2='XXXXX') then MessageDlg('X-win', mtInformation,[mbOk], 0);
if (summvert='OOOOO') or (summhorz='OOOOO') or (summdiag1='OOOOO') or(summdiag2='OOOOO') then MessageDlg('O-win', mtInformation,[mbOk], 0);
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
xo:=true; // -, -
end;
end.
Последний раз редактировалось Admin, 12.04.2012 в 21:43. |
|
#2
|
||||
|
||||
|
Данный ранее код не понравился?
Делать такую игру на StringGrid-е - извращение. Используй DrawGrid. |
|
#3
|
||||
|
||||
|
Люди не ищут легких путей
![]() |
|
#4
|
|||
|
|||
|
Цитата:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
procedure FormCreate(Sender: TObject);
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
xo:bool; //
implementation
{$R *.dfm}
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
i,j:integer;
summvert,summhorz,summdiag1,summdiag2:string;
begin
if (DrawGrid1.Cell[ACol,ARow]<>'') then exit; //пустое ли поле
if xo
then DrawGrid1.Cell[ACol,ARow]:='X'
else DrawGrid1.Cell[ACol,ARow]:='O'; // -, -
xo:=not xo; //
for i:=0 to 19 do //
for j:=0 to 19 do
begin
summvert:=DrawGrid1.cell[i,j]+DrawGrid1.cell[i+1,j]+DrawGrid1.cell[i+2,j]+DrawGrid1.cell[i+3,j]+DrawGrid1.cell[i+4,j];
summhorz:=DrawGrid1.cell[i,j]+DrawGrid1.cell[i,j+1]+DrawGrid1.cell[i,j+2]+DrawGrid1.cell[i,j+3]+DrawGrid1.cell[i,j+4];
summdiag1:=DrawGrid1.cell[i,j]+DrawGrid1.cell[i+1,j+1]+DrawGrid1.cell[i+2,j+2]+DrawGrid1.cell[i+3,j+3]+DrawGrid1.cell[i+4,j+4];
summdiag2:=DrawGrid1.cell[i,j+4]+DrawGrid1.cell[i+1,j+3]+DrawGrid1.cell[i+2,j+2]+DrawGrid11.cell[i+3,j+1]+DrawGrid1.cell[i+4,j];
if (summvert='XXXXX') or (summhorz='XXXXX') or (summdiag1='XXXXX') or(summdiag2='XXXXX') then MessageDlg('X-win', mtInformation,[mbOk], 0);
if (summvert='OOOOO') or (summhorz='OOOOO') or (summdiag1='OOOOO') or(summdiag2='OOOOO') then MessageDlg('O-win', mtInformation,[mbOk], 0);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
xo:=true; // -, -
end;
end.
Последний раз редактировалось Admin, 13.04.2012 в 10:01. |
|
#5
|
||||
|
||||
|
У меня все работает.
Последний раз редактировалось YVitaliy, 12.04.2012 в 21:58. |
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
||||
|
||||
|
Я не о DrawGrid, а о StringGrid. В DrawGrid нужно рисовать "ручками" все-таки. В DrawGrid есть ф-ция CellRect() для этого.
|
|
#8
|
||||
|
||||
|
Цитата:
, в нём можно крестики и нолики хотя-бы отрисовать, а не символами выводить. |