C语言程序设计课程设计(论文)-黑白棋

上传人:aa****6 文档编号:29218126 上传时间:2018-01-22 格式:DOC 页数:20 大小:90KB
返回 下载 相关 举报
C语言程序设计课程设计(论文)-黑白棋_第1页
第1页 / 共20页
C语言程序设计课程设计(论文)-黑白棋_第2页
第2页 / 共20页
C语言程序设计课程设计(论文)-黑白棋_第3页
第3页 / 共20页
C语言程序设计课程设计(论文)-黑白棋_第4页
第4页 / 共20页
C语言程序设计课程设计(论文)-黑白棋_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《C语言程序设计课程设计(论文)-黑白棋》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计(论文)-黑白棋(20页珍藏版)》请在金锄头文库上搜索。

1、- 大 学C 语言程序设计 课程设计(论文)题目: 黑白棋 院(系): 专业班级: 学 号: 学生姓名: 指导教师: 教师职称: 起止时间: 课程设计(报告)任务及评语院(系): 教研室:学 号 学生姓名 专业班级程序设计(报告)题目黑白棋程序设计(报告)任务程序设计的任务与要求:(1)掌握 C 语言编程的基础知识。(2)较熟练地编写 C 语言应用程序。(3)了解 C 语言的常用标准函数、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专

2、业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2011 年 1 月 4 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第 1 章 课程设计的目的与要求 .11.1 课程设计目的 .11.2 课程设计的实验环境 .11.3 课程设计的预备知识 .11.4 课程设计要求 .1第 2 章 课程设计内容 .22.1 程序功能介绍 .22.2 程序整体设计说明 .22.2.1 设计思路 .22.2.2

3、 数据结构设计及用法说明 .22.2.3 程序结构(流程图) .72.2.4 各模块的功能及程序说明 .82.2.5 程序结果 .102.3 程序源代码及注释 .11第 3 章 课程设计总结 .16参考资料 . 17辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)1第 1 章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C) 课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对 C 语言课程的基本知识的理解和掌握 2. 掌握 C 语言编程和程序调试的基本技能 3. 利用 C 语

4、言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用 C 语言解决实际问题的能力6.了解 C 语言与函数的关系7.掌握一些初等函数1.2 课程设计的实验环境硬件要求能运行 Windows 2000/XP 操作系统的微机系统。C 语言程序设计及相应的开发环境。1.3 课程设计的预备知识熟悉 C 语言及 C 语言开发工具。1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)2第 2 章 课程设计

5、内容2.1 程序功能介绍这种棋通常是黑白两个面。一方执白,一方执黑,每次在棋盘上走一个子。无论横竖线或斜线均可。只要两个同样颜色的将另一个颜色的夹在中间了,就可以将这个颜色翻过来,最终看哪个要色多,即获胜。我认为胜利的根本是占边。2.2 程序整体设计说明2.2.1 设计思路首先可以用二维数组表示棋盘(比方可以是 int,元素为“1”表示玩家甲的棋子, “2”表示玩家乙.) ,然后写一个函数实现如下功能: 每下一子,就利用下标检测此子周围 8 个元素(边上的没有这么多,就要通过下标的限制了)有没有相同的,有的话,累计(要考虑分 4 种情况累计,横竖斜) ,并调用相应方向的函数检测那些相同的元素,

6、没有就跳过继续。 再写四个函数(检测横竖斜 4 个方向的) 最后主函数完善。2.2.2 数据结构设计及用法说明 现在有如图示的这样一个棋局,轮到电脑下棋。现在它发现有这样三个地方可以下:e3,c3,c5。这三种下法分别会形成三种局面:A、B、C。如果是人在下棋,就会思考:那一种下法更好呢?比如 A 被别人占角,B 没什么变化,C 占了别人的角。当然棋手会选择下 C。电脑也是如此,它会对每一种棋局评一个分,比如它判断,如果被别人占角,就减80 分,相反占别人的角就加 80 分。那么 A=-80 分,B=0 分,C=80 分。电脑会选择下 C。电脑程序对棋局评分的部分,称为“估值函数”(Evalu

7、ation Function)。真正的估值函数当然不会这么简单。它会用到技巧篇提到的如行动力、潜在行动力、余裕手、边角判断、稳定子等综合因素来判断。具体的估值函数,我会在“估值函数”一节中详细讲述。初始棋局(-1)-+-| | |e3 c3 c5(A) (B) (C) 辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)3接下来,如果人就这么判断。那么它顶多也就是个初学者。为什么呢?因为它不会推理,碰到对手弃角之类的战术,如“边角判断”中示例的一些情况,就输得一塌糊涂了。当然,可以告诉电脑,碰到“边角判断”中的几种情况,就如何如何下。但是,真实的棋局是非常复杂的,电脑(也包括人脑)几乎

8、不可能对动态的棋局给出静态的评估。因为实际对局总会出现这样那样的情况,是无法预先估计的。碰到这些情况,人就会向后推几步,看一看会是怎样的一个局面。一些棋类大师往往可以推十几步甚至更深。电脑也是如此。 还是刚才那一幅图的演化。甲方下棋-乙方下棋-初始棋局-+-| | |e3 c3 c5-+- -+- -+-| | | | | | | | | | | | | |f2 f3 f4 f5 f6 c2 d3 e6 f5 b6 c6 d6 e6 f6 +84+36+12 +5 -1 +11 -1 +6 +6 +6 +0 -5 +3 +5 电脑在自己下棋以后,把对手的下棋情况也推理出来。然后加以评分。(最下

9、一排是电脑评估的得分)这一次电脑又如何下呢?这时电脑假设对手是高手。如果电脑下e3,对手就会下对电脑最不利的情况 f6。同样,电脑下 c3,对手就会下 d3,电脑下c5,对手就会下 d6。这三种情况,c5 是最不好的(因为 c5 的下一步 d6 的得分最低),c3与 e3 一样。因此电脑会下 c3 或者 e3。用程序化的语言这样描述: 如上图所示棋局,设电脑为白棋,推理深度为 2,可以形成如下的树:(数字为节点值)初始棋局-白棋下棋之后辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)4-黑棋下棋之后估值初始棋局(-1)-+-| | |e3(-1) c3(-1) c5(-5)-+-

10、-+- -+-| | | | | | | | | | | | | |f2 f3 f4 f5 f6 c2 d3 e6 f5 b6 c6 d6 e6 f6 +84+36+12 +5 -1 +11 -1 +6 +6 +6 +0 -5 +3 +5 结果:应该下 e3 或 c3具体实现的伪算法类似于经典的八皇后问题。还有几种 alpha-beta 算法的改进型,最广泛采用的是 NegaScout,(Alexander Reinefeld 发明),但它和一般的 alpha-beta 剪枝算法没有根本的不同。其他的还有 PVS和 SSS*。下面举例说明。 还是基于刚才的棋形,假设先搜索 e3-f2 f3 f

11、4 f5 f6、再 c3-c2 d3 e6 f5、再c5-b6 c6 d6 e6 f6,即从左至右的顺序的深度优先搜索。则搜索到 d3 分枝之后,就不用搜索 e6 和 f5 了。因为如果接下来的值比 d3 大,就不会赋值给 c3,如果比 d3 小,赋值给 c3 后,也不会赋给根节点,因为根节点取最大的值,现在根节点的值是-1,不会取更小的值。同样的,搜索 d6 后,也不用搜索 e6、f6 了,也就是说,搜索到比-1 还小的值之后,就不用搜索了。 在搜索过程中,电脑下棋结点的当前最优值被称为 值(即初始棋局的值),对手下棋结点的当前最优值被称为 值(即例子中 C3 的值)。在搜索过程中, 值递增, 值递减,两者构成了一个区间。这个区间被称为窗口,而对手下棋的结点最终的最优值将落在这个窗口中。一旦在电脑下棋的结点得到其子结点的返回值大于 值,则发生剪枝。初始棋局(-1)辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)5-+

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号