基于 C++的五子棋游戏的设计
摘 要
五子棋作为一个棋类竞技运动,在民间十分流行,为了熟悉五子棋规则及技
巧,以及研究简单的人工智能,决定用 C++开发五子棋游戏。主要完成了人机对
战和玩家之间联网对战 2 个功能。网络连接部分为 Socket 编程应用,客户端和
服务器端的交互用 Class Message 定义,有很好的可扩展性,客户端负责界面维
护和收集用户输入的信息,及错误处理。服务器维护在线用户的基本信息和任意
两个对战用户的棋盘信息,动态维护用户列表。在人机对弈中通过深度搜索和估
值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以
及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法
的基础上分析一些提高提高电脑 AI 方案,如递归算法、电脑学习等。算法的研
究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参
考作用。
关键词:深度搜索;估值;电脑 AI;五子棋;算法
Gobang C++-based games design
Abstract
Gobang chess as a sport, is very popular in civil, in order to become familiar with
gobang rules and techniques, and the study of simple artificial intelligence, decided to
use the C++ Development gobang games. Completed a major man-machine war and
the war gamers interconnection between the two functions. Network Connection
Socket Programming for some applications, client and server interaction with Class
Message definition, a very good scalability, Client interface is responsible for the
collection and maintenance of user input information, and error handling. Server users
maintain online basic information and arbitrary two-time users of the chessboard of
information, dynamic maintenance user list. The man-machine players through depth
search and valuation module, the computer players to improve intelligence. Analysis
Module valuation of the precise elements, as well as a number of increased precision,
and on their search for nodes, In these algorithms on the basis of analysis to raise
some computer AI programs, such as recursive algorithm, computer learning.
Algorithm of procedures contribute to the understanding of the structure, logical
thinking ability, In other areas of artificial intelligence have great references.
.
Key words: Search depth; Valuation; Computer AI; Gobang ; Algorithm
目 录
论文总页数:23 页
1 引言 ...................................................................................................................................................1
1.1 课题背景...................................................................................................................................1
1.2 本课题研究的意义...................................................................................................................1
1.3 本课题的研究方法...................................................................................................................2
2 课题相关基础 ...................................................................................................................................3
2.1 五子棋.......................................................................................................................................3
2.1.1 棋盘和棋子......................................................................................................................3
2.1.2 规则及解释......................................................................................................................4
2.1.3 五子棋常用术语..............................................................................................................5
2.1.4 五子棋攻防......................................................................................................................8
3 C++....................................................................................................................................................9
3.1 C++简介.....................................................................................................................................9
4 课题详细研究方法 .........................................................................................................................10
4.1 程序结构说明.........................................................................................................................10
4.2 棋盘及棋子的类.....................................................................................................................11
4.2.1 棋盘................................................................................................................................11
4.2.1 char str[14];棋子......................................................................................................12
4.1 }胜负判断条件.......................................................................................................................12
4.2 电脑 AI....................................................................................................................................14
结 论..................................................................................................................................................21
参考文献 .................................................................................................................................................21
致 谢..................................................................................................................................................22
第 1 页 共 23 页
1 引言
1.1 课题背景
五子棋是起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为连珠,
英译为 Renju,英文称之为 Gobang 或 FIR(Five in a Row 的缩写),亦有连五子、
五子连、串珠、五目、五目碰、五格等多种称谓。
五子棋起源于古代中国,发展于日本,风靡于欧洲。对于它与围棋的关系有
两种说法,一说早于围棋,早在 “ 尧造围棋 ” 之前,民间就已有五子棋游戏;
一说源于围棋,是围棋发展的一个分支。在中国的文化里,倍受人们的青睐。本
世纪初五子棋传入欧洲并迅速风靡全欧。通过一系列的变化,使五子棋这一简单
的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国
际比赛棋。
21 世纪是计算机科学技术得到了显著的发展和进步的时代。现如今电脑已
经走向了千家万户。随着计算机编程语言的不断发展,各种面向对象的程序语言
出现,像 c 语言这种面向过程的语言似乎过时了,但是 c 语言也有其自己独有的
优势。
C 语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编
语言的特点。它由美国贝尔研究所的 D.M.Ritchie 于 1972 年推出。1978 后,C
语言已先后被移植到大、中、小及微型机上。它可以作为工作系统设计语言,编
写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用
程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,
而且各类科研都需要用到 C 语言,适于编写系统软件,三维,二维图形和动画。
具体应用比如单片机以及嵌入式系统开发。
1.2 本课题研究的意义
近来随着计算机的快速发展,各种各样的电脑游戏层出不穷,使得我们能有
更多的娱乐项目,而棋类游戏能起到锻炼人的思维和修身养性的作用,而且棋类
游戏水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯
帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将
族”等也以其优秀的人工智能深受棋迷喜爱。
越来越多的具有智能的机器进入了人类的生活,人工智能的重要性如今显而
易见。自己对人工智能比较感兴趣,而五子棋游戏程序的开发实现这个课题,正
好提供给我这样一个研究的机会,通过对人工智能中博弈方面的研究(人机对
弈),让我在简单的人机对弈全局设计,以及具体到相关算法上有了深入的了解。
人工智能属于计算机科学的领域,它以计算机技术为基础,近几十年来,它的理
论和技术已经日益成熟,应用领域也正在不断扩大,显示出强大的生命力。人工
智能大致可以分成几个学科,它们每一个都是独特的,但是它们常常又互相结合
第 2 页 共 23 页
起来完成设计任务,这时,这些学科之间的差别就变的很模糊。人工智能在专家
系统,自然语言理解,自动定理证明,自动程序设计,人工智能在机器人学、模
式识别、物景分析、数据库的智能检索、机器下棋(实质上是博弈论问题)和家
用电器智能化等领域都有广泛的应用。而这个课题就是和人工智能中的博弈论领
域紧密相关的。
这个题目核心是人工智能和 Socekt 编程,。并且人工智能中的博弈部分,由
于采用了大量的搜索算法,其中很多被利用到各方面。它的概念、方法和技术,
正在各行各业广泛渗透。智能已经成为当今各种新产品、新装备的发展方向。所
以,趁着这个机会,对人工智能中比较容易实现的人机博弈进行了解研究学习,
也是很实用且很有必要的。
C 语言经常被大家叫做过时的语言,但是既然过时那为什么还有那么多的人
在使用呢,单来说,C 语言是计算机程序语言的基础,是实用的程序设计工具,
学好 C 语言对你今后学习 JAVA、C++、VB 等可以打下良好的基础,因为这些语言
大部分都是由 C 语言扩充或衍生而来的。C 可以用于开发比较底层的东西,比如
驱动、通信协议之类,在 Unix 和 Linux 环境中也是不可或缺的,另外在嵌入式
领域也大有作为 1.相比较其他的编程语言(像 C++,JAVA),C 语言是个低级语
言。从总体上来说,低级的编程语言可以让你更好的了解计算机。
2.设备驱动程序和操作系统只能用 C 语言来编写。现在,你可能还从来没有编写
过一个设备驱动程序或者一个操作系统,但是如果你需要去修改他们的时候,怎
么办?
3.如果你想要得到一份编写微控制器程序的工作的时候,该怎么办?他们都是用
C 语言编写的。就因为不想学习一门新的语言,你就准备限制你能得到工作的机
会吗?
4.C 的程序比其他用别的语言写的程序,实现相同的功能,它用的代码行数更少,
而它带来的运行效率却更快。有时候,你的程序所需要的速度,只有 C 语言能做
到。
5.如果你学习过 C 语言,你就能学习现在任何的高级编程语言。因为所有的高级
语言都是以 C 语言为基础的(像 JAVA,C++,C#等等)。
1.3 本课题的研究方法
在进行游戏设计之前,首先决定的第一个问题就是,使用什么开发环境来编