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