V
Da gibt es unzählige Möglichkeiten. Hier was ganz altes von mir:
class Stellung
{
private:
Farbe brett[9][8];//jeweils 2 mehr für den Todesrand
int hoehe[9];
...
int Stellung::pruefung(Farbe farbe,int x,int y,int deltax,int deltay) const
{
int anzahl=0;
x+=deltax;
y+=deltay;
while(brett[x][y]==farbe)
{
++anzahl;
x+=deltax;
y+=deltay;
}
return anzahl;
}
int Stellung::pruefungNO(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,1,1);
}
int Stellung::pruefungO(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,1,0);
}
int Stellung::pruefungSO(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,1,-1);
}
int Stellung::pruefungS(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,0,-1);
}
int Stellung::pruefungSW(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,-1,-1);
}
int Stellung::pruefungW(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,-1,0);
}
int Stellung::pruefungNW(Farbe farbe,int x,int y) const
{
return pruefung(farbe,x,y,-1,1);
}
Wert Stellung::bewerte() const//Aus Sicht dessen, der gerade dran ist
{
if(istUnentschieden())
return UNENTSCHIEDEN;
int x=sageLetztenZug();
int y=hoehe[x]-1;
Farbe farbe=werWarDran();
if(at(x,y)==farbe)
{
if(pruefungS(farbe,x,y)>=3) return verlorenBeiZug(zugNummer);
if(pruefungW(farbe,x,y)+pruefungO(farbe,x,y)>=3) return verlorenBeiZug(zugNummer);
if(pruefungSW(farbe,x,y)+pruefungNO(farbe,x,y)>=3) return verlorenBeiZug(zugNummer);
if(pruefungNW(farbe,x,y)+pruefungSO(farbe,x,y)>=3) return verlorenBeiZug(zugNummer);
}
return UNBEKANNT;
}