예제 #1
0
QString Board::getState()
{
	QString state;
	QString entry, tmp;
	Move m;

	/* remove any highlighting */
	showMove(m,0);

	/* Color + Counts */
	state += (char) ('A' + color1Count);
	state += (char) ('A' + color2Count);
	state += (char) ('A' + 3*color + field[order[0]]);
	
	/* Board (field values can be 0/1/2; 3 fields coded in one char */
	for(int i=1;i<=60;i+=3)
	  state+= (char) ('@' + 9*field[order[i]] + 
			  3*field[order[i+1]] + field[order[i+2]] );

	/* -> 23 chars */
	return state;
}	
예제 #2
0
void BoardWidget::mouseMoveEvent( QMouseEvent* pEvent )
{
    if ((!gettingMove && !editMode) || !mbDown) return;

    int pos = positionOf( pEvent->x(), pEvent->y() );
    if (pos == oldPos) return;
    oldPos = pos;

    if (editMode) {
	int f = fieldOf(pos);
	if (field[f] != Board::out && field[f] != editColor) {
	    if      (editColor == Board::color1) field[f] = Board::color1bright;
	    else if (editColor == Board::color2) field[f] = Board::color2bright;
	    else if (field[f] == Board::color1)  field[f] = Board::color1bright;
	    else if (field[f] == Board::color2)  field[f] = Board::color2bright;

	    if (renderMode) updatePieces();
	    update();
	}
	return;
    }

    if (!startValid) {
	/* We haven't a valid move yet. Check if we are over a valid start */

	startValid = isValidStart(pos, (pEvent->button() == Qt::MidButton));
	qDebug() << "Start pos " << pos << " is valid: " << startValid;
	//    actMove.print();

	if (!startValid) return;
	startPos = oldPos = pos;

	showStart(actMove,1);
	startShown = true;

	QString tmp;
	actValue = - board.calcEvaluation();
	tmp = tr("Board value: %1").arg(actValue);
	emit updateSpy(tmp);
	return;
    }

    /* restore board */
    updatePosition();
    startShown = false;

    if (isValidEnd(pos)) {
	//    actMove.print();

	board.playMove(actMove);
	int v = board.calcEvaluation();
	board.takeBack();

	QString tmp;
	tmp.sprintf("%+d", v-actValue);
	QString str = QString("%1 : %2").arg(actMove.name()).arg(tmp);
	emit updateSpy(str);

	showMove(actMove,3);
	setCursor(*arrow[shownDirection]);
    }
    else {
	QString tmp;

	setCursor(Qt::CrossCursor);
	if (pos == startPos) {
	    showStart(actMove,1);
	    startShown = true;
	    tmp = tr("Board value: %1").arg(actValue);
	}
	else {

	    if (renderMode) updatePieces();
	    update();
	}
	emit updateSpy(tmp);
    }
}