AGB  ·  Datenschutz  ·  Impressum  







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

primitives mau mau spiel

Ein Thema von track · begonnen am 16. Mai 2006 · letzter Beitrag vom 18. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
track

Registriert seit: 30. Okt 2005
25 Beiträge
 
#1

primitives mau mau spiel

  Alt 16. Mai 2006, 22:15
moin moin

hab hier ein primitives mau mau spiel programmiert....das problem ist es hängt sich irgendwie auf wenn der stock am ende ist!
kann sich das jemand anschauen? ich debugge mich schon tod hier!
wäre nett wenn sich jemand findet der etwas zeit hat!
Angehängte Dateien
Dateityp: rar maumau_137.rar (193,5 KB, 78x aufgerufen)
  Mit Zitat antworten Zitat
track

Registriert seit: 30. Okt 2005
25 Beiträge
 
#2

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 10:50
keiner eine idee?
na hättet doich wenigstens schreiben können das der quelltext unübersichtlich ist!
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#3

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 12:23
Hi,

wenn der Stapel leer ist, beibt er in uLogik.KarteGeben hängen...
Gruß
Norman
  Mit Zitat antworten Zitat
track

Registriert seit: 30. Okt 2005
25 Beiträge
 
#4

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 15:00
wie fang ich das denn ab?
so sollte das doch funktionieren oder nicht?

Delphi-Quellcode:
procedure KarteGeben(var KartenName : String;var KartenWert:byte);
begin
  if Stapel <>[] then begin
  repeat
    KartenWert := randomrange(Low(TKarten),High(TKarten));
  until KartenWert in Stapel;
  KartenName := cKartenName[KartenWert];
  Stapel := Stapel - [KartenWert];
  end;

end;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 16:10
kannst Du mal bitte schreiben, was für ein Typ stapel ist
Ich denke mal ein set of irgendwas
aber kann man von einem Set etwas subtrahieren?

Stapel := Stapel - [KartenWert];

Vielleicht ist das besser:

Zitat:
Removes an element from a set.
Unit

System

Category

set handling routines

procedure Exclude(var S: set of T;I:T);

Description

The Exclude procedure removes element I from set S.
S is a set type variable, and I is an expression of a type compatible with the base type of S.
The construct Exclude (S, I) corresponds to S := S - (I) but the Exclude procedure generates more efficient code.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#6

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 16:19
Hi,

Wenn du den Stapel bereits zufällig füllst, dann kannst du in KarteGeben völlig auf random verzichten und nimmst immer die oberste Karte. Das Berechnen einer Zufallszahl im Maximalbereich solange, bis der Wert (zufällig) im Stapel gefunden wird, ist sicher nicht optimal.

P.S.:
@Klaus01
Stapel := Stapel - [KartenWert]; das ist schon ok. hier wird KartenWert aus dem Set entfernt.
Gruß
Norman
  Mit Zitat antworten Zitat
track

Registriert seit: 30. Okt 2005
25 Beiträge
 
#7

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 16:56
NormanNG
stapel ist bei eine menge und in einer menge sind alle werte so weit ich mich richtig errinern kann geordnet!
desswegen ist ja auch der random!
die menge kann ich leider nicht rausnehemen da es in der aufgaben stellung steht!

Klaus01

Delphi-Quellcode:
TKarte = set of 0..KartenAnzahl-1;//32 karten
Stapel : TKarte;
und aus der menge kann man subtrahieren, ich ziehe damit eine karte aus der menge
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#8

Re: primitives mau mau spiel

  Alt 17. Mai 2006, 17:32
OK, du hast natürlich Recht.
Ich war gedanklich bei einem Array... und im Set ist die Reihenfolge festgelegt. Damit scheidet das "Mischen" beim Initialisieren aus.


Warum auch immer, das randomrange scheint den oberen Wert nie zu liefern, obwohl dies in den OH behauptet wird:
Zitat:
RandomRange gibt einen zufälligen Integer-Wert im Bereich von AFrom bis ATo zurück (inklusive).
Also damit klappt es:
KartenWert := randomrange( Low(tKarten), High(TKarten)+1 ); Aber es bleibt immer noch das Problem, wenn der Stapel leer ist und KarteGeben aufgerufen wird. Du kannst ja die Elemente im Set zählen und ggf. anders reagieren:

Delphi-Quellcode:
type
    TKarten = 0..KartenAnzahl-1;
    TKarte = set of tKarten;


  function AnzElemente(ASet: TKarte): Integer;
  var
    i: TKarten;
  begin
    Result := 0;
    for i := High(TKarten) downto Low(TKarten) do
      if i in ASet then Begin
        Inc(Result);
      end;
  end;

[edit]Schreibfehler korrigiert [/edit]
Gruß
Norman
  Mit Zitat antworten Zitat
track

Registriert seit: 30. Okt 2005
25 Beiträge
 
#9

Re: primitives mau mau spiel

  Alt 18. Mai 2006, 09:11
das komische daran ist wen der spieler dran ist und die karten fast alle sind...dann klappt es wunder bar, und beim pc hackt es

wenn wir das nun so machen
Zitat:
KartenWert := randomrange( Low(tKarten), High(TKarten)+1 );
dann kann man komischerweise mehr karten ziehen als es geht!
  Mit Zitat antworten Zitat
NormanNG

Registriert seit: 1. Feb 2006
294 Beiträge
 
Delphi 2007 Professional
 
#10

Re: primitives mau mau spiel

  Alt 18. Mai 2006, 09:42
Hi,

KartenWert := randomrange( Low(tKarten), High(TKarten)+1 ); Ich hab's nochmal getestet: diese Anweisung liefert (ziemlich gleichverteilt) zufällige Werte zwischen 0 und 15 (inklusive beider Grenzen).

Damit wird in "kartegeben" solange ein kartenwert erzeugt, bis auch die letzte Karte vom Stapel gezogen wurde. Soweit stimmt es.


Die beiden Funktionen SpielerGewonnen und PCGewonnen haben auch noch einen Fehler.
Delphi-Quellcode:
function SpielerGewonnen(computer : boolean) : Boolean;
begin
  if ((SpielerBlatt = []) or (Stapel = []) and (Computer)) then
      SpielerGewonnen := true;
end;

function PCGewonnen(computer : boolean) : Boolean;
begin
  if ((ComputerBlatt = []) or (Stapel = []) and (not Computer)) then
      PCGewonnen := true;
end;
im Else-Fall ist der Funktionswert nicht definiert!
Richtiger:
Delphi-Quellcode:
function SpielerGewonnen(computer : boolean) : Boolean;
begin
  SpielerGewonnen := ((SpielerBlatt = []) or (Stapel = []) and (Computer)) ;
end;
Gruß
Norman
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 06:03 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