网站开发翻译,无锡哪个网站建设比较好,园区二学一做网站,网站更新提示怎末做1、首先安装好VS软件和QT库#xff0c;将其配置好#xff0c;具体不在此展开说明。
2、文件结构如下图#xff1a; 3、绘制棋盘代码#xff0c;如下#xff1a;
void Qwzq::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.setRenderHint(QPainter::An…1、首先安装好VS软件和QT库将其配置好具体不在此展开说明。
2、文件结构如下图 3、绘制棋盘代码如下
void Qwzq::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);//防锯齿QBrush brush;brush.setStyle(Qt::SolidPattern);for (int i 0; i kGridCount1; i){painter.drawLine(kBoardMargin,kBoardMargini*kBlockSize,size().width()-kBoardMargin,kBoardMargini*kBlockSize);painter.drawLine(kBoardMargini*kBlockSize, kBoardMargin,kBoardMargini*kBlockSize,size().height()-kBoardMargin);}for (int i 0; i kGridCount; i){for (int j 0; j kGridCount; j){if (game-gameMap[i][j] 1){brush.setColor(Qt::white);painter.setBrush(brush);painter.drawEllipse(kBoardMarginkBlockSize*j-kRadius,kBoardMarginkBlockSize*i-kRadius,kRadius*2,kRadius*2);}else if (game-gameMap[i][j]-1){brush.setColor(Qt::black);painter.setBrush(brush);painter.drawEllipse(kBoardMargin kBlockSize * j - kRadius, kBoardMargin kBlockSize * i - kRadius, kRadius * 2, kRadius * 2);}}}QString str;if (game-isWin(clickPosRow, clickPosCol)){str Win!;QMessageBox::StandardButton btnValue QMessageBox::information(this, tr(result), str);close();}if (game-isDead()){str Over!;QMessageBox::StandardButton btnValue QMessageBox::information(this, tr(result), str);close();}
} 4、绘制旗子代码如下
void Qwzq::mousePressEvent(QMouseEvent* event)
{int x event-x();int y event-y();int kr kBoardMargin kBlockSize * kGridCount;int kd kBoardMargin kBlockSize*kGridCount;if (xkBoardMarginxkrykBoardMarginykd){int x1 (x - kBoardMargin) / kBlockSize;int y1 (y - kBoardMargin) / kBlockSize;x1 x - (kBoardMargin kBlockSize * x1);y1 y - (kBoardMargin kBlockSize * y1);if (x1 kBlockSize / 2)x (x-kBoardMargin) / kBlockSize 1;elsex (x - kBoardMargin) / kBlockSize;if (y1 kBlockSize / 2)y (y-kBoardMargin) / kBlockSize 1;elsey (y - kBoardMargin) / kBlockSize;game-updateMap(y, x);clickPosRow y;clickPosCol x;}update();
}
5、gameModel.cpp代码如下
#includeGameModel.h
#includeutility
#includeqDebugvoid GameModel::startGame()
{gameMap.clear();for (int i 0; i kBoardSize; i){std::vectorint lineBoard;for (int j 0; j kBoardSize; j){lineBoard.push_back(0);}gameMap.push_back(lineBoard);}playerFlag true;
}void GameModel::updateMap(int row, int col)
{if (playerFlag)gameMap[row][col] 1;elsegameMap[row][col] -1;playerFlag !playerFlag;
}void GameModel::actionByPerson(int row, int col)
{updateMap(row,col);
}bool GameModel::isWin(int row, int col)
{//水平方向检查for (int i 0; i kBoardSize - 5; i){if (gameMap[row][i] 1||gameMap[row][i]-1){if (gameMap[row][i] gameMap[row][i 1]){if (gameMap[row][i 1] gameMap[row][i 2]){if (gameMap[row][i 2] gameMap[row][i 3]){if (gameMap[row][i 3] gameMap[row][i 4]){return true;}}}}}}//竖直方向检查for (int i 0; i kBoardSize - 5; i){if (gameMap[i][col] 1 || gameMap[i][col] -1){if (gameMap[i][col] gameMap[i1][col]){if (gameMap[i1][col] gameMap[i2][col]){if (gameMap[i2][col] gameMap[i3][col]){if (gameMap[i3][col] gameMap[i4][col]){return true;}}}}}}//135度方向检查int krow kBoardSize -1- row;if (krow col){int i_135 row krow;int j_135 col - krow;for (j_135; j_135 kBoardSize - 5; j_135){if (gameMap[i_135][j_135] 1){if (gameMap[i_135][j_135] gameMap[i_135 - 1][j_135 1]){if (gameMap[i_135 - 1][j_135 1] gameMap[i_135 - 2][j_135 2]){if (gameMap[i_135 - 2][j_135 2] gameMap[i_135 - 3][j_135 3]){if (gameMap[i_135 - 3][j_135 3] gameMap[i_135 - 4][j_135 4]){return true;}}}}}i_135--;}}if (krow col){int i_135 row col;int j_135 col - col;for (i_135; i_135 4; i_135--){if (gameMap[i_135][j_135] 1){if (gameMap[i_135][j_135] gameMap[i_135 - 1][j_135 1]){if (gameMap[i_135 - 1][j_135 1] gameMap[i_135 - 2][j_135 2]){if (gameMap[i_135 - 2][j_135 2] gameMap[i_135 - 3][j_135 3]){if (gameMap[i_135 - 3][j_135 3] gameMap[i_135 - 4][j_135 4]){return true;}}}}}j_135;}}//45度方向检查if (row col){int i_45 row - col;int j_45 col - col;for (i_45; i_45 kBoardSize; i_45){if (gameMap[i_45][j_45] 1){if (gameMap[i_45][j_45] gameMap[i_45 1][j_45 1]){if (gameMap[i_45 1][j_45 1] gameMap[i_45 2][j_45 2]){if (gameMap[i_45 2][j_45 2] gameMap[i_45 3][j_45 3]){if (gameMap[i_45 3][j_45 3] gameMap[i_45 4][j_45 4]){return true;}}}}}j_45;}}if (row col){int i_45 row - row;int j_45 col - row;for (j_45; j_45 kBoardSize; j_45){if (gameMap[i_45][j_45] 1){if (gameMap[i_45][j_45] gameMap[i_45 1][j_45 1]){if (gameMap[i_45 1][j_45 1] gameMap[i_45 2][j_45 2]){if (gameMap[i_45 2][j_45 2] gameMap[i_45 3][j_45 3]){if (gameMap[i_45 3][j_45 3] gameMap[i_45 4][j_45 4]){return true;}}}}}i_45;}}return false;
}bool GameModel::isDead()//死局即棋盘被下满了
{for(int i0;ikBoardSize;i)for (int j 0; j kBoardSize; j){if (gameMap[i][j] 0)return false;}return true;
}6、gameModel.h代码如下
#ifndef GAMEMODEL_H
#define GAMEMODEL_H#includeQObject
#includevectorenum GameStatus
{playing,win,dead
};const int kBoardSize 15;class GameModel
{
public:public:std::vectorstd::vectorintgameMap;bool playerFlag;GameStatus gameStatus;void startGame();void actionByPerson(int row, int col);void updateMap(int row, int col);bool isWin(int row, int col);bool isDead();};
#endif // !GAMEMODEL_H7、Qwzq.cpp代码如下
#include Qwzq.h
#include QMouseEvent
#include QMenuBar
#include QPainter
#include QDebug
#includeQMessageBoxconst int kBoardMargin 30;
const int kRadius 15;
const int kBlockSize 40;
const int kGridCount 15;Qwzq::Qwzq(QWidget *parent): QMainWindow(parent)
{//ui.setupUi(this);setFixedSize(kBoardMargin * 2 kGridCount * kBlockSize, kBoardMargin * 2 kGridCount * kBlockSize);setMouseTracking(true);QMenu* gameMenu menuBar()-addMenu(tr(Game Model:));QAction* actionPVP new QAction(PVP, this);menuBar()-addAction(actionPVP);connect(actionPVP, SIGNAL(triggered()), this, SLOT(initPVPGame()));initGame();
}void Qwzq::initGame()
{game new GameModel;initPVPGame();clickPosRow clickPosCol 0;
}void Qwzq::initPVPGame()
{game-gameStatus playing;game-startGame();
}Qwzq::~Qwzq()
{if (game){delete game;game nullptr;}}void Qwzq::paintEvent(QPaintEvent* event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);//防锯齿QBrush brush;brush.setStyle(Qt::SolidPattern);for (int i 0; i kGridCount1; i){painter.drawLine(kBoardMargin,kBoardMargini*kBlockSize,size().width()-kBoardMargin,kBoardMargini*kBlockSize);painter.drawLine(kBoardMargini*kBlockSize, kBoardMargin,kBoardMargini*kBlockSize,size().height()-kBoardMargin);}for (int i 0; i kGridCount; i){for (int j 0; j kGridCount; j){if (game-gameMap[i][j] 1){brush.setColor(Qt::white);painter.setBrush(brush);painter.drawEllipse(kBoardMarginkBlockSize*j-kRadius,kBoardMarginkBlockSize*i-kRadius,kRadius*2,kRadius*2);}else if (game-gameMap[i][j]-1){brush.setColor(Qt::black);painter.setBrush(brush);painter.drawEllipse(kBoardMargin kBlockSize * j - kRadius, kBoardMargin kBlockSize * i - kRadius, kRadius * 2, kRadius * 2);}}}QString str;if (game-isWin(clickPosRow, clickPosCol)){str Win!;QMessageBox::StandardButton btnValue QMessageBox::information(this, tr(result), str);close();}if (game-isDead()){str Over!;QMessageBox::StandardButton btnValue QMessageBox::information(this, tr(result), str);close();}
}void Qwzq::mousePressEvent(QMouseEvent* event)
{int x event-x();int y event-y();int kr kBoardMargin kBlockSize * kGridCount;int kd kBoardMargin kBlockSize*kGridCount;if (xkBoardMarginxkrykBoardMarginykd){int x1 (x - kBoardMargin) / kBlockSize;int y1 (y - kBoardMargin) / kBlockSize;x1 x - (kBoardMargin kBlockSize * x1);y1 y - (kBoardMargin kBlockSize * y1);if (x1 kBlockSize / 2)x (x-kBoardMargin) / kBlockSize 1;elsex (x - kBoardMargin) / kBlockSize;if (y1 kBlockSize / 2)y (y-kBoardMargin) / kBlockSize 1;elsey (y - kBoardMargin) / kBlockSize;game-updateMap(y, x);clickPosRow y;clickPosCol x;}update();
}8、Qwzq.h代码如下
#pragma once#include QtWidgets/QMainWindow
#include ui_Qwzq.h
#include GameModel.hclass Qwzq : public QMainWindow
{Q_OBJECTpublic:Qwzq(QWidget *parent nullptr);~Qwzq();GameModel* game;int clickPosRow, clickPosCol;void initGame();private slots:void initPVPGame();private:private:Ui::QwzqClass ui;void paintEvent(QPaintEvent* event);void mousePressEvent(QMouseEvent* event);
};9、main.cpp代码如下
#include Qwzq.h
#include QtWidgets/QApplicationint main(int argc, char *argv[])
{QApplication a(argc, argv);Qwzq w;w.show();return a.exec();
}10、运行界面如下