Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Reversi-Probleme mit Funktionen (https://www.delphipraxis.net/51464-reversi-probleme-mit-funktionen.html)

tankm26 14. Aug 2005 17:28

Re: Reversi-Probleme mit Funktionen
 
Zitat:

Zitat von Muetze1
Moin!

Rekursive Funktionen!

Beispiel dazu

MfG
Muetze1

danke schonmal, das werde ich mir mal anschauen.

DGL-luke 14. Aug 2005 18:30

Re: Reversi-Probleme mit Funktionen
 
wofür soll rekursivität beim prüfen gut sein?

pruefen prüft doch, wie viele steine eingeschlossen sind. zwischen zwei koordinaten.du brauchst also x|y und dx|dy.

das einbinden stimmt soweit, bloß dass es zwei params zu wenig sind.

tankm26 14. Aug 2005 18:40

Re: Reversi-Probleme mit Funktionen
 
wie finde ich denn heraus bzw. wie kann ich es programmieren, dass das programm den nächsten gleichfarbigen Stein findet?

DGL-luke 14. Aug 2005 19:12

Re: Reversi-Probleme mit Funktionen
 
einfach nach unten/rechts/rechts-oben durchprüfen, wann die selbe farbe kommt

aber das ist ja gar nicht deine aufgabe, oder?

EDIT: SOllst du eigentlich ein voll lauffähiges udn spielbares reversi machen, oder nur das, was in aufgaben drinsteht? also die zwei funktionen?

tankm26 14. Aug 2005 19:36

Re: Reversi-Probleme mit Funktionen
 
nur die aufgaben, das programm wird eigentlich nie fertig

DGL-luke 14. Aug 2005 19:51

Re: Reversi-Probleme mit Funktionen
 
dann mach erstmal istspielfeld, das ist einfacher ^^

tankm26 15. Aug 2005 15:31

Re: Reversi-Probleme mit Funktionen
 
ich will ja nix sagen aber... istspielfeld ist ja wohl fertig, die muss ich nur noch verknüpfen

DGL-luke 15. Aug 2005 17:28

Re: Reversi-Probleme mit Funktionen
 
dann helf ich dir hier mal mit n bisschen code auf die sprünge :)

Delphi-Quellcode:
function pruefen(x,y,dx,dy:integer):integer; //pruefen ist eigentlich nur ein wrapper für die drei richtigen prüffunktionen
var
begin
if x=dx then //wenn es senkrecht ist
 result:=processvertical(x,y,dy)
else if y=dy then // wenn es waagerecht ist
 result:=processhorizontical(x,dx,y)
else //wenn es diagonal ist
 result:=processdiagonal(x,y,dx,dy);
end;

function processvertical(x,y,dy:integer):integer;
var i:integer;
    count:integer;
    encplayer:integer; //farbe des eingeschlossenen
begin
sort(y,dy); //stellt sicher, dass es von oben nach unten geht - selber machen ;)

if not (feld[x,y]=feld[x,dy]) then //der erste stein muss die selbe farbe haben wie der letzte
 begin
  result:=-1; //Fehler!
  exit;      //Abbruch!
 end
else
 begin
  if     feld[x,y]=GRÜN then encplayer:=ROT
  else if feld[x,y]=ROT then encplayer:=GRÜN;
  else //wenn das feld leer ist
   begin
    result:=-1;
    exit;
   end;
 end;

count:=0; //initialisieren

for i := y+1 to dy-1 do //ersten und letzten stein auslassen
 begin
  if feld[x,i]=encplayer then count:=count+1;
  else
   begin
    result:=-2; //Kein fehler, aber keine geschlossene reihe
    exit;
   end;
 end;

result:=count;
end;

Es würde jetzt bereits schon fast (*) für senkrechte reihen funktionieren, unter der bedingungen, dass auch die einschließenden Steine in den bereich einbezogen werden.

Rückgabewerte:
>= 0: Menge der eingeschlossenen Steine
-1: Fehler
-2: Reihe unterbrochen

Den Rest solltest du selber schaffen :thumb:

(*): sort fehlt. es sollte so definiert sein:
Delphi-Quellcode:
procedure sort(var i,k:integer);
PS: zeig mal istspielfeld ;)

tankm26 15. Aug 2005 19:28

Re: Reversi-Probleme mit Funktionen
 
also, das sieht ja reichlichst kompliziert aus.

Aber ich werde auch mal versuchen, das zu durchdenken/zu verstehen/ einzubauen.


die heute im unterricht propagierte lösung krame ich nachher mal heraus.

Danke schonmal für deine (eure) Hilfe!

ichbins 15. Aug 2005 20:17

Re: Reversi-Probleme mit Funktionen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe selbst ein REVERSI-Spiel sammt KI geschrieben. Vielleicht hilft dir das ja irgendwie weiter. [Noch nicht ganz fertig, irgendwie hängt er sich nach ein paar Minuten immer auf. Ich wollte es eh mal als Open-Source posten]. Ich lade es mal hier hoch:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 Uhr.
Seite 2 von 3     12 3      

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 by Thomas Breitkreuz