📄 fiveformpas.pas
字号:
unit fiveformpas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ImgList, ComCtrls, IdBaseComponent,
IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle,mytype;
type
Tfiveform = class(TForm)
Panel1: TPanel;
facelist: TImageList;
Panel2: TPanel;
Image1: TImage;
qiimagelist: TImageList;
Panel3: TPanel;
Panel4: TPanel;
Label1: TLabel;
faceimg: TImage;
chatroom: TRichEdit;
Edit1: TEdit;
IdUDPServer1: TIdUDPServer;
labelimg: TImage;
Label2: TLabel;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormShow(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
over:boolean;
num:integer;
qizi:array [1..15,1..15] of string[2];
public
qitype:string[2];
qitypelist:array [0..2] of string[2];
playerme:Ruserdata;
playerenemy:Ruserdata;
procedure putchess(x,y:integer);
function winny(x,y:integer):boolean;
end;
Rfivecommand=record
command:integer;
x,y:integer;
text:string[50];
end;
const
Cputchess=0;
Csendmsg=1;
var
fiveform: Tfiveform;
implementation
uses mainformpas, myconst;
{$R *.dfm}
procedure Tfiveform.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
ctext:Rfivecommand;
begin
//如果游戏没结束,且到本方下棋。
if (not over) and (qitypelist[num mod 2]=qitype) then
begin
putchess(x,y);
ctext.command:=Cputchess;
ctext.x:=x;
ctext.y:=y;
idudpserver1.SendBuffer(playerenemy.IP,2555,ctext,sizeof(ctext));
end;
end;
procedure Tfiveform.FormCreate(Sender: TObject);
begin
qitypelist[0]:='黑';
qitypelist[1]:='白';
end;
procedure Tfiveform.putchess(x, y: integer);
var
img:Tbitmap;
qix,qiy:integer;
begin
qix:=(x-17) div 28;
qiy:=(407-y) div 28+1;
if not length(qizi[qix,qiy])>0 then
begin
img:=Tbitmap.Create;
qiimagelist.GetBitmap(num mod 2,img);
with Timage.Create(self.panel1) do
begin
top:=407-qiy*28;
left:=qix*28+17;
height:=22;
width:=22;
labelimg.top:=top;
labelimg.left:=left;
labelimg.Visible:=true;
parent:=self.Panel1;
picture.Assign(img);
transparent:=true;
end;
labelimg.BringToFront;
qizi[qix,qiy]:=qitypelist[num mod 2];
if not winny(qix,qiy) then inc(num);
end;
end;
function Tfiveform.winny(x, y:integer): boolean;
var
i,j:integer;
heng,shu,leftxie,rightxie:integer;
begin
heng:=0;
shu:=0;
leftxie:=0;
rightxie:=0;
result:=false;
for i:=0 to 5 do
begin
//求横向有多少个相同的棋子相连
if qizi[x+i,y]=qizi[x,y] then inc(heng);
if qizi[x-i,y]=qizi[x,y] then inc(heng);
//纵向
if qizi[x,y-i]=qizi[x,y] then inc(shu);
if qizi[x,y+i]=qizi[x,y] then inc(shu);
//左斜向
if qizi[x-i,y+i]=qizi[x,y] then inc(leftxie);
if qizi[x+i,y-i]=qizi[x,y] then inc(leftxie);
//右斜向
if qizi[x+i,y+i]=qizi[x,y] then inc(rightxie);
if qizi[x-i,y-i]=qizi[x,y] then inc(rightxie);
end;
if (heng>=6) or (shu>=6) or (leftxie>=6) or (rightxie>=6) then
begin
over:=true;
showmessage(qizi[x,y]+'胜出');
result:=true;
end;
end;
procedure Tfiveform.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
ctext:Rfivecommand;
begin
adata.Read(ctext,sizeof(ctext));
if ctext.command=Csendmsg then chatroom.Lines.Add(playerenemy.username+'说:'+ctext.text);
if ctext.command=Cputchess then
begin
putchess(ctext.x,ctext.y);
end;
end;
procedure Tfiveform.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
ctext:Rfivecommand;
begin
if key=13 then
begin
ctext.command:=Csendmsg;
ctext.text:=Tedit(sender).Text;
chatroom.Lines.Add(playerme.username+'说:'+Tedit(sender).Text);
Tedit(sender).Text:='';
self.IdUDPServer1.SendBuffer(playerenemy.IP,2555,ctext,sizeof(ctext));
end;
end;
procedure Tfiveform.FormShow(Sender: TObject);
var
img:Tbitmap;
begin
img:=Tbitmap.Create;
facelist.GetBitmap(playerenemy.face,img);
faceimg.Picture.assign(img);
img.free;
label1.Caption:=playerenemy.username;
label2.Caption:='我方执'+qitype+'子';
end;
procedure Tfiveform.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
ctext:Rcommandtext;
begin
mainform.Button2.caption:='备战';
ctext.command:=Cmodiwhatdoing;
ctext.num:=0;
//改变状态
mainform.idtcpclient1.WriteBuffer(ctext,sizeof(ctext));
mainform.idtcpclient1.WriteBuffer(mainform.user,sizeof(mainform.user));
//改分
ctext.command:=Cmodiuser;
if (num>3) and (not over) then
begin
ctext.num:=Cescape;
mainform.idtcpclient1.WriteBuffer(ctext,sizeof(ctext));
mainform.idtcpclient1.WriteBuffer(mainform.user,sizeof(mainform.user));
end;
if self.over then
begin
if self.qitype<>qitypelist[self.num mod 2] then ctext.num:=Cwin;
if self.qitype=qitypelist[self.num mod 2] then ctext.num:=Close1;
mainform.idtcpclient1.WriteBuffer(ctext,sizeof(ctext));
mainform.idtcpclient1.WriteBuffer(mainform.user,sizeof(mainform.user));
end;
idudpserver1.Bindings.Clear;;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -