AGB  ·  Datenschutz  ·  Impressum  







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

Skatkartenspiel

Offene Frage von "Mobby"
Ein Thema von Mobby · begonnen am 11. Mai 2006 · letzter Beitrag vom 16. Mai 2006
Antwort Antwort
Mobby

Registriert seit: 11. Mai 2006
16 Beiträge
 
Delphi 5 Standard
 
#1

Skatkartenspiel

  Alt 11. Mai 2006, 18:26
also ich brauch hilfe beim kartenmischen...

ich hab ein kartenspiel das ein normales skatblatt ist und gemischt werden soll!
naja dann kommt halt noch das SINNVOLLE reizen und das "normale" system beim austeilen was grafisch ein bisschen dargestellt werden soll...also dass in der mitte meinetwegen ein memofeld ist in dem dann nacheinander erst 3 mal 3 karten kommen dann der skat dann 3 mal 4 karten und nochmal 3 mal 3 karten...aber ich denk mal es kennen doch so einige skat außerdem soll das ganze soll auf arrays basieren.
ich hab es schon versucht mit

begin
i:=0;
// alle variablen sind schon eingetragen

for i to 32 do

begin
spielkarten:=nagelneu[random(32)+1];
spieler_1:=spielkarten+' '+spieler_1;

end;

end;

ja und dann weiß ich nicht wirklich wie ich das verhindern soll dass er bei dem random nur einmal z.b. die 10 nimmt und nicht zufällig 3mal...
und bei dem "sinvollen" reizen seh ich auch keine wirkliche strategie hinter...also ich brauch doch ein bisschen mehr hilfe bei meinem eigentlich simplen kartenspiel.
kann mir vllt jemand helfen?
ich weiß es is bestimmt ziemlich simpel aber ich wollt mal etwas relativ einfaches machen zum einstieg...
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Skatkartenspiel

  Alt 11. Mai 2006, 18:37
Zitat von Mobby:
begin
i:=0;
// alle variablen sind schon eingetragen
Delphi-Quellcode:
for i to 32 do

 begin
  spielkarten:=nagelneu[random(32)+1];
  spieler_1:=spielkarten+' '+spieler_1;

 end;

end;
Hmmmm kann ggf länger dauern:

Delphi-Quellcode:
var
  weg : array[1..32] of boolean;
  kart : integer;
  c : integer;
begin
  fillchar(Weg,sizeof(weg),byte(false));

  c := 0;
  repeat
    Kart := random(31)+1; /// 31!!!!
    inc(c);
  Until not(weg[Kart]) or (C > 100)

  if not(weg[Kart]) then // Dann halt die nächste
    begin
      for c:=1 to 32 do
       if not(weg[Kart]) then
         Kart := c;
    end;

  spielkarten:=nagelneu[Kart];
  Weg[Kart] := true;
  spieler_1:=spielkarten+' '+spieler_1;

  
end;
Ungetestet....
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Skatkartenspiel

  Alt 11. Mai 2006, 19:09
Herzlich willkommen in der Delphi-PRAXiS, Mobby.

Das zufällige Ziehen von Karten aus einem immer gleich großen Stapel ist, wie du richtig bemerkt hast, nicht sehr sinnvoll. Bei den letzten Karten kann es sehr lange dauern, weil die "richtigen" Zahlen einfach nicht gezogen werden.

Versuche es doch einmal mit folgender Lösung:

1.) Vereinbare ein Array A mit 32 Elementen und lege dort die Zahlen 1 bis 32 ab.
2.) Erzeuge zwei Zufallszahlen z1 und z2 aus dem Bereich 1..32.
3.) Vertausche die Arrayelemente A[z1] und A[z2].
4.) Wiederhole die Schritte 2 und 3 solange, bis die gewünschte Unordnung im Array A hergestellt ist.

Anschließend enthält das Array A alle Zahlen aus dem Bereich 1..32 in einer zufälligen Reihenfolge. Diese Zahlen kannst du nun als Index für dein Feld nagelneu benutzen, in dem offenbar die Karten abgelegt sind.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Mobby

Registriert seit: 11. Mai 2006
16 Beiträge
 
Delphi 5 Standard
 
#4

Re: Skatkartenspiel

  Alt 11. Mai 2006, 21:32
gut...das mischen klappt jetzt ganz gut...nur das reizen is das probelm...
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: Skatkartenspiel

  Alt 12. Mai 2006, 19:24
Beim Reizen wirst du das Problem haben, dass ja in irgendeiner Art und Weise der "Wert" des Blattes berechnet werden muss. Die zulässige Höchstgrenze zu finden dürfte ja nicht weiter schwer sein, aber anschließend brauchst du eine Bewertungsfunktion für deine Karten, die bestimmt ob und wenn ja wieviel weniger gereizt werden soll. Wenn du überreizen auch noch einbauen willst wird es sogar noch komplizierter.

So aus dem Kopf mal einige Kriterien die diese Funktion überprüfen sollte (wo immer möglich abgestützt auf sinnvolle Hilfsfunktionen):
-gutes Null- (7,8,9) oder Grandblatt (mind. 2 Buben und viele Asse+Zehnen oder eine lange Farbe)
-Anzahl Trümpfe, insbesondere Anzahl Buben sowie Höhe der Trumpfkarten
-Beiblatt, insbesondere Anzahl der Asse sowie der durch Asse gedeckten Zehnen, dazu auch die Anzahl der blanken Zehnen

Das ist aber schon für Menschen ein recht vager Prozess, der auch einiges an Erfahrung fordert, daher dürfte das recht schwierig nachzubilden sein.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Mobby

Registriert seit: 11. Mai 2006
16 Beiträge
 
Delphi 5 Standard
 
#6

Re: Skatkartenspiel

  Alt 15. Mai 2006, 17:39
Also wir haben ja nun unser mischen und geben hinbekommen...das haben wir dann mit einem Timer verzögert, so dass die Karten nacheinander wie beim Skat gegeben werden...

Nun stellt sich mir mal wieder die schon von tigerman33 angerissenen Frage mit dem reizen...also also mir ist jetzt unverständlich, wie ich einem varaiblen Array, das ja gemischt wird (mehrmals) einen festen Wert zuweisen soll!
Hat vielleicht jemand eine Idee wie man das realisieren könnte?
Also eigentlich hatte ich mir es nicht so schwer vorgestellt
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#7

Re: Skatkartenspiel

  Alt 16. Mai 2006, 00:14
Ihr könntet erst einmal zu allen möglichen spielen berechnen, wie weit man reizen kann.
also erst einmal die buben beschauen, (mit/ohne 1,2,3,4) * Kreuz, Pik, Herz, Karo, Grange, null Hand ect. dann müßt ihr überlegen wie stark die einzelnden Möglichkeiten wären.
Also mit Kreuz und pik wär ich zu schwach zum spielen, mit herz würd vielleicht gehen, mit karo gehts besser, aber dafür kann man weniger weit reizen.
dann reizen, bis zum höchsten akzeptablen wert
ggf Skat aufnehmen und neu berechnen, welches blatt am tollsten sein könnte und ob man das noch spielen kann (ohne sich zu überreizen). Sowas wie auf Schneider spielen kann man ja erst einmal rauslassen.
Dementsprechend dann Karten drücken.

beim spielen kann man dann noch mal überlegen, welche Karten schon raus sind und welche vorteile man daraus zieht. ebenfalls, wer auf welcher Farbe Blank ist.

in die Bewertungsfunktion muß also irgendwie die anzahl der karten und die höhe der karten eingehen. evtl sogar das beiblatt noch ein wenig.
Ihr könnt ja erst einmal eine provisorische Funktion bauen und dann ein paar mal karten vergeben und sehen, ob ihr mit dem blatt spielen würdet. dementsprechend könnt ihr die bewertungsfunktion anpassen und die grenze, ab welchem Wert man spielen will.
das spielen selber bringt dann sicher auch noch mal 'ne neue herausforderung.

wenn ihr das spielen als erstes baut, könnt ihr auch den computer gegen sich selbst spielen lassen und ihn "lernen" lassen, was gute Blätter sein könnten und was nicht, aber ich denke, das bringt noch mehr aufwand mit sich. vor allem muß man das spielen dann schon ziemlich gut realisieren, damit man zu vernünftigen ergebnissen kommt.

das wären soweit meine gedanken dazu, wünsche noch viel erfolg
  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:58 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