📄 pmain.pas
字号:
Cmid_STC_GiveTabPlayerList: Fmain.RevTabPlayerList(ICon); //接收tab内的玩家列表
CMid_CTS_DisConn: RevDisconn; //断开连接
Cmid_STC_GiveCards: RevGiveCards(ICon); //获取随机数组
Cmid_STC_GiveBeginPlayerIdx: RevGetBeginPlayerIdx(ICon); //获取开始玩家索引
Cmid_STC_UserSendCards: RevPlayerSendCards(ICon); //用户出牌
Cmid_STC_UserPass: RevPlayerPass(ICon); //用户跳过
Cmid_CTS_Chat: RevPlayerChat(ICon); //用户聊天
Cmid_CTS_GetOnlinesUser: RevOnlinesUsers(ICon);
end; // case
end;
procedure TReciveThread.Execute;
begin
while not Terminated do begin
try
if Fmain.Appstate = CappstateNormal then
DoExecute(Fmain.GameClient);
except
end;
end; // while
end;
procedure TReciveThread.RevCreateTab(ICon: TIdTCPClient);
var
Ibuff: RCTS_CreateTab_Resp;
begin
ICon.ReadBuffer(Ibuff, Sizeof(Ibuff));
Fmain.TabID := Ibuff.tabid;
Fmain.Tabing := True;
Synchronize(SHowGameForm);
end;
procedure TReciveThread.RevDisconn;
begin
Fmain.Appstate := CappStateStop;
Fmain.GameClient.Disconnect;
Application.Terminate;
end;
procedure TReciveThread.RevGetBeginPlayerIdx(Icon: TIdTCPClient);
begin
Icon.ReadBuffer(LGbuff, sizeof(LGbuff));
Synchronize(BeginGame);
end;
procedure TReciveThread.RevGiveCards(Icon: TIdTCPClient);
var
Lbuff: RSTC_GiveCards;
begin
Fgame.GameCreate;
Icon.ReadBuffer(Lbuff, sizeof(Lbuff));
Icon.ReadBuffer(Fgame.GMyGame.GetRandom(Lbuff.CardsSize div sizeof(byte))^, Lbuff.CardsSize);
Fgame.GMyGame.MakeCards(False); //产生牌局
Fgame.GMyGame.CardStackPop; //进盏
end;
procedure TReciveThread.RevJoinTab(ICon: TIdTCPClient);
var
Ibuff: RCTS_JoinTab_RESP;
begin
ICon.ReadBuffer(Ibuff, Sizeof(Ibuff));
Fmain.TabID := Ibuff.TabId;
Fmain.PlayerIdxIntab := Ibuff.PlayerINDEX;
Fmain.Tabing := True;
Synchronize(SHowGameForm);
end;
procedure TReciveThread.RevLeaveTab(ICon: TIdTCPClient);
begin
Synchronize(ShowMainForm);
end;
procedure TReciveThread.RevOnlinesUsers(Icon: TIdTCPClient);
var
Lbuff: RCTS_GetOnlinesUser;
begin
Fmain.GameClient.ReadBuffer(Lbuff, Sizeof(Lbuff));
Fmain.RzFieldStatus1.Tag := Lbuff.Count;
Fmain.RzFieldStatus1.Caption := Format('在线玩家:%d个', [Fmain.RzFieldStatus1.Tag]);
// Synchronize(SynDrawOnlineUsersCount);
end;
procedure TReciveThread.RevPlayerChange(Icon: TIdTCPClient);
begin
Icon.ReadBuffer(LGbuffPlayerIO, sizeof(LGbuffPlayerIO));
case LGbuffPlayerIO.Kind of
PlayerIn: begin
Inc(Fmain.GTabPlayerArrCount);
if Fmain.GTabPlayerArrCount >= length(Fmain.GTabPlayerArr) then
Setlength(Fmain.GTabPlayerArr, length(Fmain.GTabPlayerArr) + 1);
Fmain.GTabPlayerArr[Fmain.GTabPlayerArrCount - 1] := LGbuffPlayerIO.Player;
Synchronize(SynDrawPlayerList);
end;
PlayerOut: begin
Dec(Fmain.GTabPlayerArrCount);
DynArrayDelete(Fmain.GTabPlayerArr, sizeof(LGbuffPlayerIO.Player), LGbuffPlayerIO.Idx, 1);
SynDrawPlayerList;
Synchronize(SynDrawPlayerList);
end;
PlayerReady: begin
Fmain.GTabPlayerArr[LGbuffPlayerIO.Idx].ReadGame := LGbuffPlayerIO.State;
Fgame.Rzlistplayer.Items[LGbuffPlayerIO.Idx].ImageIndex:=1;
end;
PlayernotReady: begin
Fmain.GTabPlayerArr[LGbuffPlayerIO.Idx].ReadGame := LGbuffPlayerIO.State;
Fgame.Rzlistplayer.Items[LGbuffPlayerIO.Idx].ImageIndex:=0;
end;
end;
end;
procedure TReciveThread.RevPlayerChat(Icon: TIdTCPClient);
begin
Icon.ReadBuffer(LGbuffchat, sizeof(LGbuffChat));
SynAddMemo;
Application.ProcessMessages;
end;
procedure TReciveThread.RevPlayerPass(Icon: TIdTCPClient);
var
IBuff: RSTC_PlayerPass;
begin
ICon.ReadBuffer(Ibuff, sizeof(Ibuff));
Fgame.GMyGame.PlayerArr[IBuff.PLayerIdx].PlayerInfo^.PassCurrGame:=True;
Synchronize(SynSHowNext);
end;
procedure TReciveThread.RevPlayerSendCards(Icon: TIdTCPClient);
begin
ICon.ReadBuffer(LGsendCard, sizeof(LGsendCard));
Synchronize(SynSendCard);
end;
procedure TReciveThread.RevResetPlayerIdx(ICon: TIdTCPClient);
var
Ibuff: RSTC_ReSetPalyerIDX;
begin
ICon.ReadBuffer(Ibuff, sizeof(Ibuff));
Fmain.PlayerIdxIntab := Ibuff.NewIdx;
end;
procedure TReciveThread.RevTabChanged(ICon: TIdTCPClient);
var
Lbuff: RSTC_TabChange;
LTep: Cardinal;
begin
ICon.ReadBuffer(Lbuff, Sizeof(Lbuff));
Ltep := Fmain.GetWaiteTab(Lbuff.Param);
case Lbuff.Kind of //
TabAdd: begin
inc(Fmain.GWaiteTabArrCount);
Setlength(Fmain.GWaiteTabArr, Fmain.GWaiteTabArrCount);
Fmain.GWaiteTabArr[Fmain.GWaiteTabArrCount - 1] := Lbuff.WaiteTab;
Synchronize(SynDrawTabList);
end;
TabFree: begin
DynArrayDelete(Fmain.GWaiteTabArr, sizeof(Lbuff.WaiteTab),
LTep, 1);
Fmain.GameTabList.Items.Delete(LTep);
Synchronize(SynDrawTabList);
end;
TabAddPlayer: Inc(Fmain.GWaiteTabArr[LTep].TabPlayerCount);
TabDeletePlayer: Dec(Fmain.GWaiteTabArr[LTep].TabPlayerCount);
end; // case
end;
procedure TFmain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DisConn(GameClient);
Hide;
end;
procedure TReciveThread.SHowGameForm;
begin
Fmain.Hide;
Fgame.Show;
end;
procedure TReciveThread.ShowMainForm;
begin
Fmain.GameTabList.Clear;
Fmain.GetTabList(Fmain.GameClient);
Fmain.SendHead(Fmain.GameClient, Cmid_CTS_GetOnlinesUser);
Fgame.Hide;
Fmain.Show;
end;
procedure TReciveThread.SynAddMemo;
begin
Fgame.AddShow(Format('%s说: ' + LGbuffChat.Content,
[Fmain.GTabPlayerArr[LGbuffChat.PlayerID].Name]));
end;
procedure TReciveThread.SynDrawPlayerList;
var
I: Integer;
Ltep: TListItem;
begin
Fgame.Rzlistplayer.Clear;
for I := 0 to high(FMain.GTabPlayerArr) do begin // Iterate
Ltep := Fgame.Rzlistplayer.Items.Add;
Ltep.Caption := FMain.GTabPlayerArr[i].Name;
if not FMain.GTabPlayerArr[i].ReadGame then
Ltep.ImageIndex := 0
Else Ltep.ImageIndex := 1;
end; // for
end;
procedure TReciveThread.SynDrawTabList;
begin
Fmain.PlantTabList;
end;
procedure TReciveThread.SynSendCard;
begin
Fgame.SendCards(LGSendCard);
end;
procedure TReciveThread.SynSHowNext;
var
Ltep: byte;
begin
Ltep := Fgame.GMyGame.CheckOutWined;
if Ltep <> 250 then Fgame.ShowNext
else Fgame.PlayerWined(Ltep);
end;
procedure TFmain.RzBitBtn2Click(Sender: TObject);
begin
if not Tabing then begin
Tabing := CreateTab(GameClient, EtabName.Text, sgamekind(ord(EgameKind.ItemIndex)));
end;
end;
procedure TFmain.RzBitBtn1Click(Sender: TObject);
begin
if not Tabing then begin
if GameTabList.Selected <> nil then begin
JionTab(GameClient, GWaiteTabArr[GameTabList.Selected.Index].TabID);
end
else Application.MessageBox('请选择一个您要加入的桌子,如果没有选择您可以自己创建一个', '说明');
end;
end;
procedure TFmain.RzButton2Click(Sender: TObject);
begin
Close;
end;
procedure TFmain.GameTabListSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
begin
GameTabList.Hint := Format('桌子名:%s ID:%d 类型:%s 现在有玩家:%d 最大玩家数:%d',
[GwaiteTabarr[item.Index].TabName, GwaiteTabarr[item.Index].TabID,
TranstrlGameState(GwaiteTabarr[item.Index].TabKind),
GwaiteTabarr[item.Index].TabPlayerCount, GwaiteTabarr[item.Index].TabMaxCount]);
end;
procedure TFmain.RzButton1Click(Sender: TObject);
begin
application.MessageBox('<^_^小草的对战平台V1.00^_^>' + #13 + '作者:马敏钊' + ' QQ:22900104'
+ #13 + '强大的面向对象设计,灵活的指针运用,让这个平台具备了高性能和高扩充性' + #13 +
'因为时间关系现在暂时只做了个梭哈的游戏,不过还是希望你能喜欢它^O^ 再次的感谢帮偶测试的朋友', '关于');
end;
procedure TFmain.GameTabListDblClick(Sender: TObject);
begin
if GameTabList.Selected <> nil then RzBitBtn1.Click;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -