Qt实现六子棋游戏

游戏规则

1.对峙双方谁的六个棋子先连在一条线即为胜者。
2.当有四个子连成一条直线时,就应采取防守,堵住四子的一端,否则就会输掉比赛。
3.应当避免在比赛内出现四四禁手、五五禁手等情况,否则就会不小心输掉比赛。

已实现的功能

1.Qt编程实现server程序六子棋游戏界面,20*20格子;

2.编程实现server本地端的鼠标点击依次放置黑白棋子,实现双人手动下棋;

3.编程实现自动判别下棋的合法性;

4.编程实现自动判别盘面输赢或者和棋;

5.编程实现实现本地人机下棋;

6.编程实现本地机机下棋;

开发平台

所使用的开发环境:Windows10 + Qt 5.9.2 + C++

项目地址

作者Github主页:https://github.com/13243129626

项目仓库:https://github.com/13243129626/QT-Connec6

项目运行状况

Qt实现六子棋游戏
Qt实现六子棋游戏
Qt实现六子棋游戏

主要函数描述

函数名称 函数功能
void MainWindow::paintEvent(QPaintEvent *); 绘图函数:绘制棋盘、根据实时情况绘制黑棋子和白棋子、添加棋盘背景图片、实现部分按钮特效
void MainWindow::mouseReleaseEvent(QMouseEvent *event); 鼠标点击函数:如果是双人模式,则每次点击棋盘时,该函数调用playByPerson()进行人下棋;如果是人机模式,每次点击时,该函数被调用,根据情况调用playByPerson()人下棋playByAI()进行AI下棋;同时更新界面
void MainWindow::mouseMoveEvent(QMouseEvent *event); 鼠标移动函数:鼠标移动到按钮处时,显示按钮;获取鼠标的当前坐标值,并计算距离最近的可落子的点;并更新界面;
void MainWindow::isEnd(); 判断游戏是否结束函数:分别调用函数bool Game::isWin(int clickX,int clickY)、bool Game::isHeQi()、bool Game::isJinShou(int x,int y)判断是否六子连珠、是否和棋、是否禁手,从而判断游戏是否结束,并做相应处理;
bool Game::isWin(int clickX,int clickY); 判断输赢函数:判断是否因发生任意一方六子连珠导致游戏结束;
bool Game::isHeQi(); 判断和棋函数:判断是否棋子占满棋盘仍未结束游戏,即为和棋;
bool Game::isJinShou(int x,int y); 判断禁手函数:判断先手一方的落子点是否是禁手点;若是,则结束游戏,先手方败;
void Game::getScore(); 计分函数:分别对黑棋子方、白棋子方的落子情况进行计分,最后取最大计分值,并存入计分数组score

总体思路

1. 设计绘图函数paintEvent(QPaintEvent * ),绘制出20 * 20棋盘,并添加背景图片,使用UI界面添加三个按钮,分别作为人人对战、人机对战、机机对战的开始按钮;

2. 设计鼠标移动处理函数:mouseMoveEvent(QMouseEvent * event),记录下鼠标位置;设计鼠标点击处理函数mouseReleaseEvent(QMouseEvent * event),根据情况将该点击位置存储到预先设定的棋盘二维数组board中,再通过步骤 1 的绘图函数绘制出相应棋盘布局情况;

3. 设计判断游戏是否结束的函数isEnd(),该函数通过调用isWin()、isHeQi()、isJinShou()三个函数分别判断是否六子连珠、是否和棋、是否黑子方禁手,从而判断游戏是否结束,并做出相应处理;至此,双人模式即算完成;

4. 设计人机模式,首先构造AI思考函数,通过getScore()函数获得AI的最大分值位置,计入棋盘积分数组,考虑每次人点击棋盘下棋后,AI经过一定延迟时间,在最大计分位置落子;即可构思人机模式;

5. 考虑机机模式,通过设计定时器,启动游戏后,定时器启动,每隔一定间隔时间,AI双方轮流调用AI思考函数,找到各自的权值最大的位置落子,从而实现AI对决的模式。

计分函数void Game::getScore()权值设定

类型 分值
活五 +=60 0000
死五 +=50 0000
活四 +=40 0000
死四 +=25 0000
活三 +=30 0000
死三 +=15 0000
活二 +=20 0000
死二 +=10 0000
单棋 +=2000
其他 +=1000

优先级顺序:活五>>死五>>活四>>活三>>死四>>活二>>死三>>死二>>其他

该函数为AI思考的主要函数,判断落子点时,该函数需要计算我方和对方的棋盘权值最大值,再找到两者最大权值的位置,作为落子点。

主要函数流程图

一、人和AI落子函数
Qt实现六子棋游戏

二、 判断游戏是否结束函数
Qt实现六子棋游戏

三、 机机对战函数
Qt实现六子棋游戏









相关文章:

  • 2021-10-24
  • 2022-02-22
  • 2021-12-06
  • 2021-05-04
  • 2022-12-23
  • 2021-12-06
  • 2021-08-08
猜你喜欢
  • 2021-07-04
  • 2021-12-10
  • 2021-11-19
  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
  • 2021-09-05
相关资源
相似解决方案