toruschess/src/game.cpp

136 lines
5.0 KiB
C++
Raw Permalink Normal View History

2009-01-06 13:52:03 +00:00
/***************************************************************************
* 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. *
***************************************************************************/
2009-02-09 18:04:09 +00:00
#include "game.h"
2009-01-06 13:52:03 +00:00
2009-01-06 16:02:15 +00:00
#include <QGridLayout>
#include <QResizeEvent>
#include <QMouseEvent>
2009-01-09 11:44:39 +00:00
#include <QPainter>
2009-01-21 15:45:17 +00:00
#include <QStatusBar>
2009-01-09 11:44:39 +00:00
#include <QMenuBar>
#include <QMenu>
2009-02-02 14:30:05 +00:00
#include <QAction>
#include <QActionGroup>
2009-01-06 16:02:15 +00:00
2009-01-21 15:45:17 +00:00
#include "ai.h"
2009-01-06 13:52:03 +00:00
namespace toruschess {
2009-02-02 14:30:05 +00:00
static QAction *makeAction(QObject *parent, const QString &text, const QObject * receiver, const char * member, const QKeySequence &shortcut = QKeySequence(), QActionGroup *group = NULL) {
QAction *a = new QAction(text, parent);
a->setShortcut(shortcut);
if (group) a->setActionGroup(group);
QObject::connect(a, SIGNAL(triggered(bool)), receiver, member);
return a;
}
2009-02-09 18:04:09 +00:00
GameWidget::GameWidget(QWidget *parent)
2009-02-02 14:30:05 +00:00
: QMainWindow(parent), m_game(new Game()), m_optionDlg(new OptionDlg(m_game, this)), m_viewMode((ViewMode) -1) {
2009-02-09 17:57:16 +00:00
connect(this, SIGNAL(changedViewMode(ViewMode)), m_optionDlg, SLOT(changedViewMode(ViewMode)));
connect(m_optionDlg, SIGNAL(setViewMode(ViewMode)), this, SLOT(setViewMode(ViewMode)));
2009-01-06 22:07:55 +00:00
setWindowTitle("Torus Chess");
2009-02-02 14:30:05 +00:00
QWidget *centralWidget = new QWidget(this);
m_fieldsLayout = new QStackedLayout(centralWidget);
m_field2d = new Field2D(m_game, centralWidget);
m_field3d = new Field3D(m_game, centralWidget);
2009-02-09 17:57:16 +00:00
m_fieldsLayout->addWidget(m_field2d);
2009-02-02 14:30:05 +00:00
m_fieldsLayout->addWidget(m_field3d);
centralWidget->setLayout(m_fieldsLayout);
setCentralWidget(centralWidget);
2009-01-21 15:45:17 +00:00
statusBar()->show();
connect(m_game, SIGNAL(changed(GameState)), this, SLOT(gameChanged(GameState)));
m_game->restart();
2009-02-02 14:30:05 +00:00
QAction
*act_game_newGame = makeAction(this, "&New Game", this, SLOT(menuRestart()), Qt::Key_F2),
*act_game_options = makeAction(this, "&Options", this, SLOT(menuOptions()), Qt::CTRL + Qt::Key_O),
*act_game_quit = makeAction(this, "&Quit", this, SLOT(close()));
QActionGroup *viewGroup = new QActionGroup(this);
m_act_view_2d = makeAction(this, "&2D-View", this, SLOT(menuView2d()), Qt::CTRL + Qt::Key_2, viewGroup);
m_act_view_3d = makeAction(this, "&3D-View", this, SLOT(menuView3d()), Qt::CTRL + Qt::Key_3, viewGroup);
m_act_view_torus = makeAction(this, "&Torus-View", this, SLOT(menuViewTorus()), Qt::CTRL + Qt::Key_4, viewGroup);
act_game_quit->setMenuRole(QAction::QuitRole);
QMenuBar *menuBar = new QMenuBar(this);
2009-02-02 14:30:05 +00:00
QMenu *menuGame = menuBar->addMenu("&Game");
menuGame->addAction(act_game_newGame);
menuGame->addAction(act_game_options);
menuGame->addSeparator();
2009-02-02 14:30:05 +00:00
menuGame->addAction(act_game_quit);
QMenu *menuView = menuBar->addMenu("&View");
menuView->addActions(viewGroup->actions());
setMenuBar(menuBar);
2009-02-02 14:30:05 +00:00
setViewMode(VIEW_2D);
updateGeometry();
2009-01-21 15:45:17 +00:00
}
2009-02-09 18:04:09 +00:00
void GameWidget::gameChanged(GameState state) {
2009-01-21 15:45:17 +00:00
statusBar()->showMessage(state2string(state));
2009-01-06 16:02:15 +00:00
}
2009-02-09 18:04:09 +00:00
void GameWidget::menuRestart() {
m_game->restart();
}
2009-02-09 18:04:09 +00:00
void GameWidget::menuOptions() {
m_optionDlg->exec();
}
2009-02-09 18:04:09 +00:00
void GameWidget::setViewMode(ViewMode viewMode) {
2009-02-02 14:30:05 +00:00
if (m_viewMode == viewMode) return;
m_viewMode = viewMode;
switch (m_viewMode) {
case VIEW_2D:
m_fieldsLayout->setCurrentIndex(0);
m_act_view_2d->setChecked(true);
break;
case VIEW_3D:
m_fieldsLayout->setCurrentIndex(1);
m_act_view_3d->setChecked(true);
m_field3d->setBoardMode(Field3D::PLANE);
break;
case VIEW_TORUS:
m_fieldsLayout->setCurrentIndex(1);
m_act_view_torus->setChecked(true);
m_field3d->setBoardMode(Field3D::TORUS);
break;
}
emit changedViewMode(viewMode);
}
2009-02-09 18:04:09 +00:00
void GameWidget::menuView2d() {
2009-02-02 14:30:05 +00:00
setViewMode(VIEW_2D);
}
2009-02-09 18:04:09 +00:00
void GameWidget::menuView3d() {
2009-02-02 14:30:05 +00:00
setViewMode(VIEW_3D);
}
2009-02-09 18:04:09 +00:00
void GameWidget::menuViewTorus() {
2009-02-02 14:30:05 +00:00
setViewMode(VIEW_TORUS);
}
2009-01-06 13:52:03 +00:00
}