C++ 实现对战AI五子棋

简介: C++ 实现对战AI五子棋

前言:

    为了能够快速上手一门语言,我们往往在学习了基本语法后,采用写一个小项目的方式来加深理解语言的语法及运用,本文采用c++去实现对战AI五子棋,采用面向对象开发的一款游戏,里面应用了类和对象以及vector容器等知识。

 

一、项目效果展示

image.png

二、游戏思路

image.png

三、游戏框架

image.png

我们这里创建四个类(可以简单的理解为加强版的结构体),玩家类、AI类、棋盘类、棋盘控制类,将玩家类、AI类、棋盘类作为参数传给棋盘控制类,棋盘控制类获取这三个类的信息,从而可以控制游戏的运行,而玩家和AI要进行下棋操作时,需要棋盘信息,所以在玩家和AI类设置棋盘类。

 

根据上面分析,我们搭建好框架,先实现棋盘类功能,再实现AI和玩家类,最后实现棋盘控制类

 

四、棋盘类实现

4.1  用棋盘类构造函数初始化

4.1.1  checkerboard.h

image.png image.png image.png


4.2  棋盘类初始化函数

注:

 

这个初始化函数和棋盘类构造函数的初始化一样,为什么再初始化一次呢?因为我们后面进行游戏运行时,一局结束,再来一局还需要再调用一次棋盘初始化,而定义棋盘类只能调用一次构造函数,所以再创一个棋盘类初始化函数

4.2.1  checkerboard.h

image.png

4.2.2   checkerboard.cpp

image.png image.png


4.3  检查鼠标点击是否有效

注:

 

虽然代码很长,但是思路很简单,先计算点击位置(x,y) 附近的4个落棋位置的实际坐标位置,然后再计算点击位置到这四个落棋位置之间的距离,如果落棋位置与点击位置距离小于棋子大小的0.4倍,就认为这个落棋位置是玩家想要落棋的位置,存储在pos中。若此时该位置没有其他棋子,则为有效点击,返回真。

 

4.3.1 checkerboard.h

棋盘类外:

image.png

棋盘类内:

image.png

4.3.2 checkerboard.cpp

image.png image.png image.png image.png image.png


4.4   下棋

功能:实现记录最后一次落子的位置以及最后一次下棋是玩家方还是AI方,在棋盘二维数组记录落子数据。

 

4.4.1 checkerboard.h

棋盘类外:

image.png

棋盘类内:

image.png

4.4.2 checkerboard.cpp

image.png

4.5  判断棋盘是否下满

4.5.1 checkerboard.h

4.5.2 checkerboard.cpp

image.png

五、玩家类实现

5.1  用玩家类构造函数初始化

5.1.1  chess_player.h

image.png

5.2  玩家下棋

5.2.1 chess_player.h

image.png

六、AI类实现

6.1 用AI类构造函数初始化

6.1.1  AI.h

image.png

image.png

6.2  AI计算权值最高的棋盘空白位置

计算棋盘空白位置的权值,首先对该位置的横、竖、上斜、下斜四个方位做判断,以该位置为起点,每个方位只需要在单方向上判断4个棋子位,反方向判断四个棋子位,统计连续的白子或者黑子个数,根据下面的表格给出相应权重值,选择出累计权值最高的位置为AI落子点。

image.png

 

七、主函数

image.png

 

相关文章
|
19天前
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
15 1
|
28天前
|
人工智能 测试技术 开发工具
C++中的AI编程助手添加
Fitten Code是一款适用于多种编程环境,如VS Code和Visual Studio的AI编程助手插件。它能自动生成代码、提供实时建议和解决方案,帮助调试错误,支持80多种语言,包括Python、C++等。用户可以通过插件的智能补全功能提高编码速度,使用AI问答解决编程问题,还能生成代码注释、单元测试,检查和修复潜在的代码错误。Fitten Code是免费的,并且提供代码编辑和转换功能,增强开发效率。
29 1
|
1月前
|
存储 人工智能 C++
C++ 实现对战AI五子棋
C++ 实现对战AI五子棋
129 0
|
1天前
|
安全 编译器 C++
【C++】学习笔记——类和对象_5
【C++】学习笔记——类和对象_5
17 9
|
1天前
|
编译器 C++
【C++】学习笔记——类和对象_4
【C++】学习笔记——类和对象_4
13 6
|
1天前
|
存储 编译器 C++
【C++】学习笔记——类和对象_3
【C++】学习笔记——类和对象_3
14 6
|
1天前
|
存储 编译器 C语言
【C++】学习笔记——类和对象_2
【C++】学习笔记——类和对象_2
14 3
|
1天前
|
编译器 C语言 C++
【C++】学习笔记——类和对象_1
【C++】学习笔记——类和对象_1
10 3
|
1天前
|
存储 编译器 C语言
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
6 2
|
1天前
|
存储 编译器 C++
【C++ 初阶路】--- 类和对象(下)
【C++ 初阶路】--- 类和对象(下)
7 1