基于c语言的井字棋设计_第1页
基于c语言的井字棋设计_第2页
基于c语言的井字棋设计_第3页
全文预览已结束

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于c语言的井字棋设计

c-语言通常是计算机和计算机的第一门编程语言。这是对计算机课程的补充。学生的掌握直接影响到后续课程的学习。受到语言特点和程度深浅的限制,学生往往对教材上字符界面的习题提不起兴趣,再加上初学者对于语言本身的接受需要一个较长的过程,导致很多学生在学习过程中感觉C语言的学习枯燥,学习效果不佳。为了提高学生的学习兴趣,并使他们掌握一些编程方法,作者用C语言设计了一个简单的井字棋游戏,希望能使广大初学者掌握一些编程方法并提高程序设计兴趣。1.基于不同颜色的上最优氢规则井字棋是一款常见的两人对战的小游戏,玩法简单。设有九个空格,由MAX,MIN二人对弈,两玩家分别执不同颜色的棋子,轮流放入在3×3的棋盘中,一个格子只能放一个棋子,谁先使自己的棋子构成“三子成一线”(同一行或列或对角线全是某人的棋子),就可以判定为获胜。2..空着性条件评估函数主要用来在游戏搜索算法中对当前局面的优劣程度进行估值,确定评估函数值所依据的知识通常是该游戏领域的经验值和直观判断的知识。在游戏搜索算法中,评估函数是一个核心函数,该函数的好坏直接影响到程序的搜索速度和人工智能水平的高低。井字棋中,用叉号表示MAX,用圆圈代表MIN。比如图1中就是MIN取胜的棋局。估价函数定义如下:设棋局为P,估价函数为e(P)。(1)若P对任何一方来说都不是获胜的位置,则e(P)=e(那些仍为MAX空着的完全的行、列或对角线的总数)-e(那些仍为MIN空着的完全的行、列或对角线的总数)(2)若P是MAX必胜的棋局,则e(P)=+∞。(3)若P是MIN必胜的棋局,则e(P)=-∞。对于MAX来说,e(P)值越大则对自己最有利,对MIN最不利,所以简单地说,计算机棋手做判断的依据就是评估函数的值,寻找最大的那个。3.生成节点评估函数为了获得最优的落子位置,在算法中首先要生成搜索树。作者把States作为树根节点,根节点所在的层是极大层(MAX层),然后通过向棋盘中没有落子的空格添一个对方的棋子生成下一层(极小层,MIN层)的树节点,如果当前树的高度大于等于TREE_DEPTH(>=1)全局变量,则停止生成节点,否则则继续生成下一层节点(如果当前节点层为MIN层,则下一层为MAX层,否则,则下一层为MIN层)。生成每一层时可为每一层的属性(MAX或MIN)做标记,生成每个节点时,应计算这个节点的评估函数值,并将其保存在状态节点的e域中。因为层次遍历会修改非叶节点的极大极小值,而且非叶节点原来的极大极小值会对其来自其子女节点的极大极小值产生影响(比如,如果一个非叶节点的极大极小值大于或小于其子女节点中的最大者或小于其中的最小者,则导致其评估函数值无法更新)。所以非叶节点没有必要也不能保存。然后,通过层次遍历获得每个非叶节点的评估函数值,同时将非叶节点的bestChild域指向最佳子女,从而形成一条从根节点到叶节点的最佳解路径。最后,将当前的棋局更新为其最优子女节点的棋局,并获得落子的位置。4.状态节点的生成由于本程序采用的核心算法是极大极小分析法,所以,在实现算法之前,必须定义一些数据结构来保存生成的状态节点。因此,作者定义了State结构:作者使用了States[MAX_NUM]数组来保存生成的状态节点,通过State结构中的parent、child域构成了一个搜索树,并通过bestChild域保存了一条从根节点到叶节点的最优解路径。特别的,States作为根节点保存了当前的棋局状态。为了保存当前对弈过程的状态信息,作者定义了以下常量:以下常量表示棋局当前的状态同时,作者还定义了两个3×3的二维数组,Computer_move函数中要用到其中的一个来保存临时的棋盘格局,另一个则是用来保存上一步的棋盘格局。5.落子的发现和展示程序经过编译执行后,将会显示初始棋盘,由9个“0”组成,程序会询问你是否愿意先走棋,选择先走,输入“y”;选择后走,输入“n”。选择先走后,程序会提醒你将要落子的位置,用坐标(xy)表示。图2表示将在(2,2)落子。当输入落子的位置后,程序会显示你落子后的棋盘,其中人的棋子用“-1”表示,计算机的棋子用“1”表示。然后轮到计算机走棋。计算机走棋后,程序将显示此时棋盘的情况,并提醒用户落子。若干回合后,程序将会根据胜负情况输出比赛的结果。图3显示的是计算机取胜的信息。6.利

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论