Thema: Magische 21

Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Magische 21

  Alt 23. Jun 2013, 09:20
Nein, bitte nicht global ... vor allem dann, wenn es nicht notwendig ist.

Für das Spiel benötigt man einen Würfel (TDice) und einen Spieler (TPlayer) die man wie folgt definieren kann
Delphi-Quellcode:
unit Game;

interface

type
  TDice = class
  private
    FEyes : Integer;
  protected
    procedure SetEyes( const Value : Integer );
  public
    constructor Create;
    procedure Roll; virtual;
    property Eyes : Integer read FEyes;
  end;

  TPlayer = class
  private
    FSum : Integer;
  public
    procedure RollDice( ADice : TDice ); virtual;
    property Sum : Integer read FSum;
  end;

  TStandardDice = class( TDice )
  public
    procedure Roll; override;
  end;

implementation

{ TDice }

constructor TDice.Create;
begin
  inherited;
  Roll;
end;

procedure TDice.Roll;
begin
end;

procedure TDice.SetEyes( const Value : Integer );
begin
  FEyes := Value;
end;

{ TPlayer }

procedure TPlayer.RollDice( ADice : TDice );
begin
  ADice.Roll;
  FSum := FSum + ADice.Eyes;
end;

{ TStandardDice }

procedure TStandardDice.Roll;
begin
  inherited;
  SetEyes( Random( 6 ) + 1 );
end;

end.
und für das Spiel dann so benutzt
Delphi-Quellcode:
unit Main_ViewU;

interface

uses
  Game,

  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMain_View = class( TForm )
    DiceEyes_Label : TLabel;
    PlayerSum_Label : TLabel;
    RollDice_Button : TButton;
    procedure RollDice_ButtonClick( Sender : TObject );
    procedure FormCreate( Sender : TObject );
    procedure FormDestroy( Sender : TObject );
    procedure FormShow( Sender : TObject );
  private
    FDice : TDice;
    FPlayer : TPlayer;
    procedure ShowPlayer( APlayer : TPlayer );
    procedure ShowDice( ADice : TDice );
  public

  end;

var
  Main_View : TMain_View;

implementation

{$R *.dfm}
{ TForm1 }

procedure TMain_View.FormCreate( Sender : TObject );
begin
  FDice := TStandardDice.Create;
  FPlayer := TPlayer.Create;
end;

procedure TMain_View.FormDestroy( Sender : TObject );
begin
  FPlayer.Free;
  FDice.Free;
end;

procedure TMain_View.FormShow( Sender : TObject );
begin
  ShowPlayer( FPlayer );
  ShowDice( FDice );
end;

procedure TMain_View.RollDice_ButtonClick( Sender : TObject );
begin
  FPlayer.RollDice( FDice );
  ShowDice( FDice );
  ShowPlayer( FPlayer );
end;

procedure TMain_View.ShowDice( ADice : TDice );
begin
  DiceEyes_Label.Caption := IntToStr( ADice.Eyes );
end;

procedure TMain_View.ShowPlayer( APlayer : TPlayer );
begin
  PlayerSum_Label.Caption := IntToStr( APlayer.Sum );
end;

end.
und schon programmiert man so, wie das Spiel im wahren Leben auch funktioniert.
Der Spieler nimmt einen Würfel und würfelt FPlayer.RollDice( FDice );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (23. Jun 2013 um 09:23 Uhr)
  Mit Zitat antworten Zitat