AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mischalgorithmus Fehler

Ein Thema von Matze1848 · begonnen am 26. Mär 2011 · letzter Beitrag vom 27. Mär 2011
Antwort Antwort
Matze1848

Registriert seit: 26. Mär 2011
6 Beiträge
 
#1

Mischalgorithmus Fehler

  Alt 26. Mär 2011, 19:26
ich hab mir das mit der liste zu herzen genommen und erstmal (ohne skat oder so) ein mischalgorithmus erstellt, der in ein Memofeld schreibt.

procedure TForm1.Button1Click(Sender: TObject);
var Karten: Integer;
Ausgabe: String;
x : Integer;
Liste1: TStringList;
begin
Memo1.Lines.Clear;
Randomize;
for x:= 1 to 32 do
begin
Karten:=Random(32)+1;
Liste1:=TStringList.Create;

if Karten=1 then
begin
Ausgabe:='Kreuz Bube';
Liste1.insert(1,'1');
end

[...]

else if Karten=32 then
begin
Ausgabe:='Karo 7';
Liste1.insert(32,'32');
end;

Memo1.Lines.Add(Ausgabe);
end;
Liste1.Free;
end;




Ich krieg jetzt aber leider, nachdem ich das Programm kompiliert habe den Fehler
'List index out of bounds(irgendeine random zahl)'.
Woran kann das liegen, wie kann ich das beheben?

Und noch eine Frage. Mit dem Mischen, werden da ja doppelte angezeigt, also zb. Herz10 doppelt und karoKönig 4mal. Wie behebe ich das, sodass jede nur einmal vorhanden ist?
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Mischalgorithmus Fehler

  Alt 26. Mär 2011, 23:44
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);
type
  TKarten = (
    Herz_7, Herz_8, Herz_9, Herz_10, Herz_Bube, Herz_Dame, Herz_Koenig, Herz_Ass,
    Karo_7, Karo_8, Karo_9, Karo_10, Karo_Bube, Karo_Dame, Karo_Koenig, Karo_Ass,
    Pik_7, Pik_8, Pik_9, Pik_10, Pik_Bube, Pik_Dame, Pik_Koenig, Pik_Ass,
    Kreuz_7, Kreuz_8, Kreuz_9, Kreuz_10, Kreuz_Bube, Kreuz_Dame, Kreuz_Koenig, Kreuz_Ass
  );
const
  cKarten:array[TKarten] of string = (
    'Herz 7', 'Herz 8', 'Herz 9', 'Herz 10', 'Herz Bube', 'Herz Dame', 'Herz König', 'Herz Ass',
    'Karo 7', 'Karo 8', 'Karo 9', 'Karo 10', 'Karo Bube', 'Karo Dame', 'Karo König', 'Karo Ass',
    'Pik 7', 'Pik 8', 'Pik 9', 'Pik 10', 'Pik_Bube', 'Pik Dame', 'Pik König', 'Pik Ass',
    'Kreuz 7', 'Kreuz 8', 'Kreuz 9', 'Kreuz 10', 'Kreuz Bube', 'Kreuz Dame', 'Kreuz König', 'Kreuz_Ass'
  );
var KartenIndex: Integer;
    Karten: TStringList;
    Karte:TKarten;
begin
  Memo1.Lines.BeginUpdate;
  Karten:=TStringList.Create;
  try
    Memo1.Lines.Clear;
    for Karte:=low(TKarten) to high(TKarten) do
      Karten.Append(cKarten[Karte]);

    while Karten.Count > 0 do begin
      KartenIndex:=Random(Karten.Count);
      Memo1.Lines.Append(Karten[KartenIndex]);
      Karten.Delete(KartenIndex);
    end;
  finally
    Karten.Free;
    Memo1.Lines.EndUpdate;
  end;
end;
  Mit Zitat antworten Zitat
Matze1848

Registriert seit: 26. Mär 2011
6 Beiträge
 
#3

AW: Mischalgorithmus Fehler

  Alt 27. Mär 2011, 08:41
Boah, danke, das funktioniert so gut..

Mit dem Count-Befehl kann ich dann auch machen, dass die Karten in verschiedene memos eingeteilt werden (Karten austeilen)?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Mischalgorithmus Fehler

  Alt 27. Mär 2011, 08:57
Der Fairnes halber sollte man aber sagen, dass mit dieser Vorgehensweise das Mischen und Anzeigen sehr gut funktioniert.

Weiter gedacht (Skat Regeln, Zählen, vergleichen) wird das Handling aber immer komplizierter und wird in einer If-Orgie enden mit String-Vergleichen.

Besser wäre hier ein OOP Ansatz.
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)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Mischalgorithmus Fehler

  Alt 27. Mär 2011, 10:26
Sehe ich auch so. Hier einmal ein Ansatz (im Editor heruntergetippt, daher komplett ungetestet):
Delphi-Quellcode:
type
  TFarbe = (Karo, Herz, Pik, Kreuz);
  TWert = (Sieben, Acht, Neun, Zehn, Bube, Dame, Koenig, Ass);
  
  TKarte = class
  private
    FFarbe: TFarbe;
    FWert: TWert;
    function GetDisplayname: string;
  public
    constructor Create(AFarbe: TFarbe; AWert: TWert);
    property Farbe: TFarbe read FFarbe;
    property Wert: TWert read FWert;
    property Displayname: string read GetDisplayname;
  end;
  
const
  Farben: array[TFarbe] of string = ('Karo', 'Herz', 'Pik', 'Kreuz');
  Werte: array[TWert] of string = ('7', '8', '9', '10', 'Bube', 'Dame', 'König', 'As');
  
function TKarte.GetDisplayname: string;
begin
  Result := Format('%s %s', [Farben[FFarbe], Werte[FWert]]);
end;

constructor TKarte.Create(AFarbe: TFarbe; AWert: TWert);
begin
  inherited Create;
  FFarbe := AFarbe;
  FWert := AWert;
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (27. Mär 2011 um 10:29 Uhr)
  Mit Zitat antworten Zitat
Matze1848

Registriert seit: 26. Mär 2011
6 Beiträge
 
#6

AW: Mischalgorithmus Fehler

  Alt 27. Mär 2011, 10:57
Danke für die schnellen Antworten. Ich versteh nur nicht ganz wo ich diesen Quelltext einfügen soll und inwiefern sich eine procedure darauf bezieht. Ich krieg andauernd einen Fehler, class könnte hier nicht deklariert werden und/oder = solle da stehen und wrong declaration..
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Mischalgorithmus Fehler

  Alt 27. Mär 2011, 12:36
Ich habe mal eine kleine Demo erstellt, ich hoffe, das hilft Dir weiter. Erweitern musst Du sie allerdings selbst
Angehängte Dateien
Dateityp: zip Karten.zip (1,8 KB, 14x aufgerufen)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz