📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, ExtCtrls, Menus;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Panel1: TPanel;
StringGrid1: TStringGrid;
Label1: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type
checktype=array[0..4,0..4] of integer;
var
check,score:checktype;
x1,y1:1..3;
computer,man:boolean;
computer1,computer2,man1,man2:boolean;
implementation
{$R *.DFM}
procedure checkwin;
var
i:integer;
begin
//判断人机胜负
if man or computer then
begin
for i:=0 to 2 do
begin
check[i,3]:=check[i,0]+check[i,1]+check[i,2];
check[3,i]:=check[0,i]+check[1,i]+check[2,i];
end;
check[3,3]:=check[0,0]+check[1,1]+check[2,2];
check[4,4]:=check[0,2]+check[1,1]+check[2,0];
if ((check[0,0]<>0)and (check[0,1]<>0)and (check[0,2]<>0)and
(check[1,0]<>0)and (check[1,1]<>0)and (check[1,2]<>0)and
(check[2,0]<>0)and (check[2,1]<>0)and (check[2,2]<>0)) then
begin
form1.label1.Caption:='棋和万事兴,天下皆太平!';
form1.label1.visible:=true;
man:=false;
end;
if ((check[0,3]=3) or (check[1,3]=3) or (check[2,3]=3)
or (check[3,0]=3) or (check[3,1]=3) or (check[3,2]=3)
or (check[3,3]=3) or (check[4,4]=3)) then
begin
form1.label1.caption:='大侠请再接再厉.';
form1.label1.visible:=true;
man:=false;
end;
if ((check[0,3]=-3) or (check[1,3]=-3) or (check[2,3]=-3)
or (check[3,0]=-3) or (check[3,1]=-3) or (check[3,2]=-3)
or (check[3,3]=-3) or (check[4,4]=-3)) then
begin
form1.label1.caption:='恭喜你!你获胜了!!';
form1.label1.visible:=true;
man:=false;
end;
end;
//判断两位选手胜负
if man1 or man2 then
begin
for i:=0 to 2 do
begin
check[i,3]:=check[i,0]+check[i,1]+check[i,2];
check[3,i]:=check[0,i]+check[1,i]+check[2,i];
end;
check[3,3]:=check[0,0]+check[1,1]+check[2,2];
check[4,4]:=check[0,2]+check[1,1]+check[2,0];
if ((check[0,0]<>0)and (check[0,1]<>0)and (check[0,2]<>0)and
(check[1,0]<>0)and (check[1,1]<>0)and (check[1,2]<>0)and
(check[2,0]<>0)and (check[2,1]<>0)and (check[2,2]<>0)) then
begin
form1.label1.Caption:='这是一个平局。';
form1.label1.visible:=true;
man1:=false;
man2:=false;
end;
if ((check[0,3]=3) or (check[1,3]=3) or (check[2,3]=3)
or (check[3,0]=3) or (check[3,1]=3) or (check[3,2]=3)
or (check[3,3]=3) or (check[4,4]=3)) then
begin
form1.label1.caption:='恭喜第一位选手,你胜出!';
form1.label1.visible:=true;
man1:=false;
man2:=false;
end;
if ((check[0,3]=-3) or (check[1,3]=-3) or (check[2,3]=-3)
or (check[3,0]=-3) or (check[3,1]=-3) or (check[3,2]=-3)
or (check[3,3]=-3) or (check[4,4]=-3)) then
begin
form1.label1.caption:='恭喜第二位选手,你胜出!';
form1.label1.visible:=true;
man1:=false;
man2:=false;
end;
end;
//判断计算机双方胜负
if computer1 or computer2 then
begin
for i:=0 to 2 do
begin
check[i,3]:=check[i,0]+check[i,1]+check[i,2];
check[3,i]:=check[0,i]+check[1,i]+check[2,i];
end;
check[3,3]:=check[0,0]+check[1,1]+check[2,2];
check[4,4]:=check[0,2]+check[1,1]+check[2,0];
if ((check[0,0]<>0)and (check[0,1]<>0)and (check[0,2]<>0)and
(check[1,0]<>0)and (check[1,1]<>0)and (check[1,2]<>0)and
(check[2,0]<>0)and (check[2,1]<>0)and (check[2,2]<>0)) then
begin
form1.label1.Caption:='这是一个平局。';
form1.label1.visible:=true;
computer1:=false;
computer2:=false;
end;
if ((check[0,3]=3) or (check[1,3]=3) or (check[2,3]=3)
or (check[3,0]=3) or (check[3,1]=3) or (check[3,2]=3)
or (check[3,3]=3) or (check[4,4]=3)) then
begin
form1.label1.caption:='计算机选手一胜出。';
form1.label1.visible:=true;
computer1:=false;
computer2:=false;
end;
if ((check[0,3]=-3) or (check[1,3]=-3) or (check[2,3]=-3)
or (check[3,0]=-3) or (check[3,1]=-3) or (check[3,2]=-3)
or (check[3,3]=-3) or (check[4,4]=-3)) then
begin
form1.label1.caption:='计算机选手二胜出。';
form1.label1.visible:=true;
computer1:=false;
computer2:=false;
end;
end;
end;
procedure answering;
var
i,j:integer;
m,n,k:integer;
begin
//判断最佳落棋点
for i:=0 to 2 do
begin
case (check[i,1]+check[i,2]) of
2 : score[i,0]:=score[i,0]+50;
-2 : score[i,0]:=score[i,0]+25;
1 : score[i,0]:=score[i,0]+10;
-1 : score[i,0]:=score[i,0]+8;
0 : score[i,0]:=score[i,0]+4;
end;
case (check[i,0]+check[i,2]) of
2 : score[i,1]:=score[i,1]+50;
-2 : score[i,1]:=score[i,1]+25;
1 : score[i,1]:=score[i,1]+10;
-1 : score[i,1]:=score[i,1]+8;
0 : score[i,1]:=score[i,1]+4;
end;
case (check[i,0]+check[i,1]) of
2 : score[i,2]:=score[i,2]+50;
-2 : score[i,2]:=score[i,2]+25;
1 : score[i,2]:=score[i,2]+10;
-1 : score[i,2]:=score[i,2]+8;
0 : score[i,2]:=score[i,2]+4;
end;
end;
for j:=0 to 2 do
begin
case (check[1,j]+check[2,j]) of
2 : score[0,j]:=score[0,j]+50;
-2 : score[0,j]:=score[0,j]+25;
1 : score[0,j]:=score[0,j]+10;
-1 : score[0,j]:=score[0,j]+8;
0 : score[0,j]:=score[0,j]+4;
end;
case (check[0,j]+check[2,j]) of
2 : score[1,j]:=score[1,j]+50;
-2 : score[1,j]:=score[1,j]+25;
1 : score[1,j]:=score[1,j]+10;
-1 : score[1,j]:=score[1,j]+8;
0 : score[1,j]:=score[1,j]+4;
end;
case (check[0,j]+check[1,j]) of
2 : score[2,j]:=score[2,j]+50;
-2 : score[2,j]:=score[2,j]+25;
1 : score[2,j]:=score[2,j]+10;
-1 : score[2,j]:=score[2,j]+8;
0 : score[2,j]:=score[2,j]+4;
end;
end;
case (check[1,1]+check[2,2]) of
2 : score[0,0]:=score[0,0]+50;
-2 : score[0,0]:=score[0,0]+25;
1 : score[0,0]:=score[0,0]+10;
-1 : score[0,0]:=score[0,0]+8;
0 : score[0,0]:=score[0,0]+4;
end;
case (check[0,0]+check[2,2]) of
2 : score[1,1]:=score[1,1]+50;
-2 : score[1,1]:=score[1,1]+25;
1 : score[1,1]:=score[1,1]+10;
-1 : score[1,1]:=score[1,1]+8;
0 : score[1,1]:=score[1,1]+4;
end;
case (check[0,0]+check[1,1]) of
2 : score[2,2]:=score[2,2]+50;
-2 : score[2,2]:=score[2,2]+25;
1 : score[2,2]:=score[2,2]+10;
-1 : score[2,2]:=score[2,2]+8;
0 : score[2,2]:=score[2,2]+4;
end;
case (check[1,1]+check[2,0]) of
2 : score[0,2]:=score[0,2]+50;
-2 : score[0,2]:=score[0,2]+25;
1 : score[0,2]:=score[0,2]+10;
-1 : score[0,2]:=score[0,2]+8;
0 : score[0,2]:=score[0,2]+4;
end;
case (check[0,2]+check[2,0]) of
2 : score[1,1]:=score[1,1]+50;
-2 : score[1,1]:=score[1,1]+25;
1 : score[1,1]:=score[1,1]+10;
-1 : score[1,1]:=score[1,1]+8;
0 : score[1,1]:=score[1,1]+4;
end;
case (check[0,2]+check[1,1]) of
2 : score[2,0]:=score[2,0]+50;
-2 : score[2,0]:=score[2,0]+25;
1 : score[2,0]:=score[2,0]+10;
-1 : score[2,0]:=score[2,0]+8;
0 : score[2,0]:=score[2,0]+4;
end;
for i :=0 to 2 do
for j:=0 to 2 do
if check[i,j]<>0 then score[i,j]:=0;
k:=0;
m:=0;
n:=0;
for i:=0 to 2 do
for j:=0 to 2 do
if score[i,j]>k then
begin
k:=score[i,j];
m:=i;
n:=j;
end;
//人机游戏时,判断机子落棋
if man or computer then
begin
form1.stringgrid1.Cells[n,m]:='X';
check[m,n]:=1;
end;
//计算机下棋时,判断双方落棋
if computer1 then
begin
form1.stringgrid1.Cells[n,m]:='X';
check[m,n]:=1;
end;
if computer2 then
begin
form1.stringgrid1.Cells[n,m]:='0';
check[m,n]:=-1;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
computer:=false;
man:=false;
computer1:=false;
computer2:=false;
man1:=false;
man2:=false;
timer1.Enabled:=false;
end;
procedure TForm1.StringGrid1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if man then
begin
x1:=trunc(x/20);
y1:=trunc(y/20);
end;
if man1 or man2 then
begin
x1:=trunc(x/20);
y1:=trunc(y/20);
end;
end;
procedure TForm1.StringGrid1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ((man) and (check[y1,x1]=0)) then
begin
stringgrid1.cells[x1,y1]:='0';
check[y1,x1]:=-1;
computer:=true;
man:=false;
checkwin;
answering;
computer:=false;
man:=true;
checkwin;
end;
if (man1 and (check[y1,x1]=0)) then
begin
stringgrid1.cells[x1,y1]:='X';
check[y1,x1]:=1;
man1:=false;
man2:=true;
checkwin;
end;
if (man2 and (check[y1,x1]=0)) then
begin
stringgrid1.cells[x1,y1]:='0';
check[y1,x1]:=-1;
man2:=false;
man1:=true;
checkwin;
end;
end;
procedure TForm1.N2Click(Sender: TObject);
var
i,j:0..2;
begin
for j:=0 to 2 do
for i:=0 to 2 do
begin
stringgrid1.Cells[i,j]:='';
check[i,j]:=0;
score[i,j]:=0;
end;
for j:=0 to 2 do check[j,3]:=0;
for i:=0 to 2 do check[3,i]:=0;
check[3,3]:=0;
check[4,4]:=0;
label1.Caption:='';
label1.Visible:=false;
computer1:=false;
computer2:=false;
man1:=false;
man2:=false;
stringgrid1.Cells[1,1]:='X';
check[1,1]:=1;
computer:=false;
man:=true;
end;
procedure TForm1.N3Click(Sender: TObject);
var
i,j:integer;
begin
computer1:=false;
computer2:=false;
man1:=false;
man2:=false;
computer:=false;
man:=true;
for j:=0 to 2 do
for i:=0 to 2 do
begin
stringgrid1.Cells[i,j]:='';
check[i,j]:=0;
score[i,j]:=0;
end;
for j:=0 to 2 do check[j,3]:=0;
for i:=0 to 2 do check[3,i]:=0;
check[3,3]:=0;
check[4,4]:=0;
label1.Caption:='';
label1.Visible:=false;
showmessage('请先下!');
end;
procedure TForm1.N7Click(Sender: TObject);
begin
close;
end;
procedure TForm1.N4Click(Sender: TObject);
var
i,j:0..2;
begin
for j:=0 to 2 do
for i:=0 to 2 do
begin
stringgrid1.Cells[i,j]:='';
check[i,j]:=0;
score[i,j]:=0;
end;
for j:=0 to 2 do check[j,3]:=0;
for i:=0 to 2 do check[3,i]:=0;
check[3,3]:=0;
check[4,4]:=0;
label1.Caption:='';
label1.Visible:=false;
computer:=false;
man:=false;
computer1:=false;
computer2:=false;
man1:=true;
end;
procedure TForm1.N5Click(Sender: TObject);
var
i,j,x,y:0..2;
begin
for j:=0 to 2 do
for i:=0 to 2 do
begin
stringgrid1.Cells[i,j]:='';
check[i,j]:=0;
score[i,j]:=0;
end;
for j:=0 to 2 do check[j,3]:=0;
for i:=0 to 2 do check[3,i]:=0;
check[3,3]:=0;
check[4,4]:=0;
label1.Caption:='';
label1.Visible:=false;
computer:=false;
man:=false;
man1:=false;
man2:=false;
computer1:=true;
if MessageDlg('请指定第一位计算机选手的第一个落子是否是最佳。',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
answering;
computer1:=not computer1;
computer2:=not computer2;
end
else
begin
randomize;
x:=random(2);
y:=random(2);
stringgrid1.Cells[y,x]:='X';
check[x,y]:=1;
computer1:=not computer1;
computer2:=not computer2;
end;
timer1.Enabled:=true;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
answering;
computer1:=not computer1;
computer2:=not computer2;
checkwin;
if (not computer1 and not computer2) then
timer1.Enabled:=false;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -