mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-08-08 06:12:43 -04:00
added for plugins own dir
git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@1850 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
97d8640f3a
commit
87344de7d4
809 changed files with 790 additions and 722 deletions
364
plugins/qcheckers_plugin/board.cc
Normal file
364
plugins/qcheckers_plugin/board.cc
Normal file
|
@ -0,0 +1,364 @@
|
|||
/***************************************************************************
|
||||
* 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. *
|
||||
***************************************************************************/
|
||||
#include <QLayout>
|
||||
#include <QDebug>
|
||||
|
||||
#include "board.h"
|
||||
#include "common.h"
|
||||
#include "pdn.h"
|
||||
#include "echeckers.h"
|
||||
#include "rcheckers.h"
|
||||
/*
|
||||
#include "newgamedlg.h"
|
||||
|
||||
#include "player.h"
|
||||
#include "humanplayer.h"
|
||||
#include "computerplayer.h"
|
||||
*/
|
||||
|
||||
|
||||
myBoard::myBoard(QWidget* parent)
|
||||
: QFrame(parent)
|
||||
{
|
||||
/*
|
||||
* board & info
|
||||
*/
|
||||
setFrameStyle(QFrame::Box|QFrame::Plain);
|
||||
for(int i=0; i<64; i++)
|
||||
m_fields[i] = new Field(this, i);
|
||||
|
||||
QGridLayout* grid = new QGridLayout(this);
|
||||
grid->setSpacing(0);
|
||||
grid->setMargin(0);
|
||||
for(int i=0; i<4; i++) {
|
||||
for(int k=0; k<4; k++) {
|
||||
grid->addWidget(m_fields[i*8+k+32], i*2, k*2 );
|
||||
grid->addWidget(m_fields[i*8+k ], i*2, k*2+1);
|
||||
grid->addWidget(m_fields[i*8+k+4 ], i*2+1,k*2 );
|
||||
grid->addWidget(m_fields[i*8+k+36], i*2+1,k*2+1);
|
||||
}
|
||||
}
|
||||
|
||||
for(int i=0; i<32; i++)
|
||||
connect(m_fields[i], SIGNAL(click(int)),
|
||||
this, SIGNAL(fieldClicked(int)));
|
||||
|
||||
|
||||
/*
|
||||
* game init
|
||||
*/
|
||||
m_game = 0;
|
||||
|
||||
xpmPat1 = 0;
|
||||
xpmPat2 = 0;
|
||||
xpmFrame= 0;
|
||||
xpmManBlack = 0;
|
||||
xpmManWhite = 0;
|
||||
xpmKingBlack= 0;
|
||||
xpmKingWhite= 0;
|
||||
}
|
||||
|
||||
|
||||
myBoard::~myBoard()
|
||||
{
|
||||
if(m_game)
|
||||
delete m_game;
|
||||
}
|
||||
|
||||
|
||||
void myBoard::setTheme(const QString& path, bool set_white)
|
||||
{
|
||||
// delete them later.
|
||||
QPixmap* p1 = xpmManWhite;
|
||||
QPixmap* p2 = xpmManBlack;
|
||||
QPixmap* p3 = xpmKingWhite;
|
||||
QPixmap* p4 = xpmKingBlack;
|
||||
QPixmap* p5 = xpmPat1;
|
||||
QPixmap* p6 = xpmPat2;
|
||||
QPixmap* p7 = xpmFrame;
|
||||
|
||||
if(path == DEFAULT_THEME) {
|
||||
// just in case no themes installed.
|
||||
xpmPat1 = new QPixmap(":/icons/theme/tile1.png");
|
||||
xpmPat2 = new QPixmap(":/icons/theme/tile2.png");
|
||||
xpmFrame= new QPixmap(":/icons/theme/frame.png");
|
||||
xpmManBlack = new QPixmap(":/icons/theme/manblack.png");
|
||||
xpmManWhite = new QPixmap(":/icons/theme/manwhite.png");
|
||||
xpmKingBlack= new QPixmap(":/icons/theme/kingblack.png");
|
||||
xpmKingWhite= new QPixmap(":/icons/theme/kingwhite.png");
|
||||
} else {
|
||||
xpmPat1 = new QPixmap(path+"/"THEME_TILE1);
|
||||
xpmPat2 = new QPixmap(path+"/"THEME_TILE2);
|
||||
xpmFrame= new QPixmap(path+"/"THEME_FRAME);
|
||||
xpmManBlack
|
||||
= new QPixmap(path+"/"THEME_MANBLACK);
|
||||
xpmManWhite
|
||||
= new QPixmap(path+"/"THEME_MANWHITE);
|
||||
xpmKingBlack
|
||||
= new QPixmap(path+"/"THEME_KINGBLACK);
|
||||
xpmKingWhite
|
||||
= new QPixmap(path+"/"THEME_KINGWHITE);
|
||||
}
|
||||
|
||||
setColorWhite(set_white);
|
||||
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->setPattern(xpmPat2);
|
||||
for(int i=32; i<64; i++)
|
||||
m_fields[i]->setPattern(xpmPat1);
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->setFrame(xpmFrame);
|
||||
|
||||
setFixedSize(xpmMan1->width()*8 + 2*frameWidth(),
|
||||
xpmMan1->height()*8 + 2*frameWidth());
|
||||
|
||||
if(m_game)
|
||||
do_draw();
|
||||
|
||||
// now delete.
|
||||
if(p1) delete p1;
|
||||
if(p2) delete p2;
|
||||
if(p3) delete p3;
|
||||
if(p4) delete p4;
|
||||
if(p5) delete p5;
|
||||
if(p6) delete p6;
|
||||
if(p7) delete p7;
|
||||
}
|
||||
|
||||
|
||||
void myBoard::reset()
|
||||
{
|
||||
int new_board[32];
|
||||
|
||||
for(int i=0; i<12; i++)
|
||||
new_board[i]=MAN2;
|
||||
for(int i=12; i<20; i++)
|
||||
new_board[i]=FREE;
|
||||
for(int i=20; i<32; i++)
|
||||
new_board[i]=MAN1;
|
||||
|
||||
// reset frames.
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->showFrame(false);
|
||||
|
||||
if(m_game)
|
||||
m_game->setup(new_board);
|
||||
|
||||
do_draw();
|
||||
}
|
||||
|
||||
|
||||
void myBoard::adjustNotation(bool bottom_is_white)
|
||||
{
|
||||
if(!m_game)
|
||||
return;
|
||||
|
||||
QString notation = (m_game->type()==ENGLISH
|
||||
? ENOTATION : QString(RNOTATION).toUpper());
|
||||
|
||||
if(bottom_is_white) {
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->setLabel(notation.mid(i*2,2).trimmed());
|
||||
} else {
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->setLabel(notation.mid(62-i*2,2).trimmed());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void myBoard::do_draw()
|
||||
{
|
||||
for(int i=0; i<32; i++) {
|
||||
switch(m_game->item(i)) {
|
||||
case MAN1:
|
||||
m_fields[i]->setPicture(xpmMan1);
|
||||
break;
|
||||
case MAN2:
|
||||
m_fields[i]->setPicture(xpmMan2);
|
||||
break;
|
||||
case KING1:
|
||||
m_fields[i]->setPicture(xpmKing1);
|
||||
break;
|
||||
case KING2:
|
||||
m_fields[i]->setPicture(xpmKing2);
|
||||
break;
|
||||
default:
|
||||
m_fields[i]->setPicture(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void myBoard::setColorWhite(bool b)
|
||||
{
|
||||
if(b) {
|
||||
xpmMan1 = xpmManWhite;
|
||||
xpmMan2 = xpmManBlack;
|
||||
xpmKing1= xpmKingWhite;
|
||||
xpmKing2= xpmKingBlack;
|
||||
} else {
|
||||
xpmMan1 = xpmManBlack;
|
||||
xpmMan2 = xpmManWhite;
|
||||
xpmKing1= xpmKingBlack;
|
||||
xpmKing2= xpmKingWhite;
|
||||
}
|
||||
}
|
||||
|
||||
void myBoard::setNotation(bool s, bool above)
|
||||
{
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->showLabel(s, above);
|
||||
}
|
||||
|
||||
/*
|
||||
void myBoard::do_move(const QString& move)
|
||||
{
|
||||
qDebug() << __PRETTY_FUNCTION__;
|
||||
if(!m_current->isHuman()) {
|
||||
add_log(myBoard::Warning, tr("It's not your turn."));
|
||||
return;
|
||||
}
|
||||
|
||||
int from_num, to_num;
|
||||
if(extract_move(move, &from_num, &to_num)) {
|
||||
slot_click(from_num);
|
||||
slot_click(to_num);
|
||||
} else
|
||||
add_log(myBoard::Warning, tr("Syntax error. Usage: /from-to"));
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
bool myBoard::convert_move(const QString& move_orig, int* from_num, int* to_num)
|
||||
{
|
||||
QString move = move_orig.toUpper().replace('X', '-');
|
||||
QString from;
|
||||
QString to;
|
||||
int sect = move.count('-');
|
||||
|
||||
*from_num = *to_num = -1;
|
||||
|
||||
from = move.section('-', 0, 0);
|
||||
to = move.section('-', sect, sect);
|
||||
|
||||
if(from!=QString::null && to!=QString::null) {
|
||||
for(int i=0; i<32; i++) {
|
||||
if(m_fields[i]->label()==from)
|
||||
*from_num = m_fields[i]->number();
|
||||
if(m_fields[i]->label()==to)
|
||||
*to_num = m_fields[i]->number();
|
||||
}
|
||||
|
||||
if(*from_num>=0 && *to_num>=0)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void myBoard::setNotationFont(const QFont& f)
|
||||
{
|
||||
setFont(f);
|
||||
for(int i=0; i<32; i++)
|
||||
m_fields[i]->fontUpdate();
|
||||
}
|
||||
|
||||
|
||||
void myBoard::setGame(int rules)
|
||||
{
|
||||
if(m_game)
|
||||
delete m_game;
|
||||
|
||||
if(rules==ENGLISH) {
|
||||
m_game = new ECheckers();
|
||||
} else {
|
||||
m_game = new RCheckers();
|
||||
}
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
|
||||
void myBoard::selectField(int field_num, bool is_on)
|
||||
{
|
||||
for(int i=0; i<32; i++) {
|
||||
if(i==field_num)
|
||||
m_fields[i]->showFrame(is_on);
|
||||
else
|
||||
m_fields[i]->showFrame(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
QString myBoard::doMove(int from_num, int to_num, bool white_player)
|
||||
{
|
||||
bool bottom_player = (white_player && (xpmMan1==xpmManWhite))
|
||||
|| (!white_player && (xpmMan1==xpmManBlack));
|
||||
|
||||
int from_pos = from_num;
|
||||
int to_pos = to_num;
|
||||
|
||||
if(!bottom_player) {
|
||||
from_pos = 31-from_pos;
|
||||
to_pos = 31-to_pos;
|
||||
m_game->fromString(m_game->toString(true));
|
||||
}
|
||||
if(!m_game->go1(from_pos, to_pos)) {
|
||||
return QString::null;
|
||||
/*
|
||||
qDebug() << __PRETTY_FUNCTION__
|
||||
<< from_pos << "," << to_pos
|
||||
<< " could not move.";
|
||||
*/
|
||||
}
|
||||
if(!bottom_player) {
|
||||
m_game->fromString(m_game->toString(true));
|
||||
}
|
||||
|
||||
do_draw();
|
||||
|
||||
return QString("%1?%3")
|
||||
.arg(m_fields[from_num]->label())
|
||||
.arg(m_fields[to_num]->label());
|
||||
}
|
||||
|
||||
|
||||
bool myBoard::doMove(const QString& move, bool white_player)
|
||||
{
|
||||
int from_pos, to_pos;
|
||||
if(convert_move(move, &from_pos, &to_pos)) {
|
||||
doMove(from_pos, to_pos, white_player);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void myBoard::doFreeMove(int from, int to)
|
||||
{
|
||||
int old_to = m_game->item(to);
|
||||
int old_from = m_game->item(from);
|
||||
m_game->setItem(to, old_from);
|
||||
m_game->setItem(from, old_to);
|
||||
do_draw();
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue