Skip to content

Commit

Permalink
Added match results database query
Browse files Browse the repository at this point in the history
  • Loading branch information
Danitim committed May 14, 2024
1 parent 262bb2f commit 8f8fec8
Show file tree
Hide file tree
Showing 7 changed files with 91 additions and 14 deletions.
Binary file modified gamedata.db
Binary file not shown.
26 changes: 22 additions & 4 deletions headers/dbcontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,36 @@
#include <QString>
#include <QSqlError>

class DBController {
class DataManager : public QObject {
Q_OBJECT

signals:
void requestCharactersData(QVector<QString> names);
void requestColorPalette(QString color);
void requestInsertMatchResults(QString name1, QString name2, QString winner);
};

class DBController : public QObject {
Q_OBJECT
private:
QSqlDatabase db;

public:
DBController();

QVector<QPair<QString, QString>> getCharactersData(QVector<QString> names = {});
/* TODO: Функция, которая получает из одного или сразу из двух имен всю необходимую для создания игровых персонажей информацию
(я не знаю какая информация нужна для этого, это целиком на игровой логике висит) */
QVector<QString> getColorPalette(QString color = "");
void insertMatchResults(const QString &name1, const QString &name2, const QString &winner);

public slots:
void handleCharactersDataRequest(QVector<QString> names);
void handleColorPaletteRequest(QString color);
void handleInsertMatchResultsRequest(QString name1, QString name2, QString winner);

QVector<QString> getColorPalette(QString color = "");
signals:
void charactersDataReceived(const QVector<QPair<QString, QString>>& data);
void colorPaletteReceived(const QVector<QString>& data);
void matchResultsInserted();
};

#endif // DBCONTROLLER_H
3 changes: 2 additions & 1 deletion headers/game.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class Game : public QWidget

signals:
void updateTick();
void endGameSignal();
void endGameSignal(QString name1, QString name2, QString winner="");

public:
explicit Game(QWidget *parent = nullptr);
Expand Down Expand Up @@ -58,6 +58,7 @@ public slots:
PlayerController *player2Controller;

QVector<QString> names = {"", ""};
QString winner = "";

QTimer *gameTimer;
QGraphicsView *view;
Expand Down
5 changes: 5 additions & 0 deletions headers/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <QFontDatabase>
#include <QStackedWidget>
#include <QRegularExpression>
#include <QThread>

QT_BEGIN_NAMESPACE
namespace Ui {
Expand All @@ -36,6 +37,7 @@ public slots:
void goToAuthorsPage();
void goToSettingsPage();
void beginGame();
void gameEnded(QString name1, QString name2, QString winner);

private:
QHash<QString, int> const ui2idx = {{"mainMenu", 0}, {"authors", 1}, {"settings", 2},
Expand All @@ -44,6 +46,9 @@ public slots:
QVector<QString> palette;
int paletteIterator = 0;

DBController *db;
DataManager *manager;

Ui::MainWindow *ui;
CharSelect *charSelect;
};
Expand Down
35 changes: 35 additions & 0 deletions sources/dbcontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,38 @@ QVector<QString> DBController::getColorPalette(QString color)
db.close();
return palette;
}

void DBController::insertMatchResults(const QString &name1, const QString &name2, const QString &winner)
{
db.open();
QSqlQuery query;
query.prepare("INSERT INTO results (name1, name2, winner) VALUES (:name1, :name2, :winner)");
query.bindValue(":name1", name1);
query.bindValue(":name2", name2);
query.bindValue(":winner", winner);

if (!query.exec()) {
qDebug() << "Query failed:" << query.lastError().text();
}

db.close();
qDebug() << "Inserted match results: " << name1 << " vs " << name2 << " winner: " << winner;
}

void DBController::handleCharactersDataRequest(QVector<QString> names)
{
QVector<QPair<QString, QString>> result = getCharactersData(names);
emit charactersDataReceived(result);
}

void DBController::handleColorPaletteRequest(QString color)
{
QVector<QString> result = getColorPalette(color);
emit colorPaletteReceived(result);
}

void DBController::handleInsertMatchResultsRequest(QString name1, QString name2, QString winner)
{
insertMatchResults(name1, name2, winner);
emit matchResultsInserted();
}
14 changes: 9 additions & 5 deletions sources/game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ Game::Game(QWidget *parent)

player->play();

connect(ui->homeIcon, &QPushButton::clicked, this, &Game::endGame);
connect(ui->homeIcon, &QPushButton::clicked, this, &Game::endGameButtonClicked);
}

void Game::updateGame()
Expand All @@ -90,15 +90,16 @@ void Game::updateGame()

void Game::playerDead(int id)
{
ui->winnerLabel->setText(names[(id+1)%2] + " wins!");
winner = names[(id+1)%2];
ui->winnerLabel->setText(winner + " wins!");
gameTimer->stop();
endGameMenu->show();
endGameMenu->raise();
}

void Game::endGameButtonClicked()
{
qDebug() << "End game button clicked!";
// qDebug() << "End game button clicked!";
endGame();
}

Expand Down Expand Up @@ -139,8 +140,8 @@ void Game::resumeGame()

void Game::endGame()
{
qDebug() << "Game ended!";
emit endGameSignal();
// qDebug() << "Game ended!";
emit endGameSignal(names[0], names[1], winner);
setupClear();
}

Expand All @@ -160,6 +161,9 @@ void Game::setupClear() {
// Show PressToStart interface
ui->pressToStart->show();
ui->pressToStart->raise();

// Reset winner field
winner = "";
}

Game::~Game()
Expand Down
22 changes: 18 additions & 4 deletions sources/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@ MainWindow::MainWindow(QWidget *parent)
, ui(new Ui::MainWindow)
{
// Инициализация базы данных приложения
DBController db;
palette = db.getColorPalette("pink");
charSelect = new CharSelect(db.getCharactersData());
db = new DBController();
manager = new DataManager();
QThread* dbThread = new QThread();
db->moveToThread(dbThread);
dbThread->start();

palette = db->getColorPalette("pink");
charSelect = new CharSelect(db->getCharactersData());

// Задание интерфейсных форм:
Ui::MainMenuForm* mainMenuUi = new Ui::MainMenuForm();
Expand Down Expand Up @@ -50,7 +55,7 @@ MainWindow::MainWindow(QWidget *parent)
connect(charSelect, &CharSelect::beginGame, this, &MainWindow::beginGame);
connect(charSelect, &CharSelect::beginGame, ui->game, &Game::startGame);

connect(ui->game, &Game::endGameSignal, this, &MainWindow::goToMainMenuPage);
connect(ui->game, &Game::endGameSignal, this, &MainWindow::gameEnded);
}

QString updateStyleSheet(const QString &styleSheet, const QString &field, const QString &value)
Expand Down Expand Up @@ -131,6 +136,15 @@ void MainWindow::beginGame()
ui->stackedWidget->setCurrentIndex(ui2idx["game"]);
}

void MainWindow::gameEnded(QString name1, QString name2, QString winner)
{
if (!winner.isEmpty()) {
// qDebug() << name1 << " vs " << name2 << " winner: " << winner;
db->insertMatchResults(name1, name2, winner);
}
goToMainMenuPage();
}

MainWindow::~MainWindow()
{
delete ui;
Expand Down

0 comments on commit 8f8fec8

Please sign in to comment.