⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fiveformpas.pas

📁 用于开发税务票据管理的软件
💻 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 + -