![]() |
gewinnüberprüfung diagonalen vier gewinnt
Hey Leute,
um die Diagonalen auf eine "Viererreihe" zu überprüfen habe ich mir (für von links unten nach rechts oben) folgendes ausgedacht:
Delphi-Quellcode:
function gewinnabfrage_diagonale(spielfeld:tspielfeld;m,n:integer):boolean;
var p,rot,gelb:integer; begin for p:=1 to 5 do if (m<7) and (n>0) then //damit das array nicht verlassen wird (spielfeld[1..7,1..6]) if spielfeld[m,n] = spielfeld[m+1,n-1] then begin inc(m); dec(n); if spielfeld[m,n]<>'X' then if spielfeld[m,n]='R' then begin inc(rot); gelb:=0; if rot=4 then result:=true; end else begin inc(gelb); rot:=0; if gelb=4 then result:=true; end end else if (rot=3) and (spielfeld[m,n]='R') then result:=true else if (gelb=3) and (spielfeld[m,n]='G') then result:=true else begin inc(m); inc(n); gelb:=0; rot:=0; end; end; function gewinnabfrage(spielfeld:tspielfeld):boolean; var x,y:integer; begin //hier stehen die gewinnabfragen für die spalten und zeilen for x:= 1 to 4 do if gewinnabfrage_diagonale(spielfeld,x,6)=true then result:=true; for y:=6 downto 4 do if gewinnabfrage_diagonale(spielfeld,1,y)=true then result:=true; end; Einige Diagonalen werden bereits erkannt, es handelt sich bei den erkannten Diagonalen um diese, die ihren "Fußpunkt" auf der untersten Reihe haben. Diagonalen, die sozusagen in der Luft hängen, werden nicht erkannt. Mit dem Debugger habe ich den Fheler nicht gefunden. Kann mir vllt. jmd sagen, wo der Fehler steckt? Ich wäre sehr dankbar! mexman |
Re: gewinnüberprüfung diagonalen vier gewinnt
Hallo
Schau dir mal die etwas elegantere Funktion FourInARow() beim ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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