Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#6

AW: Kleines Problem mit Grundlagen // Minigame

  Alt 7. Jun 2011, 17:04
Mal so hingeworfen, analog zu meinem vorherigen Post....
Wenn jemand einen (Denk)-Fehler sieht, schreien:

Delphi-Quellcode:

var
  TotalPoints : Integer = 0 ;
  Wuerfel : array[1..6] of Byte ;

procedure WuerfelnUndAuswerten();
var
  FPanel : TPanel ;
  FValue : Integer ;
  FPaschCount : Integer ;
  FStrassenCount : Integer ;
  FStrassenString : string ;
  i: Integer ;
begin

   // Erstmal würfeln
   TotalPoints := 0 ;
   Randomize() ;
   for i := Low(Wuerfel) to High(Wuerfel) do
   begin
      Wuerfel[i] := 0 ;
      FPanel := TPanel(FindComponent('Panel'+IntToStr(i))) ;
      FPanel.Caption := IntToStr(Random(6)+1) ;
   end;

   // Einzelne Punkte für Augen auswerten und Anzahl gleicher Würfel erhöhen
   for i := Low(Wuerfel) to High(Wuerfel) do
   begin
      FPanel := TPanel(FindComponent('Panel'+IntToStr(i))) ;
      FValue := StrToInt(FPanel.Caption) ;

      // Würfel-Array-Index für den gewürfelten Wert erhöhen
      Inc(Wuerfel[FValue]) ;

      // Punkte für 1 und 5 hinzufügen
      case FValue of
         1: TotalPoints := TotalPoints + 100 ;
         5: TotalPoints := TotalPoints + 50 ;
      end;
   end;

   // Auswertung von 3er-Päschen und Strassen
   FStrassenCount := 0 ;
   FPaschCount := 0 ;
   for i := Low(Wuerfel) to High(Wuerfel) do
   begin

     // 3er-Päsche auswerten und Puntke hinzufügen
     // ((Anzahl Würfel div 3) * Augenzahl) * 100
     FValue := (((Wuerfel[i] div 3) * i) * 100) ;
     TotalPoints := TotalPoints + FValue ;
     if (FValue > 0) then FPaschCount := FPaschCount + (Wuerfel[i] div 3);

     // Wenn der Wert > 0 ist, den "Strassenzähler" eins hochsetzen, ansonsten annullieren
     if (Wuerfel[i] = 0) then
       FStrassenCount := 0
     else
       Inc(FStrassenCount) ;

   end;

   // Strassen / Kniffel auswerten
   case FStrassenCount of

     4:
     begin
       FStrassenString := 'kleine Strasse' ;
       TotalPoints := TotalPoints + 2000 ;
     end;

     5:
     begin
       FStrassenString := 'grosse Strasse' ;
       TotalPoints := TotalPoints + 2000 ;
     end;
     
     6:
     begin
       FStrassenString := 'Kniffel!' ;
     end;

     else
        FStrassenString := 'keine' ;

   end;

   Label1.Caption := 'Punkte: ' + IntToStr(TotalPoints) ;
   Label2.Caption := 'Anzahl 3er-Päsche: ' + IntToStr(FPaschCount) ;
   Label3.Caption := 'Strasse: ' + FStrassenString ;
end;
Natürlich kann man das im späteren Verlauf eleganter machen, ohne Panel-Caption-Umwandlungen, also dass du zuerst rein rechnerisch würfelst und dann erst am Schluss das ganze in die GUI jagst, aber das ist dir überlassen
Soll ja erstmal nur ein Denkanstoss sein und ich bin von deinem Ausgangspunkt ausgegangen: 6 Zahlen als Captions auf den Panels


Edit: Projekt angehängt
Angehängte Dateien
Dateityp: zip wuerfeln.zip (267,8 KB, 2x aufgerufen)

Geändert von blackfin ( 7. Jun 2011 um 17:25 Uhr)
  Mit Zitat antworten Zitat