Example #1
0
void MainWindow::endGame()
{
	isSetUp = false;
	emit updateNeeded();
	boardUi->endGame();

	emit gameEvent(tr("Game ended."));

	QSettings settings;
	settings.beginGroup("games");
	int size = settings.beginReadArray("game");
	settings.endArray();

	settings.beginWriteArray("game");
	settings.setArrayIndex(size-1);

	settings.beginWriteArray("result");
	int playerCount = game->getPlayerCount();
	for (int i = 0; i < playerCount; ++i)
	{
		settings.setArrayIndex(i);
		settings.setValue("score", game->getPlayerScore(i));
	}
	settings.endArray();

	settings.endArray();
	settings.endGroup();
}
Example #2
0
void MainWindow::nodeScored(const Node * n, const int score, const Game * game)
{
	QStringList players;
	uchar meepleCount = n->getMaxMeeples();
	{
		int player = 0;
		for (uchar const * m = n->getMeeples(), * end = m + game->getPlayerCount(); m < end; ++m, ++player)
		{
			if (*m == meepleCount)
				players.append(QString::number(player+1));
		}
	}
	QString name;
	switch (n->getTerrain())
	{
		case Field:
			name = tr("Field");
			break;
		case City:
			name = tr("City");
			break;
		case Road:
			name = tr("Road");
			break;
		case Cloister:
			name = tr("Cloister");
			break;
		case None:
		default:
			name = tr("[Unknown]");
			break;
	}

	emit gameEvent(tr("%1 scored %n point(s) for players: %2", "", score).arg(name).arg(players.join(", ")));
}
Example #3
0
void MainWindow::newGame(int player, const Game * game)
{
	gameStartTimestamp = QDateTime::currentMSecsSinceEpoch();

	if (player < 0)
	{
		qDebug("New game started with players:");
		for (Player const * p : game->getPlayers())
			qDebug() << p->getTypeName();
		qDebug();
	}

	boardUi->newGame(player, game);

	if (isSetUp)
		return;
	isSetUp = true;

	qDeleteAll(playerInfos);
	playerInfos.clear();
	for (uint i = 0; i < game->getPlayerCount(); ++i)
	{
		PlayerInfoView * pi = new PlayerInfoView(i, game, &imgFactory);
		ui->playerInfoLayout->insertWidget(i, pi);
		connect(this, SIGNAL(updateNeeded()), pi, SLOT(updateView()));
		connect(this, SIGNAL(tileDrawn(int,int)), pi, SLOT(displayTile(int,int)));
		playerInfos.push_back(pi);
	}

	emit gameEvent(tr("New game started"));

	ui->remainingTiles->setUp(game, &imgFactory);
	connect(this, SIGNAL(updateNeeded()), ui->remainingTiles, SLOT(updateView()));


	QSettings settings;
	settings.beginGroup("games");
	int size = settings.beginReadArray("game");
	settings.endArray();

	settings.beginWriteArray("game");
	settings.setArrayIndex(size);

	settings.setValue("appRevision", APP_REVISION_STR);
	settings.setValue("qtCompileVersion", QT_VERSION_STR);
	settings.setValue("qtRuntimeVersionn", qVersion());
	settings.setValue("timestamp", gameStartTimestamp);
	settings.beginWriteArray("players");
	auto const & players = game->getPlayers();
	for (size_t i = 0; i < players.size(); ++i)
	{
		settings.setArrayIndex((int)i);
		settings.setValue("type", players[i]->getTypeName());
	}
	settings.endArray();

	settings.endArray();
	settings.endGroup();
}
Example #4
0
void GameModel::localResign()
{
    if (status_ == StatusMyTurn)
    {
        myResign_ = true;
        setStatus(StatusLose);
        emit gameEvent("turn\nresign");
    }
}
Example #5
0
void GameModel::localAccept()
{
    if (status_ == StatusMyTurn && oppDraw_)
    {
        myAccept_ = true;
        setStatus(StatusDraw);
        emit gameEvent("turn\naccept");
    }
}
Example #6
0
void MainWindow::playerMoved(int player, const Tile * tile, const MoveHistoryEntry & move)
{
	emit updateNeeded();
	boardUi->playerMoved(player, tile, move);

	if (move.move.tileMove.isNull())
		emit gameEvent(tr("A non-suitable tile was drawn and discarded."));
	else
		emit gameEvent(tr("Player %1 moved.").arg(player+1));

//	QSettings settings;
//	settings.beginGroup("games");
//	int size = settings.beginReadArray("game");
//	settings.endArray(); //game

//	settings.beginWriteArray("game");
//	settings.setArrayIndex(size-1);

//	int moveSize = settings.beginReadArray("moves");
//	settings.endArray(); //moves

//	auto const & history = game->getMoveHistory();
//	settings.beginWriteArray("moves");
//	for (size_t i = moveSize; i < history.size(); ++i)
//	{
//		settings.setArrayIndex((int)i);
//		MoveHistoryEntry const & m = history[i];
//		settings.setValue("tile", m.tile);
//		settings.setValue("x", m.move.tileMove.x);
//		settings.setValue("y", m.move.tileMove.y);
//		settings.setValue("orientation", m.move.tileMove.orientation);
//		settings.setValue("meeple", m.move.meepleMove.nodeIndex);
//	}
//	settings.endArray(); //moves

//	settings.endArray(); //game
//	settings.endGroup(); //games

	QString const & dataLoc = QStandardPaths::writableLocation(QStandardPaths::DataLocation);
	QDir dir = QDir(dataLoc).absoluteFilePath("games");
	if (dir.mkpath(".") && gameStartTimestamp != -1)
		game->storeToFile(dir.absoluteFilePath(QString::number(gameStartTimestamp)));
}
void PluginWindow::initBoard()
{
	if (!gm_)
	{
		gm_ = new GameModel(this);
		connect(gm_, SIGNAL(gameEvent(QString)), this, SIGNAL(gameEvent(QString)));
		connect(gm_, SIGNAL(statusChanged()), this, SLOT(updateStatus()));
		connect(ui.actionNewGame, SIGNAL(triggered()), this, SLOT(newGame()));
		connect(ui.actionExit, SIGNAL(triggered()), this, SLOT(close()));
		connect(ui.btnFreeze, SIGNAL(clicked()), this, SLOT(freezeShips()));
		connect(ui.btnDraw, SIGNAL(toggled(bool)), gm_, SLOT(setLocalDraw(bool)));
		connect(ui.btnAccept, SIGNAL(clicked()), gm_, SLOT(localAccept()));
		connect(ui.btnResign, SIGNAL(clicked()), gm_, SLOT(localResign()));
		connect(ui.actionResign, SIGNAL(triggered()), gm_, SLOT(localResign()));
		BoardModel *bmodel = new BoardModel(this);
		bmodel->init(gm_);
		BoardDelegate *bd_ = new BoardDelegate(bmodel, this);
		ui.tvBoard->setItemDelegate(bd_);
		ui.tvBoard->setModel(bmodel);
	}
Example #8
0
void GameModel::localTurn(int pos)
{
    if (status_ == StatusMyTurn)
    {
        lastShot_ = pos;
        QString data = QString("turn\npos;%1").arg(pos);
        if (draw_)
            data.append("\ndraw");
        setStatus(StatusWaitingTurnAccept);
        emit gameEvent(data);
    }
}
Example #9
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
	ui->setupUi(this);
#if !MAINWINDOW_ENABLE_UNDO
	delete ui->actionUndo;
#endif
	ui->optionsWidget->setVisible(ui->optionsCheckBox->isChecked());
	setWindowTitle(APP_NAME);

	playerSelector = new PlayerSelector(&tileFactory, this);

	for (int i = 1; i <= MAX_PLAYERS; ++i)
	{
		QLabel * numberLabel = new QLabel(QString::number(i));
		ui->ngPlayerLayout->addWidget(numberLabel, i, 0);

		QComboBox * colorBox = new QComboBox();
		for (uint j = 0; j < colors.size(); ++j)
		{
			colorBox->addItem(colorNames[j]);

			QPixmap px(32, 32);
			QPainter painter(&px);
			painter.fillRect(px.rect(), colors[j]);
			painter.drawRect(0, 0, px.width() - 1, px.height() - 1);
			colorBox->setItemIcon(j, QIcon(px));
		}
		colorBox->setCurrentIndex(i-1);
		ui->ngPlayerLayout->addWidget(colorBox, i, 1);
		connect(colorBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorBoxChanged(int)));

		QComboBox * typeBox = new QComboBox();
		typeBox->addItems(QStringList{tr("", "player selection: no player"), tr("Player"), tr("Computer")});
		ui->ngPlayerLayout->addWidget(typeBox, i, 2);
		connect(typeBox, SIGNAL(currentIndexChanged(int)), this, SLOT(typeBoxChanged(int)));

		QLineEdit * nameEdit = new QLineEdit();
		ui->ngPlayerLayout->addWidget(nameEdit, i, 3);

		ngPlayerEdits[i-1] = NgPlayerEdit{colorBox, typeBox, nameEdit};
	}

	auto actionGroup = new QActionGroup(this);
	actionGroup->addAction(ui->actionRandom_Tiles);
	actionGroup->addAction(ui->actionChoose_Tiles);

	boardUi = new BoardGraphicsScene(&tileFactory, &imgFactory, ui->boardView);
	game = new Game(this, true);
	game->addView(this);
	gameThread = new GameThread(game, this);

	boardUi->setGame(game);
	ui->boardView->setScene(boardUi);

	connect(boardUi, SIGNAL(sceneRectChanged(QRectF)), this, SLOT(recenter(QRectF)));
	connect(this, SIGNAL(gameEvent(QString)), this, SLOT(displayGameEvent(QString)));
	connect(this, SIGNAL(gameEventPop()), this, SLOT(displayGameEventPop()));

	readSettings();

	game->addWatchingPlayer(this);
}
Example #10
0
void GameModel::sendCoveredBoard()
{
    myBoard_.calculateCellsHash();
    emit gameEvent("covered-board\n" + myBoard_.toStringList(true).join("\n"));
}