![]() |
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:
Proz:
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;
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; |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Was kommt den raus, und was erwartest du als Ergebnis?
|
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... |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Wenns hilft stell ich den gesamten quelltext rein oder lad das hoch...
:? HELP :? :o |
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 |
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* :? |
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.
|
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... |
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 |
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: |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Und wer gewinnt? Die höchste Zahl?
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
jap
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Delphi-Quellcode:
Gleichheit wird auf diese Weise allerdings nicht ausgewertet, aber ich weiß ja auch nicht, ob diese überhaupt eintreten kann.
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; |
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 |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
ok ich habs ... habe grundsätzlich das falsche einfüge verfahren:
Delphi-Quellcode:
das wäre dann so:
if Aktuelles=erstes then next;
newListElem:=TKarte.create(pInhalt); newListElem.setzeNext(Aktuelles); newListElem.setzePrevious(Aktuelles.gibPrevious); Aktuelles.gibPrevious.setzeNext(newListElem); Aktuelles.setzePrevious(newListElem); Previous; 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 ;) |
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---> |
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.
|
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 ? |
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 :| |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Och Leute :mrgreen: Kommt schon ich bau auf euch :cry:
Please :o |
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:
Ich schau mal weiter ...
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; |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
@freak4fun thx
@medium ... dich kennen wir ja schon... ich ignoriere das jetzt einfach mal |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Oh, sowas wird nun auch moderativ geduldet. Bedauernswert. Wann hat sich das geändert?
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Thx an den mod ;)
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
ähm... freak4fun?
will ja nicht nerven aber hast du schon was anderes gefunden? |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Zitat:
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. |
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Zitat:
|
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... |
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. ;)
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Hallo Christain, erwarte ja nicht dass er auf Verbesserungsvorschläge eingeht.
|
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:
@Freak4Fun...ich gucks mir mal an... is nur im moment schlecht...wegen der AccesViolation oben fliegt mir gerade das ganze programm um die ohren^^
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. der fliegt bei hilf:=Kliste.GibAktuelles; raus... €dit: Anhang |
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?
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
hier am besten nochmal das komplette packet wies jetzt aussieht...
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Beim Aufruf von
Delphi-Quellcode:
in
Debug.updateview(Kliste,Hand,G1Hand,G2Hand);
Delphi-Quellcode:
ist KListe, Hand usw. nil, da sie erst später im FormCreate erzeugt werden. ;)
procedure TFormMain.FormCreate(Sender: TObject);
|
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: |
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...
|
Re: problem beim vergleichen von Karten --- Gewinner ermitte
Zitat:
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: |
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