AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Skatspiel programmieren
Thema durchsuchen
Ansicht
Themen-Optionen

Skatspiel programmieren

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

Skatspiel programmieren

  Alt 26. Mär 2011, 15:41
Moin,moin.

Ich bin derzeit Klasse 11 und möchte mich mal an höheren Aufgaben als Ampeln und Sonnensystemen probieren
Dacht ich mir, probier ich mal ein Skatspiel zu programmieren.
Also erstmal ohne cards.dll, sondern mit Buttons oder so.

Hab ich mir gedacht fang ich ma mitm mischen an, irgendwas in richtung.

randomize;
Karten:=random(34)+1;
Case Karten of
1:
2:
..
34:


Aber wie könnt ichs weiter gestalten, oder bin ich total auf dem holzweg (Also ich wills nich so hardcore kompliziert, weil oft hab ich in den Foren einfach Algorithmen gesehen, die wollt ich gar nicht sehen )
Wahrscheinlich brauch ich einfach nur den richtigen Denkanstoß.. Danke für eure Hilfe schonmal im voraus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 16:05
Das Einfachste ist, eine Liste mit 32 (nicht 34) Elementen zu erstellen und solange eine mit einem zufälligen Index zu ziehen, in eine 2. Liste zu kopieren und aus der ersten zu löschen, bis diese leer ist.
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
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#3

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 16:10
Hi,

ich kann zwar kein Skat, aber um die Karten zu mischen und in einer Liste zu haben, würde ich wie folgt vorgehen. Erstmal braucht man ja die Karten, dafür sollte man sich eine Klasse bauen, wenn man es ordentlich machen will.

Delphi-Quellcode:
type
  TFarbe = (Pik, Kreuz, Karo, Herz);
  TWert = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A);
  TKarte = class
  public
    Farbe: TFarbe;
    Wert: TWert;
  end;

procedure ListeBauen;
var
  i, n: Integer;
  Karten: TList;
begin
  Karten := TList.Create;

  for i := 0 to High(TFarbe) do
    for n := 0 to High(TWert) do
    begin
      Karten.Add(TKarte.Create);
      Karten[Karten.Count - 1].Farbe := TFarbe(i);
      Karten[Karten.Count - 1].Wert := TWert(n);
    end;

  Mische(Karten);
end;
Vielleicht passen die Werte für Skat jetzt nicht, aber damit hat man dann alle Karten in der Liste, die mir jetzt einfallen. Du müsstest dann nur noch diese Liste mischen (meine nicht implementierte Mische()-Funktion), über Google habe ich z.B. das hier gefunden.

Tipp: Bevor du, wie in deinem Beispiel, jede Karte nur eine Zahl sein lässt, fang gleich damit an, alles, was ein Objekt sein sollte, auch so zu bauen. Dadurch wird der Code schöner und du kommst später besser damit klar.
Achja, und der Code von mir da oben ist ungetestet..


HTH


Edit: Roter Kasten, aber dieses tolle Beispiel muss unbedingt gepostet werden!
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"

Geändert von wicht (26. Mär 2011 um 16:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 16:19
type TWert = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A); Wenn das so kompilierbar ist, fress ich nen Besen
Delphi-Quellcode:
// bei wJ, wQ, wK, wA ist das 'w' unnötig, aber so ist es konsistenter.
type TWert = (w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, wJ, wQ, wK, wA);
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 16:43
Wie ich sagte, ungetestet... habs mir auch irgendwie gedacht, dass das so vielleicht nicht klappt, aber.. Asdf
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Matze1848

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

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 19:20
okok,erst einmal danke für die Beiträge. ich hab mir das mit der liste zu herzen genommen und erstmal (ohne skat oder so) ein mischalgorithmus erstellt, der in ein Memofeld schreibt. hat aber länger gedauert als ich dachte


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
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 20:45
also mal prinzipiell:

1. Bitte benutze die DELPHI-Tags um deinen Code besser lesbar zu machen
2. Wenn du eine Fehlermeldung vom Debugger erhälst, muss du immer genau dazuschreiben, wo der Fehler auftritt und wie er exakt lautet
und 3. man sieht ja, dass du noch sehr am Anfang stehst mit deinen Delphi-Kenntnissen, aber du solltest trotzdem versuchen zu verstehen, was andere DP-Mitglieder dir schreiben

Weil so wie du gerade anfängst, ist es ziemlich unsinnig, ich denk mal, du würdest viel mehr Hilfe bekommen, wenn du "wicht" seinen Vorschlag versuchst zu verstehen und Fragen dazu stellst.
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  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
 
#8

AW: Skatspiel programmieren

  Alt 26. Mär 2011, 23:38
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Karten: Integer;
  Ausgabe: String;
  x : Integer;
  Liste1: TStringList;
begin
  Memo1.Lines.Clear;
  Randomize; // Nur einmal beim Programmstart aufrufen

  for x:= 1 to 32 do
    begin
      Karten:=Random(32)+1;
      Liste1:=TStringList.Create; // Speicherleck 32x erzeugt und 1x freigegeben (s.u.)

      if Karten=1 then
        begin
          Ausgabe:='Kreuz Bube';
          Liste1.insert(1,'1'); // Liste1 hat zu diesem Zeitpunkt 0 Einträge! ;o)
        end

[...]

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

      Memo1.Lines.Add(Ausgabe);
    end;

  Liste1.Free;
end;
Liste1 als eine temporäre Instanz sollte auch hier wie folgt deklariert werden (dann gibt es auch keine Speicherlecks)
Delphi-Quellcode:
Liste1 := TStringList.Create;
try
  ...
finally
  Liste1.Free;
end;
Generell zu den Karten, dem Mischen und der Problematik mit den doppelten Karten:
Warum gibt es beim Spiel im RealLife keine doppelten Karten?
Wenn du das raus hast, dann hast du auch den Ansatz wie man es programmiert
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 TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Skatspiel programmieren

  Alt 27. Mär 2011, 01:07
Warum auch immer, aber Matze hat einen weiteren Thread geöffnet und auch da Antworten erhalten...
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  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 22:56 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