怎么编一个五子棋游戏?(带ai)

C语言制作一个五子棋游戏【附代码】 目录五子棋游戏设计与实现1.1 系统开发思路(需求分析)1.2 系统功能设计1.3 系统详细设计1.3.1数据结构设计1.4 系统实现1.5 系统测试 五子棋游戏设计与实现 1.1 系统开发思路(需求分析) 使用C语言,在VC环境下,利用VC绘图库、二维数组的基本操作设计一个双人五子棋对战游戏,某一色五子连珠表示该方胜出。白棋赢: 白棋子率先在一条直线上没有空位布满五个棋子;黑棋赢: 黑棋子率先在一条直线上没有空位布满五个棋子。根据五子棋游戏规则,需要实现以下需求: 1、输出游戏规则并由用户决定是否遵守并 阅读详情

源代码下载

本教程适合初学者,用到的工具VC++ 6.0

 

五子棋游戏算法比较简单,实现起来比较容易,适合初学者练习。

    我这个五子棋游戏是自己花了2天的时间完成的,当时刚学mfc,想练一下手就做了这个游戏。

    棋盘和棋子可以用GDI来实现,棋盘用GDI划线,基本上就是LineTo(x,y),MoveTo(x,y),一个棋盘就出来了。具体代码如下

    OnPaint()函数的else内加入如下代码

 

       CPaintDC dc(this);

       dc.SelectStockObject(BLACK_PEN);

       int i,j;

       for(i=60;i!=420;i=i+40)

       {

           dc.MoveTo(i,60);

           dc.LineTo(i,380);

       }

       for(j=60;j!=420;j=j+40)

       {

           dc.MoveTo(60,j);

           dc.LineTo(380,j);

       }

    一个9×9的棋盘就画好了。至于如何画棋子,我思考了很长时间,贴图太麻烦,就用GDI来画圆,然后填充上不同的颜色,黑子、白子也就实现了。这里的棋子不应该是一个独立的量,它有自己的区域,应该能判断鼠标是不是点击到了这个区域,当点击这个区域的时候是否应该显示,应该显示什么颜色的旗子…… 把这么多东西集合在一起,应该定义一个类,于是CQuyu这个类就出现了。

    CQuyu有四个变量如下:

int flag;

    CRect rect;

    int y;

    int x;

x,y表示这个区域的中心,rect为以x,y为中心的边长为30的矩形,flag用来表示该对象的状态(0:空白 1:黑子 2:白字)

然后又定义了5个方法

    bool isWhite();//如果为白子,返回true

    CRect getRect();//获得该对象对应的CRect

    bool isBlack();//如果为黑子,返回true

    bool isEmpty();//如果为空,返回true

    bool isOn(CPoint point);//如果该点出在该区域返回true,用来判断鼠标单击对应的区域

   

view类中定义了一个vector容器,(需要包含#include <vector>

vector<CQuyu> qy;

OnInitDialog()内对qy进行初始化

    int i,j;

    CQuyu q;

    for(i=60;i!=420;i=i+40)

{

       for(j=60;j!=420;j=j+40)

       {

           q.x=i;

           q.y=j;

           qy.push_back(q);

       }

}

    当鼠标单击的时候,判断单击的是哪一个区域,如果该区域为空则修改区域状态

    void CWuziqidlgDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

    // TODO: Add your message handler code here and/or call default

    int i;

    for(i=0;i!=qy.size();i++)

       if(qy[i].isOn(point)&&!over&&qy[i].isEmpty())

       {

           qy[i].flag=1;

           ison=1;

           break;

       }     

    Invalidate();//引发重绘

}

OnLButtonUp()中实现ai,电脑走棋

void CWuziqidlgDlg::OnLButtonUp(UINT nFlags, CPoint point)

{

    // TODO: Add your message handler code here and/or call default

    //flag 1:black 2:white

    //color 1:white 2:black

    int i,temp1,temp2,max1,max2;

    max1=0;

    max2=0;

    temp1=0;

    temp2=0;

    for(i=0;i!=qy.size();i++)

    {

       if(qy[i].isEmpty())

       {

           qy[i].flag=2;

           if(getScore(1)>max1)

           {

              temp1=getScore(1);

              max1=temp1;

              temp1=i;

           }

           qy[i].flag=1;

           if(getScore(2)>max2)

           {

              temp2=getScore(2);

              max2=temp2;

              temp2=i;

           }

           qy[i].flag=0;

       }

    }

    if(ison==1&&!over)

    {

       if(max1>=max2)

           qy[temp1].flag=2;

       else

           qy[temp2].flag=2;

    }

    ison=0;

 

 

    if(!isWin())

    Invalidate();

 

    CDialog::OnLButtonUp(nFlags, point);

}

OnPaint()函数中实现绘制,每次先把棋盘画好,然后遍历各区域,如果不为空就绘制相应的棋子。还要判断是否有一方获胜,如果有就结束游戏。(具体代码见源程序)

这个程序主关键的是算分,对不同的走法进行算法,得分最高的为要真正要走的。这也就是ai,这一点我参考了网上的五子棋经典算法(自己做了一些修改):

 

判断是否能成5, 如果能给予10500

判断是否能成活4,如果能给予10400

判断是否能成双死4,如果能给予10300

判断是否能成死43,如果能给予10000

判断是否已成双活3,如果能给予5000分,如果是人方的话给予-5000 分;

判断是否成死33,如果是机器方的话给予1000

判断是否能成死4,如果能给予500

判断是否能成单活3,如果能给予200

判断是否已成双活2,如果能给予100

判断是否能成死3,如果能给予50

判断是否能成双活2,如果能给予10

判断是否能成活2,如果能给予5

判断是否能成死2,如果能给予3

否则给0

 

下五子棋不光要进攻,还要防守,所以要先对假设那些空的格子下自己的棋子能得多少分,得出一个最高分,然后假设这些格子放上对方的棋子,得出一个最高分,如果进攻的最高分大于等于防守的最高分,则进攻,否则先进行防守。还有一些具体的细节没有写出,如怎么判断活4,活5之类的。这些问题比较简单,留给读者去思考。

 

我的源程序实现了上述所有功能,有疑问可以去看源代码。也可以直接和我联系,我的邮箱jianger2005@163.com

源代码下载

【python写一个AI对战五子棋游戏 五子棋作为经典的棋盘游戏之一,也是挺受欢迎的,今天就来制作一个五子棋游戏,来康康吧。 阅读详情

相关推荐

python博弈树实现AI五子棋游戏

python博弈树实现AI五子棋游戏 运行比较慢,后续优化。 功能有选择先后手和先手禁手规则。 运行效果: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- #wuziqi.py #Author:fengqi from graphics import * import time ### num = [[0 for a in range(16...

hfq0219的博客 3630

c++小游戏五子棋AI

c++小游戏五子棋AI,基于qt写的,代码浅显易懂,分为人人对战和人机对战两种模式

使用pygame实现一个简单的五子棋游戏

使用pygame实现一个简单的五子棋游戏前言说明 前言 写程序已经丢掉很长一段时间了,最近觉得完全把技术丢掉可能是个死路,还是应该捡起来,所以打算借CSDN来记录学习过程, 由于以前没事的时候断断续续学习过python和用flask框架写过点web,所以第一步想捡起python,但是,单纯学习python有点枯燥,正好看到pygame,感觉还挺简单,所以想先写个小游戏练练手,于是练手了这个简单的五...

weixin_41572011的博客 7305

C++实现五子棋游戏AI

应用MFC实现五子棋游戏简单的AI功能,方便新学者学习

五子棋游戏制作一

讲解 五子棋,实际上就是用一个数组来实现的。没有其他很复杂的结构。 首先我们制作五子棋,先要有一个棋盘。 public void setGraphics(Graphics g){ this.g=g; for(int i=0;i<11;i++){ g.drawLine(100+Size*i, 100, 100+Size*i, 500); g.drawLine(100, 10...

weixin_44143695的博客 4036

python写小游戏详细教程,用python简单的小游戏

大家好,我是小F~经常听到有朋友说,学习程是一件非常枯燥无味的事情。其实,大家有没有认真想过,可能是我们的学习方法不对?比方说,你有没有想过,可以通过打游戏来学程?今天我想跟大家分享,教你如何通过边打游戏边学程!相关文件及代码都已上传,公众号回复【】即可获取。接下来就一起来看看吧~

chatgpt001的博客 3656

Qt小游戏开发:五子棋AI功能)

写了一个AI五子棋游戏AI的表现还可以~ 预览 步骤 整体的代码结构,一个游戏逻辑类,一个UI类 1 定义游戏数据结构 // 游戏类型,双人还是AI(目前固定让AI下黑子) enum GameType { PERSON, BOT }; // 游戏状态 enum GameStatus { PLAYING,

踏莎行的博客 5万+

【人工智能】基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计

基于蒙特卡洛树搜索和策略价值网络的AI五子棋算法设计摘要蒙特卡洛树搜索算法五子棋博弈的状态价值函数附1:详细论文说明下载:附2:实现代码下载: 摘要 随着人工智能领域的发展,深度学习、强化学习等算法被广泛应用于解决各种游戏博弈问题,通过训练神经网络来得到各种游戏的人工智能算法,人工智能来到了一个新的发展水平。在此类游戏博弈问题上,其他的方法要么是类似穷举法的搜索算法,它们在有限计算资源的情况下博弈能力较弱;要么是基于机器学习的方法,它们虽然博弈能力强,但是需要花费大量资源,训练和预测时都十分缓慢。因此,在设

点赞的都能无bug通过! 6025

C++ 实现对战AI五子棋

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

zhoubancheng的博客 9760

C++五子棋AImfc,附教程)

C++五子棋AI内容详细教程开源代码,适合初学者参考与学习。

五子棋mfcai,附教程)

用VC++ 6.0五子棋,实现了ai,附了自己写的教程,适合初学者参考

python五子棋人机AI对战,如何简单实现AI智能,原码附上。

大家好我是小豪,今天给大家来的是pygame小游戏 Ps:其实还有好多值得研究拓展的小游戏,我已经压缩上传了,想要学习的可以直接点击下面链接下载: pygame小游戏:超级玛丽、五子棋、2048、扫雷、贪吃蛇、俄罗斯方块… 主题,如何简单实现AI智能,内容在下面一点点 今天其实主要是来请教圈内大佬一个问题。。。 我发现这个五子棋人机对战里面的字体似乎出了问题,但能力有限,只好附上代码,求大佬指教,上图: 问题就如上图这样,程序可以运行,但是最终判定输赢的时候,字体无法显示,另外写右边信息的字体也是无法显

小豪日记 1万+

基于java五子棋游戏设计与实现

获取项目源文件,联系Q:1225467431,指导其它毕设,课设 摘要:五子棋作为中国古代的传统黑白棋种之一,有着广泛的群众基础,是一种老少皆宜的棋类休闲游戏。开发一款五子棋游戏可以使广大棋牌游戏爱好者在闲暇时间切磋棋艺,对互联网技术的推广和个人棋艺的提高都有好处。的提高都有好处。 本文是采用JAVA语言写的五子棋游戏,JAVA语言无论体现在跨平台还是在面向对象,可移植性,安全性,并发机制和可视化...

【含源文件】 5528

AI人机对战五子棋游戏【Python(pygame)+AI】并实现软件输出

AI人机对战五子棋游戏【Python+AI】并实现软件输出,一篇文章展示五子棋游戏,从Python程,到实现AI技术,再到最后的可执行程序的封装,详细且具体,代码可运行

weixin_60182338的博客 1万+

基于C++的AI五子棋游戏项目开发教程

本项目基于C++开发,整体来说比较简单,实现了人与AI之间的五子棋对弈,并且可以判定胜负以及音效添加等等,按照我博客的详细教程一步一步下去肯定没问题!

IronmanJay 2123

五子棋游戏AI智能算法设计

五子棋游戏C语言AI智能算法设计 近来发现五子棋游戏很有趣,尤其是AI智能算法很烧脑。网上介绍有什么贪心算法,剪枝算法,博弈树算法等等,不一而足。 对于人机对战的电脑智能应子算法,参阅很多五子棋书籍棋谱和五子棋竞赛的对抗棋谱。我感到白棋的后手防御算法很难取胜,棋界有黑棋高手先手必胜一说。算法么想了很多,既然是人工智能下棋就得按人的思路来算计。棋书阐述有许多思路和棋局解说。如活四冲四,嵌五,活三嵌四,活二嵌二。这些是高级棋手的总结。我就按此思路用加权计权方法来表现此类各种情况。 下面程序代码写出了

baidu_41801770的博客 8967

html五子棋游戏(附源码)

html+css+js实现五子棋人机对战,有完整源码。

皮小孩的博客 1万+

Python & 2 python五子棋游戏实现

python五子棋游戏实现,其中的AI采取棋盘评分和博弈树算法。 项目背景与规划 Python 是一个高层次的结合了解释性、译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。 人工智能之父 John McCarthy说:人工智能就是制造智能的机器,更特指制作人工智能的程序。人工智能...

weixin_41446672的博客 5206
上一篇: 博客开张
下一篇: Python 入门笔记
索隆考研
博客等级 码龄18年 30粉丝 14原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值