Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPlease (https://www.delphipraxis.net/25275-fehler-warsch-eine-abfrage-tic-tac-toe-ki-helpplease.html)

M4ST3R86 4. Jul 2004 22:57

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
ich bekomme dadurch im kompletten code fehler.

Darf ich dir das programm mal schicken? Das du mal drübergucken kannst. Brauche umbedingt hilfe.

Mirilin 4. Jul 2004 23:00

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
:hi:

Du musst natürlich dann die ganzen Aufrufe dem entsprechend verändern. Überleg Dir doch nochmals kurz die logik des ganzen... :)


mfg Tobias

M4ST3R86 4. Jul 2004 23:07

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
ja klar nur das prob ist ich habe kaum mehr zeit. Muss das mittwoch fertig haben *G* :wall:

Weißt du wie mans verbessern kann? Haste schonmal probiert?

scp 4. Jul 2004 23:58

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
Also, ich habe jetzt eine komplett lauffähige Version. Da ich aber hier nich einfach was abliefern will, sondern auch ein bißchen zum selber nachdenken anregen will, hier ein paar Tips.
SetField sieht jetzt so aus, CheckForFreeField wie oben:
Delphi-Quellcode:
//Setzt das Spielfeld 'nFieldIdx' auf den wert 'fieldType' und weist 'img' das passende Bild zu
procedure TForm1.SetField( img : TImage; nFieldIdx : integer; fieldType : TFieldType );
var x,y : integer;
begin
  x := ((nFieldIdx) mod 3);
  y := ((nFieldIdx-x) div 3);

  //Ist das Feld 'nFieldIdx' noch frei?
  if ( CheckForFreeField( x,y {nFieldIdx} ) ) then begin
    //Setzt das Feld 'nFieldIdx' auf den Wert 'fieldType'
    GameBoard[ x,y ] := fieldType;

    //Je nach 'fieldType' das passende Bild an 'img' übergeben
    case fieldType of
      ftX : img.Picture.Assign( ImageX.Picture );
      ftO : img.Picture.Assign( ImageO.Picture );
    end;
  end;
end;
- Überall wo du nFieldIdx in x und y umrechnen willst, kannst du diese Methode verwenden:
Delphi-Quellcode:
  x := ((nFieldIdx) mod 3);
  y := ((nFieldIdx-x) div 3);
- Umgedreht gehts auch:
Delphi-Quellcode:
nFieldIdx := y*3 + x;
- rndIdx wurde in SimpleKI noch nicht initialisiert
- statt random (2) musst du random (3) verwenden, da die 2er-Felder sonst nie von der KI benutzt werden und es deshalb zu einer bösen Endlosschleife kommt

M4ST3R86 5. Jul 2004 17:13

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
Also bei deinem code oben meckert er schon da und zwar zu viele parameter. Liegt das an den images oder woran?


Delphi-Quellcode:
 if ( CheckForFreeField( x,y {nFieldIdx} ) ) then begin

xineohp 5. Jul 2004 17:42

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
moin,

du musst natürlich die von Mirilin genannte Version von CheckForFreeField verwenden, nur die erwartet zwei Parameter ...

M4ST3R86 5. Jul 2004 18:27

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
Jetzt habe ich hier bei
if ( not CheckForFreeField( nFieldNum ) ) then begin
Label1.Caption := 'Move again';
exit;

bei nFieldNum nicht genügend wirkliche parameter. Wieso?



Delphi-Quellcode:
procedure TForm1.ImageK0Click(Sender: TObject);
var
  nFieldNum : integer;
  nCurrImg : TImage;
begin
  //Falls der Sender nicht von Typ TImage ist abbrechen
  if not ( Sender is TImage ) then
    exit;

  //Wenn 'bGameOver' auf true gesetzt ist, ebenfalls abbrechen
  if bGameOver then
    exit;

  //Den Sender einer Hilfvariable übergeben
  nCurrImg := ( Sender as TImage );
  //Den Tag (Feldnummer) des Senders einer Hilfvariable übergeben
  nFieldNum := nCurrImg.Tag;

  //Überprüfen ob das geklickte Feld frei ist, falls nicht aus der
  //Funktion springen
  if ( not CheckForFreeField( nFieldNum ) ) then begin
    Label1.Caption := 'Move again';
    exit;
  end;

xineohp 5. Jul 2004 19:09

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
das ist doch wohl logisch! die procedure erwartet ja nun zwei Parameter ... ein x für die Spalte und ein y für die Zeile, keinen Index mehr der die Felder einzeln abzählt!

umrechnen mit:
Zitat:

Zitat von scp
- Überall wo du nFieldIdx in x und y umrechnen willst, kannst du diese Methode verwenden:
Source:

x := ((nFieldIdx) mod 3);
y := ((nFieldIdx-x) div 3);


M4ST3R86 5. Jul 2004 19:23

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
ja guck mal in dem code da sin werder x noch y. Also wie sall das gehen?

xineohp 5. Jul 2004 19:46

Re: Fehler (warsch.) eine Abfrage. In Tic Tac Toe KI. HelpPl
 
s.o.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Seite 2 von 2     12   

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