Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz (https://www.delphipraxis.net/162412-tic-tac-toe-mal-wieder-versteh-aufgabestellung-nicht-ganz.html)

DeddyH 25. Aug 2011 10:13

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Dann setz einen Haltepunkt in die OnClick-Routine des Labels und führe dann schrittweise aus. Irgendeine Bedingung scheint ja zuzutreffen, die das nicht sollte.

@NG: Caption ist doch bereits gesetzt, ich glaube kaum, dass das am Zeichnen liegt.

biby90 25. Aug 2011 10:16

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Also es funktioniert ja so wie es soll.
Wenn ich jetzt in einer Reihe schon 2 X stehen habe und die mit einem zum Gewinn vervollständige dann sagt er ich habe gewonnen... soll er ja auch aber er müsste ja wenigstens voher noch ein X schreiben damit manns auch sehen kann

DeddyH 25. Aug 2011 10:17

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Achso, dann habe ich das falsch verstanden. Somit nehme ich das Gesagte zurück, der General hat recht, mach das mal so.

Neutral General 25. Aug 2011 10:18

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Das Label wird dann neu gezeichnet.

Wenn du die Caption des Labels änderst, dann wird eine Windows-Message versandt, dass das Label sich neuzeichnen soll, weil sich sein Aussehen geändert hat.
Es kann aber sein, dass die Message erst ankommt NACHDEM du angezeigt hast, dass Spieler X gewonnen hat. Also zeichnest du das Label mit Repaint manuell neu, damit es auf jeden Fall noch das O oder X anzeigt bevor die Gewinn-Meldung kommt.

biby90 25. Aug 2011 10:19

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Jop, hab ich.... jetzt blinkt das X nur kurz auf und geht wieder weg.... es soll danach auch noch stehen bleiben... das blinkt so schnell dass man es kaum sieht

aber das kommt schon nahe!

DeddyH 25. Aug 2011 10:21

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Repaint ;)

@NG: Wie schon gesagt, ich hatte das falsch verstanden und einen logischen Fehler vermutet, tatsächlich wird wohl nur einfach das Label nicht aktualisiert.

[edit]
Zitat:

Delphi-Quellcode:
if CheckForWin(GBuffer) then
    begin
      Label1.Caption := '';

Der Rechner tut nur das, was Du ihm sagst.[/edit]

Neutral General 25. Aug 2011 10:22

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Lies was ich geschrieben habe ;)

Naja.. Wenn du gewonnen hast, setzt du (warum auch immer) das Label ja wieder auf ''

Delphi-Quellcode:
if CheckForWin(GBuffer) then
begin
  Label2.Caption := ''; // <-- das muss weg

biby90 25. Aug 2011 10:22

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Zitat:

Zitat von DeddyH (Beitrag 1119523)

Hätte ich mir ja auch denken können.... schon alleine der Name!:oops:

Zitat:

setzt du (warum auch immer) das Label ja wieder auf ''
aahhh!!! Völlig bescheuert was ich da wieder gemacht habe

biby90 25. Aug 2011 10:26

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Jau jetzt läufts.... was würde ich nur ohne Euch und eure Geduld tun?!

Ihr seid einfach die Besten... :thumb::thumb::thumb:

biby90 25. Aug 2011 11:11

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Delphi-Quellcode:
if GPlayer = 1 then
  begin
    Label12.Caption := (Spieler1.Text + ' ist am Zug!');
  end else
    Label12.Caption := (Spieler2.Text + ' ist am Zug!');


Also wie Ihr vielleicht seht will ich jetzt, dass die einzelnen Spieler Namen bekommen.
Ich habe versucht es in die Form zu schreiben, aber das Label zeigt dann nur "ist am Zug" an.... also fehlen die NAmen die in das Edit-Feld eingetragen sind und er wechselt die Namen dann auch nicht...
muss ich es vielleicht mit in den ChangePlayer schreiben? also das ist mir jetzt grad in diesem Moment eingefallen also naja ich probiere es mal....
wenn das falsch ist dann schreibt es jetzt schon bitte

biby90 25. Aug 2011 11:18

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
:|geht nicht

ensaron 25. Aug 2011 12:01

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    ...
  private
    ...
    FAktuellerSpieler: string; //<-- diese Zeile ergänzen.
    ...
Dann in ChangePlayer:

Delphi-Quellcode:
FAktuellerSpieler := Spieler1.Text; //oder halt Spieler2.Text, je nachdem, wer dran ist.


Und die Ausgabe des aktiven Spielers:

Delphi-Quellcode:
Label12.Caption := FAktuellerSpieler + ' ist am Zug.';

biby90 25. Aug 2011 12:37

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Danke. Habe es anders lösen können.

biby90 25. Aug 2011 12:49

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Bei was anderem könnt ich nochmal einen kleinen Schupser gebrauchen.

ich habe jetzt vor, die Spielzüge zu zählen. Erstmal insgesamt und später vielleicht für jeden Spieler einzelnd.

Habt ihr einen kleinen Denkanstoß?

sHoXx 25. Aug 2011 12:59

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
jedesmal, wenn nen label geklickt wird, ne variable hochzählen :D

DeddyH 25. Aug 2011 13:02

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Aber eine globale ;)

biby90 25. Aug 2011 13:12

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
@Deddyh
daran hab ich gedacht :thumb:
Delphi-Quellcode:
procedure TForm1.Label6Click(Sender: TObject);
begin
  if IsFieldEmpty(Label6.Caption) then
  begin
    Label6.Caption := WriteToField(GPlayer);
    Label6.Repaint;
    MakeArray;
    if CheckForWin(GBuffer) then
    begin
      Label12.Caption := ('Spieler ' + IntToStr(GPlayer)+' hat gewonnen!');
      GPlayer := 1;
    end else
    begin
      ChangePlayer;
      Label13.Caption := IntToStr(i+1);
    end;
  end;
end;
Er Zählt nur den ersten Klick und dann bleibt er auf 1 stehen?!

Das ist eigentlich ja so einfach, sodass ich wieder Koplizierter Denke als es ist!

Neutral General 25. Aug 2011 13:14

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Hallo,

Du musst i erhöhen. Nicht nur das erhöhte anzeigen:

Delphi-Quellcode:
i := i + 1; // oder inc(i);
Label13.Caption := IntToStr(i);

biby90 25. Aug 2011 13:15

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
also praktisch so
Delphi-Quellcode:
end else
    begin
      ChangePlayer;
      i := i+1;
      Label13.Caption := IntToStr(i+1);
    end;
sag ich ja... wieder so einfach und zu kompliziert gedacht

oh,. hab dein quelltext über sehen hehe^^

Neutral General 25. Aug 2011 13:15

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Delphi-Quellcode:
end else
    begin
      ChangePlayer;
      i := i+1;
      Label13.Caption := IntToStr(i);
    end;
Nur IntToStr(i). i ist ja dann schon um 1 größer.

biby90 25. Aug 2011 13:24

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Wollte gerade sagen dass er von 2 anfängt zu zählen aber das hat sich ja mit dem letzten Beitrag auch erledigt:-D

biby90 25. Aug 2011 14:00

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Wie mache ich es am Besten wenn ich die Klicks der SPieler einzelnd Zählen lasse?

DeddyH 25. Aug 2011 14:05

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Sei mir nicht böse, aber langsam wird es lächerlich. 2 Spieler, 2 Variablen, da kann man drauf kommen, oder?

biby90 25. Aug 2011 14:12

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Hmmm.. macht Sinn. Ich lass Euch für Heute (Wie versprochen) in frieden.

biby90 26. Aug 2011 08:19

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Guten Morgen!

Ich möchte jetzt den Klickzähler Stoppen, sobald ein Spieler gewonnen hat.
habe es jetzt folgendermaßen:
Delphi-Quellcode:
procedure TForm1.CountClick;
begin
  if GPlayer = 1 then
  begin
    i := i +1;
    Label14.Caption := IntToStr(i);
  end else
    j := j +1;
    Label13.Caption := IntToStr(j);

    if CheckForWin(GBuffer) = true then
    begin
      Exit;
    end;
end;
Die Züge von Spieler 2 werden nicht mehr gezählt aber das von SPieler 1.... es soll ja aber gar nicht mehr gezählt werden... habt ihr eine Idee?

DeddyH 26. Aug 2011 08:29

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
begin und end vergessen?

BTW: Du vergleichst ja schon wieder auf true :?

biby90 26. Aug 2011 08:32

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
upsiii^^ nicht böse sein Papa Deddyh:wink:
ich werds sofort ändern

Butch87 26. Aug 2011 08:33

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Zitat:

Zitat von biby90
habt ihr eine Idee?

Joah.

Die Gewinnabfrage musst du einfach vor dem Aktualisieren der Labels machen.
Ansonsten hat er ja gar nicht die Chance den Code vorzeitig zu verlassen.

Delphi-Quellcode:
procedure TForm1.CountClick;
begin
  if CheckForWin(GBuffer) then // nicht direkt auf true bzw false prüfen (wurde dir schon öfters nahe
                               // gelegt)
  begin
    Exit;
  end;
  if GPlayer = 1 then
  begin
    i := i +1;
    Label14.Caption := IntToStr(i);
  end
  else
  begin
    j := j +1;
    Label13.Caption := IntToStr(j); // ohne Begin/End wird der Teil immer ausgeführt
  end;
end;

DeddyH 26. Aug 2011 08:35

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Die Reihenfolge ist aber nicht das Entscheidende, sondern dass
Zitat:

Delphi-Quellcode:
Label13.Caption := IntToStr(j);

in jedem Fall ausgeführt wird ;)

biby90 26. Aug 2011 08:37

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Alles klar jetzt gehts!

Ja das mit dem auf true prüfen da hatte ich grad nciht dran gedacht aber habs ja jetzt geändert.

wegen der CheckForWin funktion..... warum funktioniert sie eigentlich wenn sie typisiert wurde und anders nicht?

Zitat:

Die Reihenfolge ist aber nicht das Entscheidende,
aber jetzt gehts.

DeddyH 26. Aug 2011 08:43

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Lesestoff zu Arrays

Butch87 26. Aug 2011 08:45

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Zitat:

Zitat von DeddyH
Die Reihenfolge ist aber nicht das Entscheidende, sondern dass

Na doch, da sonst in jedem Fall hochgezählt wird, egal ob schluss ist oder nicht.
Oder steh ich grad aufm Schlauch? :gruebel:

Zitat:

Zitat von biby90
aber jetzt gehts.

In welcher Reihenfolge denn nun?

DeddyH 26. Aug 2011 08:49

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Was ich meinte: der eine Spieler wurde korrekt gezählt, der andere nicht. Das lag eben am fehlenden begin und end. Das ein exit am Ende einer Routine wenig Sinn macht und daher eine umgekehrte Reihenfolge besser ist sehe sogar ich ein :lol:

biby90 26. Aug 2011 08:49

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Die du vorgeschlagen hast....
Delphi-Quellcode:
procedure TForm1.CountClick;
begin
  if CheckForWin(GBuffer) then
  begin
    Exit;
  end;
  if GPlayer = 1 then
  begin
    i := i +1;
    Label14.Caption := IntToStr(i);
  end else
    j := j +1;
    Label13.Caption := IntToStr(j);
end;

DeddyH 26. Aug 2011 08:51

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Und Label13.Caption stimmt? Kann ja irgendwie nicht sein.

Neutral General 26. Aug 2011 08:52

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Achtung!

Delphi-Quellcode:
if CheckForWin(GBuffer) then
begin
  Exit;
end;
if GPlayer = 1 then
begin
  i := i +1;
  Label14.Caption := IntToStr(i);
end else
  j := j +1;
  Label13.Caption := IntToStr(j);
=

Delphi-Quellcode:
if CheckForWin(GBuffer) then
begin
  Exit;
end;

if GPlayer = 1 then
begin
  i := i +1;
  Label14.Caption := IntToStr(i);
end
else
  j := j +1;

Label13.Caption := IntToStr(j); // nicht mehr im ELSE (!)

Butch87 26. Aug 2011 08:53

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Und es fehlt immernoch das Begin und End :D
Delphi-Quellcode:
procedure TForm1.CountClick;
begin
  if CheckForWin(GBuffer) then
  begin
    Exit;
  end;
  if GPlayer = 1 then
  begin
    i := i +1;
    Label14.Caption := IntToStr(i);
  end
  else
  BEGIN // hier
    j := j +1;
    Label13.Caption := IntToStr(j);
  END // und hier
end;
@Neutral: Darauf hamm wir schon des öfteren hingewiesen

biby90 26. Aug 2011 08:54

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Ach mensch hab übersehen dass er mir den gewinner jetzt nicht mehr anzeigt... aber sonst isses schonmal richtig... also er hört ja jetzt koplett dann auf zu zählen wenn jemand gewonnen hat

DeddyH 26. Aug 2011 08:54

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Langsam komme ich mir veralbert vor :roll:

biby90 26. Aug 2011 08:56

AW: tic tac toe.... mal wieder:) versteh aufgabestellung nicht ganz
 
Wieso?
Das klappt doch jetzt... Nur dass ich jetzt nochmal was nachsehen muss. und dass er den gewinner nicht mehr anzeigt hatte ja nichts mit dem Begin und End zu tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.
Seite 4 von 5   « Erste     234 5      

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