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

📄 rltsvr.pas

📁 一般的数据库管理系统 uses Classes, SConnectEx, TltConst, ExtCtrls, MMSystem, Types, windows, TltLogic , Sy
💻 PAS
📖 第 1 页 / 共 4 页
字号:
    RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo].Settment := TotalValue;
    RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo].DateTime := Now;
    RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo].AutoValue := Round.Auto;
    DASaveRoundScordInfo(RoundScordInfosArray[Round.No].WheelInfos[Round.WheelNo]);

    WheelParams := GetWheelParams(State);

    for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
    begin
      rltInterpreter := SocketForm.GetrltInterpreter(I);
      rltInterpreter.CallSetWheelParams(WheelParams);
    end;
    Level2 := 2;

  end;
  for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
  begin
    rltInterpreter := SocketForm.GetrltInterpreter(I);
    rltInterpreter.CallSetRound;
  end;
//统计,结算分值
//记录到数据库
//改变记录到管理端
//改变各个客户端玩家的分数

end;

procedure TTltManager.DoTimer(Sender: TObject);
var
  I : integer;
  rltInterpreter : TrltServerInterpreter;
begin
  //状态机入口
  //更新当前时间
  //检测时间有效性(忽略)
  //改变游戏全局数据

  //更新客户端数据
{  FCountDown := (FTickCount - GetTickCount) div 1000;
  if (CountDown>=0) and (CountDown<=FBetTimeSet) then
  begin
    DoBeting;
  end else
  if (CountDown>FBetTimeSet) and (CountDown<= FBeforeWheelTimeSet) then
  begin
    DoBeforeWheel;
  end else
  if (CountDown>FBeforeWheelTimeSet) and (CountDown<= FWheelingTimeSet) then
  begin
    DoWheeling;
  end else
  if (CountDown>FWheelingTimeSet) and (CountDown<= FWheelEndSet) then
  begin
    DoScore;
  end;
  if (CountDown> FWheelEndSet) then
  begin
    DoWheelEnd;
  end;
}

//  UpdateCountDown;
  Update;
{    for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
    begin
      rltInterpreter := SocketForm.GetrltInterpreter(I);
      rltInterpreter.CallSetCountDown;
    end;}

end;

procedure TTltManager.DoWheelEnd;
var
  I : integer;
  rltInterpreter : TrltServerInterpreter;
begin
  if FPauseAtRoundEnd then SetRoundState(rsStop)
  else InitRound;
  for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
  begin
    rltInterpreter := SocketForm.GetrltInterpreter(I);
    rltInterpreter.CallSetRound;
  end;
// 重置局状态
//  CountDown
end;

procedure TTltManager.DoWheeling;
var
  I : integer;
  rltInterpreter : TrltServerInterpreter;
begin
  if Level2 = 1 then
  begin
    WheelParams := GetWheelParams(State);
    for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
    begin
      rltInterpreter := SocketForm.GetrltInterpreter(I);
      rltInterpreter.CallSetWheelParams(WheelParams);
    end;
    Level2 := 2;
  end;

  for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
  begin
    rltInterpreter := SocketForm.GetrltInterpreter(I);
    rltInterpreter.CallSetRound;
  end;
//提示客户端进入轮盘显示
//等待客户端完成轮盘旋转
end;

function TTltManager.GetBetCount: TBatArray;
begin

end;

function TTltManager.GetCountDown: integer;
begin
  Result := Round.CountDown;
end;

function TTltManager.GetOpenNumber: integer;
begin
  Result := Round.WheelResult;
end;

function TTltManager.GetPlayerByID(PlayerID: String): TPlayer;
var
  I : integer;
  Player : TPlayer;
begin
  Result := nil;
  for I := 0 to FPlayerList.Count -1 do
  begin
    Player := TPlayer(FPlayerList[i]);
    if PlayerID = Player.ID then
    begin
      Result := Player;
      Exit;
    end;
  end;
end;
function TTltManager.GetClientByPlayer(Player : TPlayer) : TTltClient;
var
  I : integer;
  Client : TTltClient;
begin
  Result := nil;
  for I := 0 to FPlayerList.Count -1 do
  begin
    Client := TTltClient(FTltClients[i]);
    if Client.HasPlayer(Player) then
    begin
      Result := Client;
      Exit;
    end;
  end;

end;

function TTltManager.GetState: TRoundState;
begin
  Result := Round.State;
end;

function TTltManager.GetColorIndex(Num : integer): integer;
begin
  result := -1;
  case Num of
    1, 3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36:
      Result := 0;
    2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35:
      Result := 1;
    0: Result := 2;
    else Result := -1;
  end;
end;

procedure TTltManager.InitRound;
begin
  FPauseAtRoundEnd := false;
  FTickCount := GetTickCount;
  FWheelStartTickCount := FTickCount;
  FillChar(FFlag, sizeof(FFlag), #0);
  Round.CountDown := FCountDown;
  Round.State :=  rsBeting;
  Round.Main := FRoundMain;
  if FTimeSettingModified then UpdateTimeSetting;
end;

function TTltManager.LoginPlayer(APlayer: TPlayer): boolean;
var
  Player : TPlayer;
  I, Index : integer;
begin
  I := 0;
  while I < FPlayerList.Count do
  begin
    if TPlayer(FPlayerList[i]).ID = APlayer.ID then
    begin
      LogoffPlayer(APlayer.ID);
    end else inc(I);
  end;
  FPlayerList.Add(APlayer);
  APlayer.State := psActive;
  APlayer.Modified := true;
end;

function TTltManager.LoginPlayer(PlayerID, Password: String; AClient: TtltClient): boolean;
var
  Player : TPlayer;
  Index : integer;
begin
  Result := false;
  Player := TPlayer.Create;
  try
    Player.ID := PlayerID;
    if not DALoadPlayer(Player) then
    begin
      Result := false;
      Exit;
    end;
    if Password = Player.Password then
    begin
      Result := true;
      AClient.AddPlayer(Player);
      LoginPlayer(Player);
    end;

  finally
    if not Result then Player.Free;
  end;

end;

procedure TTltManager.LogoffPlayer(PlayerID: String);
var
  Player : TPlayer;
begin
  Player := GetPlayerByID(PlayerID);
  if Player<>nil then
  begin
    FPlayerList.Remove(Player);
    Player.Client.RemovePlayer(Player);
    DASavePlayer(Player);
    Player.Free;
  end;
end;

function TTltManager.GetRandomNumByColor(ColorIndex : integer): integer;
const Nums : array[0..36] of integer =( 1, 3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36,
    2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35,0);
begin
  Result := -1;
  case ColorIndex of
  0:begin
    Result := Nums[random(16)];
  end;
  1:begin
    Result := Nums[random(16)+16];
  end;
  2:begin
    Result := 0;
  end;
  end;
end;

function TTltManager.NextState: TRoundState;
begin
  with Round do
  case State of
    rsPaused:
    begin
      State := rsBeting;
    end;
    rsDemo:
    begin
      State := rsBeting;
    end;
    rsBeting:
    begin
      State := rsBeforeWheel;
    end;
    rsBeforeWheel:
    begin
      State := rsWheeling;
    end;
    rsWheeling:
    begin
      State := rsScore;
    end;
    rsScore:
    begin
      State := rsBeting;
      InitRound;
    end;
  end;
  Level2 :=1;  
end;

procedure TTltManager.RemoveClient(Client: TTltClient);
begin
  if not Assigned(Client) then Exit;
  while Client.PlayerList.Count>0 do
  begin
    LogoffPlayer(TPlayer(Client.PlayerList[0]).ID);
  end;
  FTltClients.Remove(Client);
end;

procedure TTltManager.ResetWheel;
begin
  InitRound;
end;

function TTltManager.SetOpenNumber(ANum: integer): integer;
begin
  Round.WheelResult := ANum;
end;

procedure TTltManager.StartRound;
begin


end;
procedure TTltManager.Update;
var
  NowTime : DWord;
  DltTime : DWord;
  function ChkTime: boolean;
  begin
    NowTime := GetTickCount;
    DltTime := NowTime - FTickCount;
    if DltTime<0 then
    begin
      DltTime := 1000;
      NowTime := 1000;
      FTickCount := 0
    end;
    if DltTime > 20000 then //系统超时,强制重启本轮
    begin
      ResetWheel;
      Result := false;
      Exit;
    end;
    FTickCount := NowTime;

    Result := True;
  end;
  function UpDateState: boolean ;
  begin//计算状态变更
    with TimeSetting do
    begin
      if (state = rsBeting) and (Round.CountDown >= BetTimeSet) then NextState
      else
      if (state = rsBeforeWheel) and (Round.CountDown >= BeforeWheelTimeSet) then NextState
      else
      if (state = rsWheeling) and (Round.CountDown >= WheelingTimeSet) then NextState
      else
      if (state = rsScore) and (Round.CountDown >= ScoreTimeSet) then NextState;

    end;
  end;
const
  CRedBet = 0;
  CBlackBet = 1;
  CGreenBet = 2;
var
  I : integer;
begin
  if NeedResetPlayerBet then ResetPlayerBet;

  with Round do
  begin
    if not ChkTime then Exit; //检查时间
    if State in [rsBeting..rsScore] then
      Round.CountDown := (FTickCount - FWheelStartTickCount ) div 1000;

    if state = rsBeting then DoBeting;
    if State = rsBeforeWheel then DoBeforeWheel;
    if State = rsWheeling then DoWheeling;
    if State = rsScore then DoScore;
    if State = rsStop then DoStop;
    if State = rsPaused then DoPaused;

  //  if State = rsBeginToWait then DoBeginToWait;
    UpDateState;
    FTickCount := NowTime; //累加时间
  end;

  //更新下注量
  FillChar(BetCount, sizeof(BetCount), #0);
  for i := 0 to FPlayerList.Count -1 do
  begin
    with TPlayer(FPlayerList[i]) do
    begin
      inc(BetCount[btRed], Bet[btRed]);
      inc(BetCount[btBlack], Bet[btBlack]);
      inc(BetCount[btGreen], Bet[btGreen]);
    end;
  end;
  //

  Log;
//  inc
end;

procedure TTltManager.UpdateClients(Proc: TClientProc);
var
  I : integer;
  rltInterpreter : TrltServerInterpreter;
begin
  if Assigned(Proc) then
  begin
    for I := 0 to SocketForm.ConnectionList.Items.Count -1 do
    begin
      rltInterpreter := SocketForm.GetrltInterpreter(I);
      rltInterpreter.CallProc(Proc);
    end;
  end;
end;

procedure TTltManager.UpdateCountDown;
begin
//  FWheelCounter := GetTickCount - FWheelStartTickCount]
  //inc(FCountDown);
end;

procedure TTltManager.UpdateCounter;
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -