Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi gewinnüberprüfung diagonalen vier gewinnt (https://www.delphipraxis.net/134499-gewinnueberpruefung-diagonalen-vier-gewinnt.html)

mexman 23. Mai 2009 12:12


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

toms 24. Mai 2009 10:12

Re: gewinnüberprüfung diagonalen vier gewinnt
 
Hallo

Schau dir mal die etwas elegantere Funktion FourInARow() beim delphiforfun.org-Four-In-A-Row Spiel an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.

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