mirror of
https://github.com/RetroShare/RetroShare.git
synced 2024-10-01 02:35:48 -04:00
106 lines
3.3 KiB
C
106 lines
3.3 KiB
C
|
/***************************************************************************
|
||
|
* Copyright (C) 2002-2003 Andi Peredri *
|
||
|
* andi@ukr.net *
|
||
|
* Copyright (C) 2004-2005 Artur Wiebe *
|
||
|
* wibix@gmx.de *
|
||
|
* *
|
||
|
* This program 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 2 of the License, or *
|
||
|
* (at your option) any later version. *
|
||
|
* *
|
||
|
* This program 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 this program; if not, write to the *
|
||
|
* Free Software Foundation, Inc., *
|
||
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||
|
***************************************************************************/
|
||
|
|
||
|
#ifndef CHECKERS_H
|
||
|
#define CHECKERS_H
|
||
|
|
||
|
|
||
|
#include <QString>
|
||
|
|
||
|
|
||
|
// do not change - hard coded
|
||
|
#define NONE 0
|
||
|
#define MAN1 1
|
||
|
#define KING1 2
|
||
|
#define FREE 3
|
||
|
#define KING2 4
|
||
|
#define MAN2 5
|
||
|
#define FULL 6
|
||
|
|
||
|
#define UL -6
|
||
|
#define UR -5
|
||
|
#define DL 5
|
||
|
#define DR 6
|
||
|
|
||
|
|
||
|
class Checkers
|
||
|
{
|
||
|
public:
|
||
|
Checkers();
|
||
|
virtual ~Checkers() {}
|
||
|
|
||
|
bool setup(int setupboard[]);
|
||
|
virtual bool go1(int from, int to)=0;
|
||
|
|
||
|
void go2();
|
||
|
|
||
|
void setSkill(int i) { levelmax=i; };
|
||
|
int skill() const { return levelmax; }
|
||
|
virtual int type() const = 0;
|
||
|
|
||
|
int item(int i) const { return board[internal(i)]; }
|
||
|
void setItem(int i, int item) { board[internal(i)] = item; }
|
||
|
|
||
|
// string representation of the game board.
|
||
|
// set rotate to switch player sides.
|
||
|
QString toString(bool rotate) const;
|
||
|
bool fromString(const QString&);
|
||
|
|
||
|
// checks for a capture/move for particular stone in external
|
||
|
// representation. human player only.
|
||
|
bool canCapture1(int i) { return checkCapture1(internal(i)); }
|
||
|
bool canMove1(int i) { return checkMove1(internal(i)); }
|
||
|
|
||
|
bool checkMove1() const;
|
||
|
bool checkMove2() const;
|
||
|
virtual bool checkCapture1() const = 0;
|
||
|
virtual bool checkCapture2() const = 0;
|
||
|
|
||
|
protected:
|
||
|
bool checkMove1(int) const;
|
||
|
virtual bool checkCapture1(int) const = 0;
|
||
|
|
||
|
int level; // Current level
|
||
|
int levelmax; // Maximum level
|
||
|
|
||
|
int turn();
|
||
|
void turn(int&, bool capture=false);
|
||
|
|
||
|
int to;
|
||
|
int board[54];
|
||
|
int bestboard[54];
|
||
|
int bestcounter;
|
||
|
|
||
|
virtual void kingMove2(int,int &)=0;
|
||
|
|
||
|
virtual bool manCapture2(int,int &)=0;
|
||
|
virtual bool kingCapture2(int,int,int &)=0;
|
||
|
|
||
|
virtual bool manCapture1(int,int,bool &)=0;
|
||
|
virtual bool kingCapture1(int,int,bool &)=0;
|
||
|
|
||
|
int internal(int) const; // Return internal board position
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif
|