Einzelnen Beitrag anzeigen

Benutzerbild von PhilmacFLy
PhilmacFLy

Registriert seit: 20. Jan 2008
Ort: Nürnberg
340 Beiträge
 
FreePascal / Lazarus
 
#1

4-gewinnt Gewinn Überprüfung

  Alt 19. Aug 2009, 10:42
Hoi DP'ler
bevor ir euch denk schon wieder einer der ne fertige Gewinn überprüfung haben will, sag ich euch gleich das ich keine haben will sondern selber eine geschrieben hab, die wie ich finde eigentlich ziemlich simpel ist. BTW: Ich geh davon aus das das Spielfeld ein 2D Array ist.

Das ganze funktioniert wie folgt:
Im prinzip gibt es bie vier gewinnt nur 4 Richtungen:
rechts - links
oben - unten
linksoben - rechtsunten
rechtsoben - linksunten

Meine Funktion geht nun immer 3 steine nach rechts, und sobald dort einer ind z.B. grün vorliegt wird zu einer Varable 1 dazu gezählt. Das selbe mach ich dann nach links ohne die Variable zu reseten. Diese wird erst beim Richtungswechsel geresetet.
Um nicht in das folgende Problem zu laufen ooxoo, sprich 2 grüne ein roter und wieder 2 grüne, setzt ich einen Boolean der ausagt ob vor dem jetzigen geprüften Stein ein Stein der gleichen Farbe liegt.
Wie der eine oder andere gemerkt hat funktioniert diese Fukntion nur für eine Farbe.

Als fertiger Code sieht das dann so aus:
Delphi-Quellcode:
procedure Tform1.wing(Spalte, Reihe: Integer);
var
r, s, a, w: Integer;
vor: Boolean;
begin
r := Reihe;
s := Spalte;
a := 0;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(s);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    inc(a);
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;
r := Reihe;
s := Spalte;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(s, -1);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    begin
    inc(a);
    vor := true;
    end
  else
    vor := false;
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;

r := Reihe;
s := Spalte;
a := 0;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(r);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    inc(a);
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;
r := Reihe;
s := Spalte;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(r, -1);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    begin
    inc(a);
    vor := true;
    end
  else
    vor := false;
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;

r := Reihe;
s := Spalte;
a := 0;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(r);
  inc(s);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    inc(a);
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;
r := Reihe;
s := Spalte;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(r, -1);
  inc(s, -1);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    begin
    inc(a);
    vor := true;
    end
  else
    vor := false;
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;

r := Reihe;
s := Spalte;
a := 0;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(r, -1);
  inc(s);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    inc(a);
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;
r := Reihe;
s := Spalte;
w := 1;
vor := true;
while w <= 3 do
  begin
  inc(r);
  inc(s, -1);
  inc(w);
  if
    (SFeld[s,r] = Green_Spielfeld) and (vor)
  then
    begin
    inc(a);
    vor := true;
    end
  else
    vor := false;
  if
    a = 3
  then
    begin
    showmessage('Sie haben gewonnen Sie Zipfel');
    w := 4;
    end;
  end;
end;
Philipp N.
"Programmiern ist wie küssen:
Mann kan darüber reden, mann kann es beschreiben,
aber man weiss erst, was es bedeutet,
wenn man es getan hat"
  Mit Zitat antworten Zitat