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

📄 rltgame.pas

📁 一般的数据库管理系统 uses Classes, SConnectEx, TltConst, ExtCtrls, MMSystem, Types, windows, TltLogic , Sy
💻 PAS
📖 第 1 页 / 共 3 页
字号:
            Player.UserID := '';
            Player.money := 0;
            Player.State := psNoBody;
            State := ppsUnknow;
          end;
        end else begin
          State := ppsLoginError;
          InputCount := 0;
//          FouceID := 2;
        end;
      end;
    end;
    ppsLoginError:
    begin
      inc(InputCount);
      if (InputCount>1000) then begin
        State := ppsNoBody;
        UserName := '';
        Password := '';
      end;
      if ClickedButton(CancelButtomRect) then begin
        State := ppsLogining;
        FouceID := 2;
      end;
    end;
    ppsLoginOtherWay, ppsUnknow:
    begin
      inc(InputCount);
      if (InputCount>300) or ClickedButton(CancelButtomRect) then begin
        State := ppsNoBody;
        UserName := '';
        Password := '';
      end;
    end;
    ppsActive:
    begin
      if ClickedButton(LogoutButtomRect) then begin //logout
        TltInterpreter.CallLogoffPlayer(Player.UserID);
        State := ppsNoBody;
        UserName := '';
        Password := '';
        Player.Clear;
      end;
      if ClickedButton(RBox) then begin
        Player.RBet := Player.RBet + ChipPanel.SelectedChipValue;
        MainForm.PlaySoundBetting;
      end;
      if RClickedButton(RBox) then begin
        Player.RBet := Player.RBet - ChipPanel.SelectedChipValue;
        MainForm.PlaySoundBetting;
      end;
      if ClickedButton(BBox) then begin
        Player.BBet := Player.BBet + ChipPanel.SelectedChipValue;
        MainForm.PlaySoundBetting;
      end;
      if RClickedButton(BBox) then begin
        Player.BBet := Player.BBet - ChipPanel.SelectedChipValue;
        MainForm.PlaySoundBetting;
      end;
      if ClickedButton(GBox) then begin
        Player.GBet := Player.GBet + ChipPanel.SelectedChipValue;
        MainForm.PlaySoundBetting;
      end;
      if RClickedButton(GBox) then begin
        Player.GBet := Player.GBet - ChipPanel.SelectedChipValue;
        MainForm.PlaySoundBetting;
      end;
      if Player.Modified then begin
        Player.Update;
      end;
    end;
  end;
end;

{ TPlayer }

procedure TPlayer.Clear;
begin
  UserID := '';
  Password := '';
  FRBet := 0;
  FBBet := 0;
  FGBet := 0;
  Modified := false;
  State := psNoBody;
end;

procedure TPlayer.ClearBets;
begin
  FRBet := 0;
  FBBet := 0;
  FGBet := 0;
  Modified := true;
end;

function TPlayer.GetBBet: LongInt;
begin
  Result := FBBet;
end;

function TPlayer.GetGBet: LongInt;
begin
  Result := FGBet;
end;

function TPlayer.GetRBet: LongInt;
begin
  Result := FRBet;
end;

procedure TPlayer.SetBBet(const Value: LongInt);
begin
  if FBBet <> Value then
  begin
    FBBet := Value;
    if FBBet <0 then FBBet := 0;
    Modified := true;
  end;
end;

procedure TPlayer.SetGBet(const Value: LongInt);
begin
  if FGBet <> Value then
  begin
    FGBet := Value;
    if FGBet <0 then FGBet := 0;
    Modified := true;
  end;

end;

procedure TPlayer.SetRBet(const Value: LongInt);
begin
  if FRBet <> Value then
  begin
    FRBet := Value;
    if FRBet <0 then FRBet := 0;
    Modified := true;
  end;

end;

procedure TPlayer.Update;
begin
  if Modified then
    TltInterpreter.CallBet(Self);
  Modified := false;

end;

{ TChipPanel }

constructor TChipPanel.Create;
var
  I : integer;
begin
//  ClientRect := Rect(0, 0, 332, 144);
  ClientRect := Rect(0, 0, 301, 104);
  for I := 0 to Length(ChipRect) -1 do begin
//    ChipRect[I] := Rect( I * 33 + 75, 30 + 8, 33 + I * 33 + 75, 65 + 8 );
    ChipRect[I] := Rect( I * 40 + 60, 30 + 8, 40 + I * 40 + 60, 65 + 8 );
  end;
end;

function TChipPanel.OverButton(CursorPos: TPoint; R: TRect): boolean;
var
  TmpR : TRect;
begin
  TmpR := R;
  OffsetRect(TmpR, BoundsRect.Left, BoundsRect.Top);
  if PtInRect(TmpR, CursorPos) then
    Result := true
  else
    Result := false;
end;


procedure TChipPanel.Draw(DestSurface, ChipPanelSurface, ItemsSurface: TDirectDrawSurface);
var
  I : integer;
  SR : TRect;
  X, Y : integer;
begin
  //draw panel;
  DestSurface.Draw(BoundsRect.Left, BoundsRect.Top, ClientRect, ChipPanelSurface, true);
  //draw chips
//  ItemsSurface
  for I := 0 to Length(ChipRect) -1 do
  begin
    X := 66; Y := 21;
    SR := Rect(X,Y+35*I, X+33, Y + 35 + 35 *I);
    if I = FSelectedChip then
    begin
      X:= 33;
      SR := Rect(X,Y+35*I, X+33, Y + 35 + 35 *I)
    end
    else if OverButton(FCursorPos, ChipRect[I])then
      SR := Rect(0, Y+35*I, 33, Y+ 35 + 35 *I);
    DestSurface.Draw(chiprect[I].Left + BoundsRect.Left, chipRect[I].Top + BoundsRect.Top , SR, ItemsSurface, true);
  end;
end;

function TChipPanel.GetSelectedChipValue: longint;
const
  ChipValue : array [0..4] of longint = (50, 100, 500, 1000, 5000);
begin
  Result := chipValue[FSelectedChip];
end;

procedure TChipPanel.SetSelectedChip(const Value: longint);
begin
  FSelectedChip := Value;
end;

procedure TChipPanel.Update(CursorPos: TPoint; MouseState: byte;
  Key: Word);
var
  I : integer;
  function ClickedButton(R : TRect): boolean ;
  begin
    if (MouseState = 1) and OverButton(CursorPos, R) then
      Result := True
    else
      Result := False;
  end;
begin
  FCursorPos := CursorPos;
  for I := 0 to Length(ChipRect) -1 do
  begin
    if ClickedButton(ChipRect[I]) then
    begin
      SelectedChip := I;
      MainForm.PlaySoundSelChip;
    end;

  end;
end;

{ TTimePanel }

constructor TTimePanel.Create;
begin
  Color := clWhite;
//  ClientRect := Rect(0, 0, 332, 144);
  ClientRect := Rect(0, 1, 301, 103);
{  RoundLabelRect := Rect(0, 5, 301, 48);
  TimeLabelRect := Rect(0, 35, 301, 114);}
  TimeLabelRect := Rect(0, 10, 301, 130);
end;

procedure TTimePanel.Draw(DestSurface, PanelSurface, ItemsSurface : TDirectDrawSurface);
  procedure DrawRectText(R : TRect; S : String; Size : integer = 9);
  var
    CR : TRect;
  begin
    CR := R;
    OffsetRect(CR, BoundsRect.Left, BoundsRect.Top);
    with DestSurface.Canvas do begin
      Brush.Style := bsClear;
      Font.Color := Self.Color;
      Font.Name := '';
      Font.Charset := ANSI_CHARSET;
      Font.Size := Size;
      Brush.Style := bsClear;
      windows.DrawText(Handle, pchar(S),Length(S),CR,DT_CENTER or DT_VCENTER);
//      DrawText(CR, S);
      Release;
    end;    //Draw Foucus;
  end;
begin
  //draw panel;
  DestSurface.Draw(BoundsRect.Left,BoundsRect.Top,ClientRect,PanelSurface,true);
  Color := clWhite;
  DrawRectText(RoundLabelRect, '第'+ IntToStr(rlt.Round.No) +'局', 24);
  if rlt.CountDown<=rlt.TimeSetting.BeforeWheelTimeSet-rlt.TimeSetting.BetTimeSet then
    Color := TColor($4444FF);
  DrawRectText(TimeLabelRect, FormatFloat('00',rlt.CountDown),60);
end;

procedure TTimePanel.Update(CursorPos: TPoint; MouseState: byte;
  Key: Word);
begin
  Time := rlt.CurrentRoundNo;
end;

{ THistoryPanel }

constructor THistoryPanel.Create;
begin
  ClientRect := Rect(0, 0, 800-144-15, 600-20-229);
end;

procedure THistoryPanel.Draw(DestSurface, PanelSurface, ItemsSurface : TDirectDrawSurface);
var
  I ,J: integer;
  function 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 DrawRectText(R : TRect; S : String; Size : integer = 9);
  var
    CR : TRect;
  begin
    CR := R;
    OffsetRect(CR, BoundsRect.Left, BoundsRect.Top);
    with DestSurface.Canvas do
    begin
      Font.Charset := DEFAULT_CHARSET;
      Brush.Style := bsClear;
      Font.Color := clWhite;
      Font.Name := 'Technic';
      Font.Size := Size;
      Brush.Style := bsClear;
      windows.DrawText(Handle, pchar(S),Length(S), CR, DT_CENTER or DT_VCENTER);
//      DrawText(CR, S);
      Release;
    end;    //Draw Foucus;
  end;
var
    CBoundsRect ,R, DR : TRect;

begin
  //draw panel;
  CBoundsRect := BoundsRect;

  DestSurface.Draw(BoundsRect.Left, BoundsRect.Top, ClientRect, PanelSurface, true);
  for I := 1 to 10 do
  for J := 0 to 4 do
  begin
    if (rlt.Round.Scord.Number[J * 10 + I]>=0) then
    begin
      R := Rect(
        200+41*GetColorIndex(rlt.Round.Scord.Number[J * 10 + I ]),
        0,
        200+41*GetColorIndex(rlt.Round.Scord.Number[J * 10 + I ])+41,
        33);
      DR := Rect(
        I * 42+ 103 - 42,
        J * 34 + 81 + 3,
        I * 42+ 103,
        J * 34 + 81 + 34);
      if (rlt.Round.Scord.Count>=J * 10 + I ) then
      begin
        DestSurface.Draw(I * 42+ 103 + BoundsRect.Left - 42, J * 34 + 81 + BoundsRect.Top,
          R, ItemsSurface,true);
        DrawRectText(DR, IntToStr(rlt.Round.Scord.Number[J * 10 + I ]), 18);
      end;
    end;
  end;
  BoundsRect := CBoundsRect;

end;


procedure THistoryPanel.Update(CursorPos: TPoint; MouseState: byte;
  Key: Word);
begin

end;

initialization
  rlt := TRlt.Create;
  for ii := 0 to 3 do
  begin
    Players[ii] := TPlayer.Create;
    PlayerPanel[ii] := TPlayerPanel.Create(players[ii]);
    PlayerPanel[ii].ClientRect := Rect(0,0, 250, 102);
    PlayerPanel[ii].BoundsRect := Rect(0,0, 250, 102);
  end;


  OffsetRect(PlayerPanel[0].BoundsRect, 0, 0);
  OffsetRect(PlayerPanel[1].BoundsRect, 800-250, 0);
  OffsetRect(PlayerPanel[2].BoundsRect, 0, 600-102);
  OffsetRect(PlayerPanel[3].BoundsRect, 800-250, 600-102);

  ChipPanel := TChipPanel.Create;
//  ChipPanel.BoundsRect := Rect(239, 600-80, 239+322, 600);
  ChipPanel.BoundsRect := Rect(249, 600-104, 249+301, 600);

  TimePanel := TTimePanel.Create;
//  TimePanel.BoundsRect := Rect(239, 0, 800 - 114 , 144 );
  TimePanel.BoundsRect := Rect(249, 0, 249+301 , 144 );

  HistoryPanel := THistoryPanel.Create;
  HistoryPanel.BoundsRect := Rect(249, 144, 800 , 600 - 144 );;

finalization

  for ii := 0 to 3 do begin
    Players[ii].Free;
    PlayerPanel[ii].Free;
  end;
  ChipPanel.Free;
  rlt.Free;

end.

⌨️ 快捷键说明

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