![]() |
Re: Reversi-Probleme mit Funktionen
Zitat:
|
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. |
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?
|
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? |
Re: Reversi-Probleme mit Funktionen
nur die aufgaben, das programm wird eigentlich nie fertig
|
Re: Reversi-Probleme mit Funktionen
dann mach erstmal istspielfeld, das ist einfacher ^^
|
Re: Reversi-Probleme mit Funktionen
ich will ja nix sagen aber... istspielfeld ist ja wohl fertig, die muss ich nur noch verknüpfen
|
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:
PS: zeig mal istspielfeld ;)
procedure sort(var i,k:integer);
|
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! |
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. |
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