AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

4-gewinnt Gewinn Überprüfung

Ein Thema von PhilmacFLy · begonnen am 19. Aug 2009 · letzter Beitrag vom 19. Aug 2009
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: 4-gewinnt Gewinn Überprüfung

  Alt 19. Aug 2009, 11:36
Man benötigt eine explizite 'Gewinn'-Funktion nur selten, da sich der Gewinnn i.A. aus der Stellungsbewertung ergibt. Ein Parameter wäre die Anzahl der ununterbrochenen Reihen einer Farbe. Die folgene Routine berechnet für beide Spieler die Anzahl aller durchgehenden Reihen. Dabei wird jede Reihe mehrfach gezählt, was zum Schluss wieder kompensiert wird.

Nach dem Durchlauf fragt man einfach 'Result[ActivePlayer,4]' ab, wenn 4 Steine zum gewinnen reichen. Die Funktion eignet sich auch für Go-Bang/Gomoku und Tic-Tac-Toe (wofür sie etwas überdimensioniert ist).

Delphi-Quellcode:
Type
  TBoard = Array [0..N-1, 0..N-1] Of TPlayer;
  TRowCountResultArray [TPlayer, 1..N-1] Of Integer;

Procedure CountAllRows (Board :TBoard; Var Results : TRowCountResultArray);
Var
  i,j,d : Integer;
  c : TPlayer;

  Procedure _Count(i0, j0, di, dj : Integer);
  Var
    r, d, i, j : Integer;
    c : TPlayer;
    
  Begin
    r := 1;
    c := Board[i0,j0];
    For d:=0 to 1 do Begin // in beide Richtungen (di,dj und -di, -dj) gehen
      i := i0 + di;
      j := j0 + dj;
      While (i in [0..N-1]) and (j in [0..N-1]) and (Board[i,j] = c) do Begin
        inc(r);
        inc(i, di);
        inc(j, dj);
      End;
      di := -di;
      dj := -dj;
    End;
    Inc(Results[c,r]);
  End;
 
      
Begin
  FillChar (Results, SizeOf(Results),0);
  For i:=0 to N-1 do
    For j:=0 to N-1 do
      For d:=0 to 2 do
        _Count(i,j,-1, 2*d-1);

// Jede 2er Reihe wird 2x gefunden, jede 3er Reihe usw.
  For c:=Low(TPlayer) To High (TPlayer) Do
    For i:=1 to N-1 do
      Results[c,i] := Results[c,i] div i;
End;
getippt und nicht getestet.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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