这是一个通过Qt实现的五子棋小游戏,我将通过几个步骤带你理解游戏实现逻辑
设计思路:
1、绘制一个N * N大小的棋盘,最外围一圈为无效区域;
2、设计一个N * N大小的数组,用来存放棋子类型;0为无效棋子、1为黑色棋子、2为白色棋子;
3、游戏开始时,设计两种白棋开局和黑棋开局两种状态,并将棋子落在棋盘正中央,当前棋子状态用bool值表示,true为当前是黑棋落子,false为当前是白棋落子;
4、当鼠标的左键点击后,通过计算获取当前光标所在位置是棋盘中的哪一个格子,如果格子的状态为0时则可以进行落子;当前棋子状态为true时,当前落子则为白棋;反之为黑棋
6、通过棋盘落子状态绘制界面,从0到N行、0到N列扫描棋盘,当4个方向存在5个黑棋或者5个白棋,则获得胜利
头文件定义:
#include <QWidget>
#include <QPaintEvent>
#include <QMouseEvent>
//无效棋子
#define NoChess 0
//黑棋
#define BlockChess 1
//白棋
#define WhiteChess 2
//棋盘大小
#define GridSize 11
//棋盘格子大小
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
//绘制事件
void paintEvent(QPaintEvent *);
//鼠标点击事件
void mousePressEvent(QMouseEvent *event);
//根据鼠标坐标
int getIndex(int a, int b);
//判断游戏输赢
void checkWin();
//判断棋子输赢
bool isWin(int x, int y, int color);
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
//棋盘状态
unsigned char m_dat[GridSize][GridSize];
//棋子状态
bool m_flag;
//游戏开始标志
bool m_start;
};
初始化棋盘
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
for (