/*************************************************************************** * Copyright (C) 2009 by Stefan Bühler * * stbuehler@web.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 "toruschess.h" namespace toruschess { Move::Move(const Field* field, const Pos &from, const Pos &to) : m_from(from), m_to(to), m_prevFrom(field->place(from)), m_prevTo(field->place(to)), m_player(field->player(from)) { } static const int start_field[8][8] = { { -KNIGHT, -PAWN, -ROOK, 0, 0, 0, 0, 0 }, { -BISHOP, -KING, -QUEEN, 0, 0, 0, 0, 0 }, { -ROOK, -PAWN, -KNIGHT, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, ROOK, PAWN, KNIGHT, 0 }, { 0, 0, 0, 0, QUEEN, KING, BISHOP, 0 }, { 0, 0, 0, 0, KNIGHT, PAWN, ROOK, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0 } }; Field::Field() { memcpy(m_places, start_field, sizeof(start_field)); } QList Field::validMoves(const Pos &p) { QList moves; int thePlace = place(p); Piece thePiece = (Piece) qAbs(thePlace); switch (thePiece) { case NOPIECE: break; } return moves; } bool Field::validMove(const Move &m) { QList moves = validMoves(m.from()); return moves.contains(m); } bool Field::move(const Move &m) { if (!validMove(m)) return false; return true; } bool Field::undo(const Move &m) { if (place(m.from()) != 0 || place(m.to()) != m.prevFrom()) return false; place(m.from()) = m.prevFrom(); place(m.to()) = m.prevTo(); return false; } Game::Game(QObject *parent) : QObject(parent), m_field(new Field()) { } Game::~Game() { delete m_field; } }