Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi problem beim vergleichen von Karten --- Gewinner ermitteln (https://www.delphipraxis.net/146838-problem-beim-vergleichen-von-karten-gewinner-ermitteln.html)

Fussel9 27. Jan 2010 21:35


problem beim vergleichen von Karten --- Gewinner ermitteln
 
:shock: I-wie gehts da nix^^ also ich lasse mir testweise die karten der gegner (G1 und G2) mit anzeigen und die Abfrage scheint noch nicht zu stimmen :mrgreen: is wahrscheinlich wieder irgend ne kleinigkeit oder son ganz blöder fehler

Danke schonmal fürs Korrigieren meiner Blödheit ;)

Aufruf:
Delphi-Quellcode:
procedure TFormMain.Card1Click(Sender: TObject);
var i: Integer;
begin
(Sender as TImage).BringToFront;
ShowMessage(IntToStr((Sender as TImage).Tag));
Hand.toFirst;
for i := 1 to ((Sender as TImage).Tag)-1 do
  begin
    Hand.Next;
  end;
Berechne(Hand.GibAktuelles,G1Hand.GibErstes.GibNext,G2Hand.GibErstes.GibNext);
end;
Proz:

Delphi-Quellcode:
procedure TFormMain.Berechne(pKarte, pG1Karte, pG2Karte: TKarte);
begin
if (pKarte.GibInhalt.GibZahl > pG1Karte.GibInhalt.GibZahl) then
  begin
    if (pG1Karte.GibInhalt.GibZahl > pG2Karte.GibInhalt.GibZahl) then
      begin
        ShowMessage('Spieler gewinnt');
      end
    else
      begin
        if (pKarte.GibInhalt.GibZahl > pG2Karte.GibInhalt.GibZahl) then
          begin
            ShowMessage('Spieler gewinnt');
          end
        else
          begin
            ShowMessage('Gegner2 gewinnt');
          end;
      end;
  end
else
  begin
    if (pG1Karte.GibInhalt.GibZahl > pG2Karte.GibInhalt.GibZahl) then
      begin
        ShowMessage('Gegner1 gewinnt');
      end
    else
      begin
        ShowMessage('Gegner2 gewinnt');
      end;
  end;
end;

mkinzler 27. Jan 2010 22:06

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Was kommt den raus, und was erwartest du als Ergebnis?

Fussel9 27. Jan 2010 22:20

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Ka... schreib mal nen paar beispiele auf:
Runde 1
ich(I): 3 Gegner1(G1): 12 Gegner2(G2): 4 --> G1 gewinnt | y
Runde 2
I: 2 G1: 1 G2: 3 --> G2 gewinnt | y
I: 1 '' '' --> '' | y
Runde 3
I: 6 G1: 5 G2: 11 --> G1 gewinnt | N
I: 8 '' '' --> '' | N
I: 2 ____________________________| N
Runde 4
2|5|10-Y
8|5|10-y
13|5|10-y
12''-y
Runde 5
3|5|12-G1 gewinnt|N
10''-G1 gewinnt|N
8''|-Spieler gewinnt|N
0''|G1 gewinnt|N
3''|G1|N

N steht für No -- Also für falsch

man achte auf runde 5 ... sonst wäre jede ungerage runde so das immer G1 gewinnt ... aber...

Fussel9 27. Jan 2010 22:36

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Wenns hilft stell ich den gesamten quelltext rein oder lad das hoch...
:? HELP :? :o

Fussel9 27. Jan 2010 23:17

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Kleines Update bevor ich mich aufs Ohr hau...

ich dachte erst es läge vielleicht daran das ich die Hand-Listen an der Stelle an der Sie gefüllt werden nicht geleert hatte.. aber auch daran lag es nicht... hier im anhang mal die exe... vielleicht erkennt ja jemand einen Zusammenhang...

Falls ihr doch den Quellcode komlett braucht meldet euch bitte...

Auf den Karten finden sich die Zahlen 1 bis 13 - N Steht für 0 und MW Steht für 14

die Farben haben keine bedeutung und da es sich nur um einen Test handelt spielen die KIs immer die erste ihrer Karten...

Die erste Message ist der Tag der Komponente also die wievielte karte man spielen will( beim anklicken)

Die zweite zeigt wie viele Elemente in den Hand-Listen jeweils sind...
Die dritte zeit an wer gewonnen hat... aber das stimmt ja noch nicht...

€DiT:
Oh ja... :lol: der Button Startet die nächste Runde ^^


€DIT:

AnHaNg EnTfErNt

Fussel9 28. Jan 2010 15:19

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
:pale: :Help: :pale:
Hat keiner ne Idee?

--> Die exe is auch erst einmal gedownloaded worden...

*need help*+*dringend*

:?

DeddyH 28. Jan 2010 15:29

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Bist Du denn einmal durchgesteppt? Das sollte man vielleicht mal als erstes versuchen, da fallen (zumindest mir) logische Fehler recht schnell ins Auge.

Fussel9 28. Jan 2010 15:39

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
relativ...

ich geh jetzt nochmal komplett durch... aber ob ich da was finde ist nicht sicher... kann gut sein das es was ist was mir gar nicht so bewusst ist...

p80286 28. Jan 2010 15:46

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Hallo Fussel9,

nicht böse sein. Aber was ich bis jetzt über Dein Problem gelesen habe, ist doch etwas wirr.
Wenn Du Karten vergleichst, nehme ich an, daß Du Spielkarten meinst.
Dann wäre es ganz gut zu wissen um welches Spiel es sich handelt, damit man eine ungefähre Vorstellung von dem bekommt worauf Du eigentlich hinaus willst.

Die paar Codezeilen die ich bis jetzt gesehen habe machen mir ehrlich gesagt keinen "Appetit auf mehr", weil ich nicht weiß um was es geht.
Und nur aus Jux und Dollerei lade ich mir meine Festplatte nicht mit irgendwelchen Sourcen oder Exen zu.

Gruß
K-H

Fussel9 28. Jan 2010 15:52

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
... ja ok... das spiel kennt so wie so niemand und es ist auch irrelevant um welches es sich handelt da ich nur die Zahlen vergleichen will wie oben schon beschrieben ...

es gibt die Zahlen von 0 bis 14 ....

und ich weiß nicht ob dus wusstest, aber man kann dateien auch löschen... :wink: ...womit du dir auch deine festplatte nicht zupackst :mrgreen:

DeddyH 28. Jan 2010 15:54

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Und wer gewinnt? Die höchste Zahl?

Fussel9 28. Jan 2010 15:56

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
jap

DeddyH 28. Jan 2010 16:16

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Delphi-Quellcode:
procedure TFormMain.Berechne(pKarte, pG1Karte, pG2Karte: TKarte);
begin
//Ist pKarte höher als pG1Karte?
if (pKarte.GibInhalt.GibZahl > pG1Karte.GibInhalt.GibZahl) then
  begin
    //auch höher als pG2Karte?
    if (pKarte.GibInhalt.GibZahl > pG2Karte.GibInhalt.GibZahl) then
      begin
        ShowMessage('Spieler gewinnt');
      end
    //wenn nicht, muss ja pG2Karte die höchste sein
    else
      begin
        ShowMessage('Gegner2 gewinnt');
      end;
  end
else
  begin
    if (pG1Karte.GibInhalt.GibZahl > pG2Karte.GibInhalt.GibZahl) then
      begin
        ShowMessage('Gegner1 gewinnt');
      end
    else
      begin
        ShowMessage('Gegner2 gewinnt');
      end;
  end;
end;
Gleichheit wird auf diese Weise allerdings nicht ausgewertet, aber ich weiß ja auch nicht, ob diese überhaupt eintreten kann.

Fussel9 28. Jan 2010 16:31

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
theoretisch nicht... in diesem test schon, aber das wäre egal... ich habe aber etwas herrausgefunden:

aus irgend einem grund ist die Liste verkehrt herum...

mit diesen test massages ließ es sich feststellen... aber wodurch kann das kommen... suche noch,,,

€DIT:

AnHaNg EnTfErNt

Fussel9 28. Jan 2010 17:15

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
ok ich habs ... habe grundsätzlich das falsche einfüge verfahren:

Delphi-Quellcode:
  if Aktuelles=erstes then next;
  newListElem:=TKarte.create(pInhalt);
  newListElem.setzeNext(Aktuelles);
  newListElem.setzePrevious(Aktuelles.gibPrevious);
  Aktuelles.gibPrevious.setzeNext(newListElem);
  Aktuelles.setzePrevious(newListElem);
  Previous;
das wäre dann so:

X 1 X
X 2 | 1 X
x 3 | 2 | 1 X

usw.

... oh man,,, das hat jetz echt lange gedauert... aber darauf wäre ich auch wohl nie gekommen hätte ich das nicht noch ma alles von anfang an durchgedacht...

naja thx für eure beiträge...

falls noch was ist meld ich mich ;)

Fussel9 28. Jan 2010 18:28

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Liste der Anhänge anzeigen (Anzahl: 1)
So ich gebs jetzt auf :wall:

:cry:

Es will immer noch nicht..........

So langsam gehts mir tierisch auf den geist....

kann mal bitte jemand gucken? hier das gesamte packet--->

DeddyH 29. Jan 2010 12:45

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Wieso sind sämtliche Methoden als virtuell deklariert, wenn Du keine Klassen ableitest? Und ein inherited hab ich auf die Schnelle auch nirgends gefunden. Außerdem würde ich statt die ganzen Getter und Setter direkt anzusprechen eher Properties deklarieren, das macht den Code übersichtlicher.

Fussel9 29. Jan 2010 15:02

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
...das liegt daran das ich es in der Schule so gelernt habe und da das für ne facharbeit sein wird wäre es nicht so gut plötzlich ganz andere systeme zu verwenden... was das virtual angeht so weiß ich auch selbst gar nicht wozu das ist...

und was war mit inherited
?

Fussel9 29. Jan 2010 16:39

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
...warte jetzt seit stunden...
ihrgendjemand muss doch da nen fehler sehn... mal von irgendwelchen virtual geschichten abgesehen


:| PLEASE :|

Fussel9 29. Jan 2010 17:52

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Och Leute :mrgreen: Kommt schon ich bau auf euch :cry:

Please :o

freak4fun 29. Jan 2010 18:25

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Hi,
ich schau mir das mal an. Den ersten Fehler den ich gefunden habe ist in HideCard. Der Schleifenzähler ist falsch, da Arrays mit 0 anfangen:

Delphi-Quellcode:
procedure TFormMain.HideCard(aImage: array of TImage;
                             bImage: array of TImage;
                             cImage: array of TImage);
var
  i : Integer;
begin
  for i := 0 to 19 do
    begin
      aImage[i].Hide;
      bImage[i].Hide;
      cImage[i].Hide;
    end;
  Runde := 0;
end;
Ich schau mal weiter ...

Fussel9 29. Jan 2010 18:54

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
@freak4fun thx
@medium ... dich kennen wir ja schon... ich ignoriere das jetzt einfach mal

Medium 29. Jan 2010 20:55

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Oh, sowas wird nun auch moderativ geduldet. Bedauernswert. Wann hat sich das geändert?

Fussel9 31. Jan 2010 13:53

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Thx an den mod ;)

Fussel9 31. Jan 2010 15:27

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
ähm... freak4fun?

will ja nicht nerven aber hast du schon was anderes gefunden?

mkinzler 31. Jan 2010 15:50

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Zitat:

Zitat von Fussel9
Thx an den mod ;)

Hier gibt es nichts zu danken. Zudem er mit dem was er gesagt hat ja Recht hat. Mir missfiel nur das "wie".

Eigeninitiative ist ein wichtiger Aspekt für erfolgreiches Programmieren/Arbeiten. Und ehrlich gesagt muss man bei dir danach mit der Lupe suchen.
Anstatt dich auf die Hilfsbereitschaft anderer zu verlassen könnhen, könntest du auch selber versuchen das Problem einzugrenzen und
zu ggf. zu beheben. Helfen tun wir immer gern, aber nicht die Arbeit für andere tun.

freak4fun 31. Jan 2010 16:09

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Zitat:

Zitat von Fussel9
ähm... freak4fun?

will ja nicht nerven aber hast du schon was anderes gefunden?

Kannst du den Fehler eingrenzen? Ich kann das Projekt kompelieren und beim Klick auf den Button werden neue Karten angezeigt. Die scheinen aber wild durcheinander zu sein. So ganz steig ich da noch nicht durch. Im Moment schau ich mir die Sache mit dem Gewinner an, aber die Regeln sind nicht sehr leicht zu durchschauen. ;)

Fussel9 31. Jan 2010 16:24

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
das problem ist nur das er den gewinner nicht richtig erkennt ... im manchen runden hat man selbst eine 3 der erste gener eine 7 und der zweite gegner eine 12 und dann gibt er aus: Gegner 1 gewinnt...

Ich arbeite gerade daran eine Art eigenes Debug Protokoll zu erstellen... vielleicht finde ich da etwas---

die karten sollen durcheinander sein^^ dafür gibts die prozedure MISCHEN ;)

und ich denke nicht das es faul ist einen eigenen Debug report erstellen zu lassen... und ich habe auch selbst gesucht ich habe auch andere Leute gefragt mich hier und da umgesehen aber bis jetzt noch nichts entdeckt...

freak4fun 31. Jan 2010 16:56

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Deine Berechnen Methode ist komisch. Setzt mal einen Breakpoint auf die erste If-Bedingung und gehe mit F7 weiter und schau dir die Werte von inhalt in function TKarte.GibInhalt: TInhalt; an. :) Ab der zweiten Runde kommt er da durcheinader. ;)

mkinzler 31. Jan 2010 17:00

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Hallo Christain, erwarte ja nicht dass er auf Verbesserungsvorschläge eingeht.

Fussel9 31. Jan 2010 17:10

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
wieso geht das nochmal nicht? Hatte den fehler glaub ich schonmal... aber weiß es nicht mehr das ist meine zweite Form ... der ''Debuger''

Delphi-Quellcode:
unit UDeb;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, UKartenliste, UKarte;

type
  TFDeb = class(TForm)
    MKartenliste: TMemo;
    MHandListen: TMemo;
    MProtokoll: TMemo;
    procedure FormCreate(Kliste,Hand,G1Hand,G2Hand: TKartenliste; Sender: TObject);
  private
    {LT}
  public
    procedure updateview(Kliste,Hand,G1Hand,G2Hand: TKartenliste);
  end;

var
  FDeb: TFDeb;

implementation

{$R *.dfm}

procedure TFDeb.FormCreate(Kliste,Hand,G1Hand,G2Hand: TKartenliste; Sender: TObject);
begin
  updateview(Kliste,Hand,G2Hand,G2Hand);
end;

procedure TFDeb.updateview(Kliste,Hand,G1Hand,G2Hand: TKartenliste);
Var Hilf,HandHilf,G1Hilf,G2Hilf: TKarte;
begin
hilf:=TKarte.create(nil);
HandHilf:=TKarte.create(nil);
G1Hilf:=TKarte.create(nil);
G2Hilf:=TKarte.create(nil);
MessageDLG('Der Debuger wird erneuert!',mtWarning,[mbYes],0);
hilf:=Kliste.GibAktuelles;
Kliste.toFirst;
MKartenliste.Lines.Add('## Karten: ##');
while not (Kliste.GibAktuelles = Kliste.GibLetztes) do
  begin
    if (Kliste.GibAktuelles = hilf) then
      begin
        MKartenliste.Lines.add(IntToStr(Kliste.GibAktuelles.GibInhalt.GibZahl)+' '
                          +Kliste.GibAktuelles.GibInhalt.GibFarbe+' '
                          +Kliste.GibAktuelles.GibInhalt.GibPfad+'<--');
      end
    else
      begin
        MKartenliste.Lines.add(IntToStr(Kliste.GibAktuelles.GibInhalt.GibZahl)+' '
                          +Kliste.GibAktuelles.GibInhalt.GibFarbe+' '
                          +Kliste.GibAktuelles.GibInhalt.GibPfad);
      end;
    Kliste.Next;
  end;
HandHilf:=Hand.GibAktuelles;
Hand.toFirst;
G1Hilf:=G1Hand.GibAktuelles;
G1Hand.toFirst;
G2Hilf:=G2Hand.GibAktuelles;
G2Hand.toFirst;
MHandListen.Lines.Add('## HAND: ##');
while not (Hand.GibAktuelles = Hand.GibLetztes) do
  begin
    if (Hand.GibAktuelles = HandHilf) then
      begin
        MHandListen.Lines.add(IntToStr(Hand.GibAktuelles.GibInhalt.GibZahl)+' '
                              +Hand.GibAktuelles.GibInhalt.GibFarbe+' '
                              +Hand.GibAktuelles.GibInhalt.GibPfad+'<--');
      end
    else
      begin
        MHandListen.Lines.add(IntToStr(Hand.GibAktuelles.GibInhalt.GibZahl)+' '
                              +Hand.GibAktuelles.GibInhalt.GibFarbe+' '
                              +Hand.GibAktuelles.GibInhalt.GibPfad);

      end;
    Hand.Next;
  end;
MHandListen.Lines.Add('## G1HAND: ##');
while not (G1Hand.GibAktuelles = G1Hand.GibLetztes) do
  begin
    if (G1Hand.GibAktuelles = G1Hilf) then
      begin
        MHandListen.Lines.add(IntToStr(G1Hand.GibAktuelles.GibInhalt.GibZahl)+' '
                              +G1Hand.GibAktuelles.GibInhalt.GibFarbe+' '
                              +G1Hand.GibAktuelles.GibInhalt.GibPfad+'<--');
      end
    else
      begin
        MHandListen.Lines.add(IntToStr(G1Hand.GibAktuelles.GibInhalt.GibZahl)+' '
                              +G1Hand.GibAktuelles.GibInhalt.GibFarbe+' '
                              +G1Hand.GibAktuelles.GibInhalt.GibPfad);

      end;
    G1Hand.Next;
  end;
MHandListen.Lines.Add('## G2HAND: ##');
while not (G2Hand.GibAktuelles = G2Hand.GibLetztes) do
  begin
    if (G2Hand.GibAktuelles = G2Hilf) then
      begin
        MHandListen.Lines.add(IntToStr(G2Hand.GibAktuelles.GibInhalt.GibZahl)+' '
                              +G2Hand.GibAktuelles.GibInhalt.GibFarbe+' '
                              +G2Hand.GibAktuelles.GibInhalt.GibPfad+'<--');
      end
    else
      begin
        MHandListen.Lines.add(IntToStr(G2Hand.GibAktuelles.GibInhalt.GibZahl)+' '
                              +G2Hand.GibAktuelles.GibInhalt.GibFarbe+' '
                              +G2Hand.GibAktuelles.GibInhalt.GibPfad);

      end;
    G2Hand.Next;
  end;
Kliste.SetzeAktuelles(Hilf);
Hand.SetzeAktuelles(HandHilf);
G1Hand.SetzeAktuelles(G1Hilf);
G2Hand.SetzeAktuelles(G2Hilf);
end;

end.
@Freak4Fun...ich gucks mir mal an... is nur im moment schlecht...wegen der AccesViolation oben fliegt mir gerade das ganze programm um die ohren^^


der fliegt bei hilf:=Kliste.GibAktuelles; raus...


€dit:

Anhang

freak4fun 31. Jan 2010 17:13

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Kannst du das als Datei anhängen, damit ich das in mein lokales Projekt mit einfügen kann?

Fussel9 31. Jan 2010 17:20

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
hier am besten nochmal das komplette packet wies jetzt aussieht...

freak4fun 31. Jan 2010 17:35

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Beim Aufruf von
Delphi-Quellcode:
Debug.updateview(Kliste,Hand,G1Hand,G2Hand);
in
Delphi-Quellcode:
procedure TFormMain.FormCreate(Sender: TObject);
ist KListe, Hand usw. nil, da sie erst später im FormCreate erzeugt werden. ;)

Fussel9 31. Jan 2010 18:10

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
DANKE

da wär ich echt nich drauf gekommen :thumb:

man ich sollte mal was gegen dieses brett vor meinem kopf tun... :mrgreen:

so jetzt müsste man aber doch irgendwo was erkennen... :searching:

Fussel9 31. Jan 2010 18:25

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
ok... also in der zweiten runde wirds komisch, da gibt er nämlich nicht nur einen sondern gleich zwei gewinner aus...

freak4fun 31. Jan 2010 18:37

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Zitat:

Zitat von Fussel9
ok... also in der zweiten runde wirds komisch, da gibt er nämlich nicht nur einen sondern gleich zwei gewinner aus...

Wenn wir weiter zusammen arbeiten wollen halte dich bitte an die Forenregeln. :)
Das bedeutet keine Doppelposts (pushen). Außerdem wünsche ich mir von dir etwas aussagekräftigere Posts. :D

Das würde mich sehr freuen. :mrgreen:

Fussel9 31. Jan 2010 19:24

Re: problem beim vergleichen von Karten --- Gewinner ermitte
 
Ok ich habs jetzt !

In der ersten Runde haben die Gegner ihre letzte Karte ausgespielt während sie in der zweiten dritten ect.
Runde immer ihre letzte karte ausgespielt habe ... zu sehn mit dem selbst gebastelten debugger... also war die ganze zeit gar kein wirklich er fehler da... omg... :roll:
:pale:

Aber Danke an alle die zur Lösung beigetragen haben und euch allen noch einen schönen verdienten Feierabend :wink: :cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz