unit main;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, ScktComp, Grids, Menus, StdCtrls, ExtCtrls;type Tmainform = class(TForm) Panel1: TPanel; DrawGrid1: TDrawGrid; Memo1: TMemo; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Edit2: TEdit; Timer3: TTimer; Timer4: TTimer; next: TButton; exit: TButton; procedure FormCreate(Sender: TObject); procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormShow(Sender: TObject); procedure Timer3Timer(Sender: TObject); procedure Timer4Timer(Sender: TObject); procedure exitClick(Sender: TObject); procedure nextClick(Sender: TObject); private { Private declarations } Tag:array[0..18,0..18]of integer; {0 for none,1 for black,2 for white} IsBlack:boolean; public { Public declarations } function IsWin(IsBlack:boolean):boolean; //whether win end;var mainform: Tmainform; left1,left2:integer; step:integer; count1,count2:integer; times:integer;implementationuses Unit1;{$R *.DFM}function Tmainform.IsWin(IsBlack:boolean):boolean; label exit1; var i,j:integer; wtag:integer; begin IsWin:=false; if IsBlack then wtag:=1 else wtag:=2; for i:=0 to 18 do for j:=0 to 14 do begin {是否有行连成} if (i<15) and(Tag[i,j]=wtag) and(Tag[i+1,j]=wtag) and(Tag[i+2,j]=wtag) and(Tag[i+3,j]=wtag) and(Tag[i+4,j]=wtag) then begin IsWin:=True; goto exit1; end; {是否有列连成} if (Tag[i,j]=wtag) and(Tag[i,j+1]=wtag) and(Tag[i,j+2]=wtag) and(Tag[i,j+3]=wtag) and(Tag[i,j+4]=wtag) then begin IsWin:=True; goto exit1; end; {是否有主对角线连成} if (i<15) and(Tag[i,j]=wtag) and(Tag[i+1,j+1]=wtag) and(Tag[i+2,j+2]=wtag) and(Tag[i+3,j+3]=wtag) and(Tag[i+4,j+4]=wtag) then begin IsWin:=True; goto exit1; end; {是否有副对角线连成} if (Tag[i,j]=wtag) and(Tag[i-1,j+1]=wtag) and(Tag[i-2,j+2]=wtag) and(Tag[i-3,j+3]=wtag) and(Tag[i-4,j+4]=wtag) then begin IsWin:=True; goto exit1; end; end; exit1: end;procedure Tmainform.FormCreate(Sender: TObject); var i,j:integer; begin for i:=0 to 18 do for j:=0 to 18 do begin Tag[i,j]:=0; end; IsBlack:=true; DrawGrid1.Canvas.Pen.Color :=clBlack; DrawGrid1.Canvas.Brush.Color :=clBlack; left1:=3*60*1000; left2:=3*60*1000; edit1.Clear; edit2.Clear; timer3.Enabled:=true; timer4.Enabled:=false; step:=0; next.Enabled:=false; end;procedure Tmainform.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); begin DrawGrid1.Canvas.Pen.Color :=clBlack; DrawGrid1.Canvas.Brush.Color :=clBlack; if tag[acol,arow]=1 then begin DrawGrid1.Canvas.Ellipse(acol*21,arow*21,(acol+1)*21,(arow+1)*21); end else if tag[acol,arow]=2 then DrawGrid1.Canvas.Arc(acol*21,arow*21,(acol+1)*21,(arow+1)*21,acol*21,arow*21,acol*21,arow*21) else begin DrawGrid1.Canvas.Pen.Color :=clWhite; DrawGrid1.Canvas.Brush.Color :=clWhite; DrawGrid1.Canvas.Ellipse(acol*21,arow*21,(acol+1)*21,(arow+1)*21); end; end;procedure Tmainform.DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var col,row:integer; i,j:integer; begin step:=step+1; if step>400 then begin showmessage('比赛时间到'+#13+challege+'用了'+inttostr(count1)+'秒'+#13+headon+'用了'+inttostr(count2)+'秒'); if count1>count2 then begin showmessage('白方胜'); next.Enabled:=true; end else begin showmessage('黑方胜'); next.Enabled:=true; end; end; DrawGrid1.Canvas.Pen.Color :=clBlack; DrawGrid1.Canvas.Brush.Color :=clBlack; DrawGrid1.MouseToCell(x,y,col,row); if tag[col,row]=0 then begin if IsBlack then begin DrawGrid1.Canvas.Ellipse(col*21,row*21,(col+1)*21,(row+1)*21); tag[col,row]:=1; left2:=3*60*1000; timer3.Enabled:=false; timer4.Enabled:=true; end else begin DrawGrid1.Canvas.Arc(col*21,row*21,(col+1)*21,(row+1)*21,col*21,row*21,col*21,row*21); tag[col,row]:=2; left1:=3*60*1000; timer4.Enabled:=false; timer3.Enabled:=true; end; if IsWin(IsBlack) then begin if IsBlack then if MessageDlg('黑方胜利',mtInformation,[mbOK],0)=mrOK then begin for i:=0 to 18 do for j:=0 to 18 do begin tag[i,j]:=0; end; DrawGrid1.Invalidate; next.Enabled:=true; end; if not IsBlack then if MessageDlg('白方胜利',mtInformation,[mbOK],0)=mrOK then begin for i:=0 to 18 do for j:=0 to 18 do begin tag[i,j]:=0; end; DrawGrid1.Invalidate; end; next.Enabled:=true; end; IsBlack:=not IsBlack; end; end;procedure Tmainform.FormShow(Sender: TObject); begin Form1.ShowModal; label1.Caption:=challege+' 还有'; label2.Caption:=headon+' 还有'; end;procedure Tmainform.Timer3Timer(Sender: TObject); var left11:integer; begin left1:=left1-1000; left11:=left1 div 1000; edit1.Text:=inttostr(left11)+ '秒'; count1:=count1+1; if left1=0 then begin MessageDlg('时间到,白方胜利',mtInformation,[mbOK],0); timer3.Enabled:=false; next.Enabled:=true; end; end;procedure Tmainform.Timer4Timer(Sender: TObject); var left22:integer; begin left2:=left2-1000; left22:=left2 div 1000; edit2.Text:=inttostr(left22)+ '秒'; count2:=count2+1; if left2=0 then begin MessageDlg('时间到,黑方胜利',mtInformation,[mbOK],0); timer4.Enabled:=false; next.Enabled:=true; end; end;procedure Tmainform.exitClick(Sender: TObject); begin close; end;procedure Tmainform.nextClick(Sender: TObject); begin times:=times+1; next.Enabled:=false; if times>3 then begin showmessage('三局比赛已经完毕'); close; end; end;end.
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ScktComp, Grids, Menus, StdCtrls, ExtCtrls;type
Tmainform = class(TForm)
Panel1: TPanel;
DrawGrid1: TDrawGrid;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Timer3: TTimer;
Timer4: TTimer;
next: TButton;
exit: TButton;
procedure FormCreate(Sender: TObject);
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormShow(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
procedure exitClick(Sender: TObject);
procedure nextClick(Sender: TObject);
private
{ Private declarations }
Tag:array[0..18,0..18]of integer;
{0 for none,1 for black,2 for white}
IsBlack:boolean;
public
{ Public declarations }
function IsWin(IsBlack:boolean):boolean; //whether win
end;var
mainform: Tmainform;
left1,left2:integer;
step:integer;
count1,count2:integer;
times:integer;implementationuses Unit1;{$R *.DFM}function Tmainform.IsWin(IsBlack:boolean):boolean;
label exit1;
var
i,j:integer;
wtag:integer;
begin
IsWin:=false;
if IsBlack then
wtag:=1 else
wtag:=2;
for i:=0 to 18 do
for j:=0 to 14 do
begin
{是否有行连成}
if (i<15)
and(Tag[i,j]=wtag)
and(Tag[i+1,j]=wtag)
and(Tag[i+2,j]=wtag)
and(Tag[i+3,j]=wtag)
and(Tag[i+4,j]=wtag)
then
begin
IsWin:=True;
goto exit1;
end;
{是否有列连成}
if (Tag[i,j]=wtag)
and(Tag[i,j+1]=wtag)
and(Tag[i,j+2]=wtag)
and(Tag[i,j+3]=wtag)
and(Tag[i,j+4]=wtag)
then
begin
IsWin:=True;
goto exit1;
end;
{是否有主对角线连成}
if (i<15)
and(Tag[i,j]=wtag)
and(Tag[i+1,j+1]=wtag)
and(Tag[i+2,j+2]=wtag)
and(Tag[i+3,j+3]=wtag)
and(Tag[i+4,j+4]=wtag)
then
begin
IsWin:=True;
goto exit1;
end;
{是否有副对角线连成}
if (Tag[i,j]=wtag)
and(Tag[i-1,j+1]=wtag)
and(Tag[i-2,j+2]=wtag)
and(Tag[i-3,j+3]=wtag)
and(Tag[i-4,j+4]=wtag)
then
begin
IsWin:=True;
goto exit1;
end;
end;
exit1:
end;procedure Tmainform.FormCreate(Sender: TObject);
var
i,j:integer;
begin
for i:=0 to 18 do
for j:=0 to 18 do
begin
Tag[i,j]:=0;
end;
IsBlack:=true;
DrawGrid1.Canvas.Pen.Color :=clBlack;
DrawGrid1.Canvas.Brush.Color :=clBlack;
left1:=3*60*1000;
left2:=3*60*1000;
edit1.Clear;
edit2.Clear;
timer3.Enabled:=true;
timer4.Enabled:=false;
step:=0;
next.Enabled:=false;
end;procedure Tmainform.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
DrawGrid1.Canvas.Pen.Color :=clBlack;
DrawGrid1.Canvas.Brush.Color :=clBlack;
if tag[acol,arow]=1 then
begin
DrawGrid1.Canvas.Ellipse(acol*21,arow*21,(acol+1)*21,(arow+1)*21);
end
else if tag[acol,arow]=2 then
DrawGrid1.Canvas.Arc(acol*21,arow*21,(acol+1)*21,(arow+1)*21,acol*21,arow*21,acol*21,arow*21)
else
begin
DrawGrid1.Canvas.Pen.Color :=clWhite;
DrawGrid1.Canvas.Brush.Color :=clWhite;
DrawGrid1.Canvas.Ellipse(acol*21,arow*21,(acol+1)*21,(arow+1)*21);
end;
end;procedure Tmainform.DrawGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
col,row:integer;
i,j:integer;
begin
step:=step+1;
if step>400 then
begin
showmessage('比赛时间到'+#13+challege+'用了'+inttostr(count1)+'秒'+#13+headon+'用了'+inttostr(count2)+'秒');
if count1>count2 then
begin
showmessage('白方胜');
next.Enabled:=true;
end
else
begin
showmessage('黑方胜');
next.Enabled:=true;
end;
end;
DrawGrid1.Canvas.Pen.Color :=clBlack;
DrawGrid1.Canvas.Brush.Color :=clBlack;
DrawGrid1.MouseToCell(x,y,col,row);
if tag[col,row]=0 then
begin
if IsBlack then
begin
DrawGrid1.Canvas.Ellipse(col*21,row*21,(col+1)*21,(row+1)*21);
tag[col,row]:=1;
left2:=3*60*1000;
timer3.Enabled:=false;
timer4.Enabled:=true;
end
else
begin
DrawGrid1.Canvas.Arc(col*21,row*21,(col+1)*21,(row+1)*21,col*21,row*21,col*21,row*21);
tag[col,row]:=2;
left1:=3*60*1000;
timer4.Enabled:=false;
timer3.Enabled:=true;
end;
if IsWin(IsBlack) then
begin
if IsBlack then
if MessageDlg('黑方胜利',mtInformation,[mbOK],0)=mrOK then
begin
for i:=0 to 18 do
for j:=0 to 18 do
begin
tag[i,j]:=0;
end;
DrawGrid1.Invalidate;
next.Enabled:=true;
end;
if not IsBlack then
if MessageDlg('白方胜利',mtInformation,[mbOK],0)=mrOK then
begin
for i:=0 to 18 do
for j:=0 to 18 do
begin
tag[i,j]:=0;
end;
DrawGrid1.Invalidate;
end;
next.Enabled:=true;
end;
IsBlack:=not IsBlack;
end;
end;procedure Tmainform.FormShow(Sender: TObject);
begin
Form1.ShowModal;
label1.Caption:=challege+' 还有';
label2.Caption:=headon+' 还有';
end;procedure Tmainform.Timer3Timer(Sender: TObject);
var
left11:integer;
begin
left1:=left1-1000;
left11:=left1 div 1000;
edit1.Text:=inttostr(left11)+ '秒';
count1:=count1+1;
if left1=0 then
begin
MessageDlg('时间到,白方胜利',mtInformation,[mbOK],0);
timer3.Enabled:=false;
next.Enabled:=true;
end;
end;procedure Tmainform.Timer4Timer(Sender: TObject);
var
left22:integer;
begin
left2:=left2-1000;
left22:=left2 div 1000;
edit2.Text:=inttostr(left22)+ '秒';
count2:=count2+1;
if left2=0 then
begin
MessageDlg('时间到,黑方胜利',mtInformation,[mbOK],0);
timer4.Enabled:=false;
next.Enabled:=true;
end;
end;procedure Tmainform.exitClick(Sender: TObject);
begin
close;
end;procedure Tmainform.nextClick(Sender: TObject);
begin
times:=times+1;
next.Enabled:=false;
if times>3 then
begin
showmessage('三局比赛已经完毕');
close;
end;
end;end.