Giter VIP home page Giter VIP logo

gobang's Introduction

C-project-practice---intelligent-man-machine-gobang-fight

C++新手项目实践 — 智能人机五子棋对战(利用Easyx的基础函数)

项目说明

项目开发环境为 Windows10,Vs2019

该项目使用语言为c++,利用了easyx辅助画图,并未涉及easyx的高级使用,稍加学习即可掌握,项目涉及三大类,分别是 :

1.Class Show。这个类包含了绘图的主要函数,以及鼠标调用的函数。

2.Class Users。这个类包含了用户的基本信息,以及二进制读写文件函数。

3.Class Chess。这个类是个抽象类,包含了获取该位置得分以及判定胜负等函数。这个类派生了AiChess和MyChess两个子类,顾名思义,分别是与人机棋局和我方棋局的评定有关。

项目根据胜负场和胜率设定了段位,根据当前棋局得分进行评估,并利用辅助栈实现了悔棋功能,初始时有十步悔棋步数,每赢一局加十步,增加了项目的创意。电脑下棋是随机遍历棋局的,意味着电脑并不是一成不变的,避免了同一套路无限用的可能。

下面我将讲解核心的算法。

体验

Windows 平台可下载 exe 程序运行:下载地址

项目算法**

首先假定白棋为玩家的棋子,黑棋为电脑的棋子。项目五子棋算法没有采用标准的博弈树算法,这对新手来说并不友好,我采用的是五元组算法,这个算法最初是在一个外国友人的博客中看到的,大概的**是(站在AI的角度):

对于五子棋而言,我们最终的目的就是找到一个五元组(五个连着的位置)使得电脑五子连珠,而一旦这个五元组有一个白棋,那么这个五元组对于电脑而言就算无效五元组(进攻方面),因为它永远也不可能连起来。

具体而言,我们枚举每一个可能的落子点,根据这一个点为起点,向四个方向扩展,枚举所有包含这个点的五元组(记住是所有包含这个点的五元组),根据黑棋和白棋的数量,为每一个可能的五元组判分,最后在把所有包含该点的五元组得分累加,就是该点的总得分,枚举到最高得分的点,就是我们电脑需要下棋的位置。

如何判定得分呢?如果该五元组既有黑棋又有白棋,那么这个五元组是完全报废的,它绝不可能五子连珠(对于双方都是这样);如果仅有黑棋,那么这个五元组对电脑就是有意义的,我们根据黑棋的数量拟定一个进攻得分;如果仅有白棋,这个五元组对于玩家而言是有益的,那么电脑落子在这个五元组内可以有效的防守,我们需要拟定一个防守得分。这个得分规范不是一定的,可以根据实验来调整,我给出我总结出的方案:

	/*g是电脑一方的棋, b是玩家一方的棋*/
	if (g == 0 && b == 0)		return 10;
	else if (g == 1 && b == 0)	return 35;
	else if (g == 2 && b == 0)	return 1500;
	else if (g == 3 && b == 0)	return 18000;
	else if (g == 4 && b == 0)	return 1000000;
	else if (g == 0 && b == 1)	return 15;
	else if (g == 0 && b == 2)	return 400;
	else if (g == 0 && b == 3)	return 6000;
	else if (g == 0 && b == 4)	return 150000;
	else if (g != 0 && b != 0)	return 0;
	return 0;

	/*四个接口,用于获取包含x,y点四个方向的五元组情况,返回敌我棋的数量*/
	vector<int> Get_Nums1(int x, int y);
	vector<int> Get_Nums2(int x, int y);
	vector<int> Get_Nums3(int x, int y);
	vector<int> Get_Nums4(int x, int y);
	int  Get_Points(int x, int y, int ch);				/*获取该点的得分,ch 参数表示是评估电脑的还是用户的*/
	int  x_Points(vector<int> nums, int ch);			/*一个五元组内,根据敌我棋的数量获取得分*/

项目演示视频以及完整项目下载

项目演示视频

智能五子棋项目视频

网盘下载:

链接:Vs2019项目下载

提取码:gbau

gobang's People

Contributors

happysnaker avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

gobang's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.