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

📄 pmain.pas

📁 商业性对战平台,功能强大,能进行多方对战!!有部分是用汇编写的.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    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 + -