127 lines
3.1 KiB
C++
127 lines
3.1 KiB
C++
/*
|
||
* This file is part of Abacus.
|
||
* Copyright (C) 1997 Kai Nickel
|
||
*
|
||
* Abacus is free software: you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation, either version 3 of the License, or
|
||
* (at your option) any later version.
|
||
*
|
||
* Abacus is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU General Public License
|
||
* along with Abacus. If not, see <http://www.gnu.org/licenses/>.
|
||
*
|
||
*/
|
||
#ifndef INCLUDE_BOARD_HPP
|
||
#define INCLUDE_BOARD_HPP
|
||
/*****************************************************************************************
|
||
Board.hpp
|
||
------------------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
------------------------------------------------------------------------------------------
|
||
03.01.1997
|
||
*****************************************************************************************/
|
||
|
||
#include "Status.hpp"
|
||
|
||
|
||
class Board
|
||
{
|
||
public:
|
||
|
||
char field[62]; // Spielfeld
|
||
char me, you; // Aktiver Spieler und Gegenspieler
|
||
|
||
static const char black;
|
||
static const char white;
|
||
static const char empty;
|
||
static const int next[61][6];
|
||
|
||
Board();
|
||
|
||
int outBalls(char player) const;
|
||
|
||
/*
|
||
** Initialisierung mit Startboard
|
||
*/
|
||
|
||
void Clear();
|
||
|
||
/*
|
||
** Brett als ASCII-Kunstwerk nach cout schicken
|
||
*/
|
||
|
||
//void Show() const;
|
||
|
||
/*
|
||
** Testet, ob Zug legal ist.
|
||
** Es wird vorausgesetzt, dass alle drei Kugeln von der
|
||
** selben Farbe sind und in einer Reihe liegen. Sonst aber nichts.
|
||
**
|
||
** Rueckgabewert: 1 eine Kugel des Gegeners flog raus
|
||
** 0 keine Kugel folg raus
|
||
** -1 Fehler: eigene Kugel(n) rausgeschmissen
|
||
** -2 Fehler: keine Uebermacht
|
||
** -3 Fehler: seitlich nicht leer
|
||
** -5 Fehler: sonstiges
|
||
*/
|
||
|
||
int Test(int, int dir, int, int) const;
|
||
|
||
/*
|
||
** Fuehrt Zug ungeprueft aus
|
||
*/
|
||
|
||
void Move(int, int dir, int, int);
|
||
|
||
/*
|
||
** Fuehrt Zug fuer 'me' aus
|
||
*/
|
||
|
||
void Computer_Move(Status& status, int depth);
|
||
|
||
/*
|
||
** Speichern und Laden
|
||
*/
|
||
|
||
BOOL Save(char* filename);
|
||
BOOL Load(char* filename);
|
||
|
||
/*
|
||
** Retourniert Richtung, in der sich b von a befindet (oder -1)
|
||
*/
|
||
|
||
static int Dir(int a, int b);
|
||
|
||
private:
|
||
|
||
int outwhite, outblack; // Anz. der verlorenen Kugeln
|
||
int value; // Bewertungsindex f<>r white
|
||
|
||
char ChangePosTo(int pos, char neu); // <20>ndert Position in neue Farbe und
|
||
// retourniert alte. F<>hrt randwhite/black
|
||
// mit.
|
||
|
||
|
||
int Test1 (int, int dir) const;
|
||
void Move1 (int, int dir);
|
||
|
||
int Evaluate() const;
|
||
|
||
int AlphaBeta(int depth, int alpha, int beta) const;
|
||
|
||
int PrincipalVariation(int depth, int alpha, int beta);
|
||
|
||
|
||
|
||
BOOL NextMove(int &pos, int &dir);
|
||
|
||
};
|
||
#endif
|