软件工程课程设计-井字棋游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件工程课程设计-井字棋游戏

本科课程设计说明书

姓名学号:

学院: 理学院

专业年级: 2013级信息与计算科学1班

课程: 软件工程

设计题目: 井字棋游戏

2015年 12 月

目录

1 引言………………………………………………………………………………

1 2 软件开发可行性分析 (1)

2.1 可行性分析 (1)

2.2 软件开发进度安排…………………………………………………………… 1 3 软件需求分析…………………………………………………………………… 2 4 软件设计………………………………………………………………………… 2 4.1 概要设计……………………………………………………………………… 2 4.2 详细设计……………………………………………………………………… 4 5 编程实现………………………………………………………………………… 5 5.1 软件开发环境介绍…………………………………………………………… 5 5.2 相关工具的选取……………………………………………………………… 5 5.3 软件所需的硬件设备………………………………………………………… 5 5.4 系统运行环

境........................................................................... 5 5.5 软件实现................................................................................. 5 6 测试.......................................................................................... 14 总结 (15)

本科课程设计说明书第1页共3页 1引言

在课程设计项目中,井字棋游戏设计作为初学者的我们来说,是个比较适合和有研究意义的题目。“井字棋”游戏(又叫“三子棋”),或是一字棋,是一款十分经典的益智小游戏,想必很多玩家都有玩过。“井字棋”的棋盘很简单,是一个3×3的格子,很像中国文字中的“井”字,所以得名“井字棋”。“井字棋”游戏的规则与“五子棋”十分类似,“五子棋”的规则是一方首先五子连成一线就胜利;“井字棋”是一方首先三子连成一线就胜利。虽然这只是个很简单的小游戏,但作为初学者的我们认识项目设计的技巧与结构及其概念的理解,封装性、继承派生、多肽的理解及实现,是比较好的课题。对我们以后的大型程序的设计奠定了基础。所以作为我们这次的课程设计项目来说,我们认为是个很好的、有可研究性的设计项目。

井字棋,英文名叫Tic-Tac-Toe,是一种在3*3格子上进行的连珠游戏,和五子棋比较类似,由于棋盘一般不画边框,格线排成井字故得名。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X)

2 软件开发可行性分析

2(1 可行性分析

该游戏具有较高的可行性,具体分析如下:

1.该游戏的开发语言是C#,其凭着高效的开发速度、安全、便捷,使系统开发变得更加容易。

2.游戏运行的硬件环境要求低,一般配置的计算机硬件就可以运行游戏,游戏上手容易,操作简洁。

2(2 软件开发进度安排

2015年12月13日2015年12月20日ID任务名称开始时间完成持续时间18192021222324251学习C#基本语法2015/12/182015/12/192d

2分析游戏功能2015/12/212015/12/211d

3设计开发游戏2015/12/222015/12/221d

4运行调试程序2015/12/222015/12/232d

5编写课程设计论文2015/12/242015/12/252d

本科课程设计说明书第2页共4页

3 软件需求分析

1.玩家按下按键后可以选择开始游戏。

2.开始游戏时可以选择O\X子。

3.玩家可以随时退出游戏。

4.玩家可以重新开始。

4软件设计

井字棋游戏初始化开始界面会提示玩家选择是否先下。选择是则先下则为x,否则为o,游戏有3×3的棋盘,分别由两人执O和X轮流下棋,类似五子棋的玩法,到一方三子连珠的时候,该玩家为胜者.通过计分板计算比分!

4.1概要设计

井字棋中,假设使用“X”的是人,使用“O”的是计算机。“X”方先走,设定X方的最大利益为正无穷(程序使用常量+INFINITY表示),O方的最大利益为负无穷(程序中使用-INFINITY表示),即X方和O方走的每步棋都要力图使自己的利益最大化,而使对方的利益最小化。这样我们称X方为MAX(因为他总是追求更大的值),

本科课程设计说明书第3页共5页 O方为MIN(它总是追求更小的值),各自都为争取自己的最大获益而努力。现在举例说明,比如图4所示的棋局树:

图1棋局形成的树

X方先走,有三种选择,如图4中第二层所示。假设X方选择最左边的走法,那么O方接下来将有5种走法,O方会选择最小化的走法,即值为-1的走法,因为它的最大利益是负无穷;同理,X方的另外两种走法会分别得到O方的最小值1和-2。这样,对于X方来说,三种走法会导致O方最小化值分别为-1、1、-2,X方的最佳策略则是选择其中最大的,即第二层中间的走法,因为它的最大利益是正无

穷,这就是极小极大算法的体现——X方的选择总是极大化,O方的选择总是极小化。

对于其中那些值的是如何计算的,我们举例说明,比如对于第三层最左边的棋局,

,则X共有6中3连子情况,即获胜情况;在这种状态下,如果把棋局空白处都填上X

如果把空白处都填上O,则O共有5种3连子情况,所以结果是二者相减等于1。

在具体走起过程中,MAX面对MIN最大获利中的最小值时,会选择其中最大的,比如图4第二层小括号内的值都是第三层中能使MIN最大获利的最小值,这时候MAX选择其中最大的,这对MAX最为有利,所以MAX方选择图4第二层中间的走法最好。同样道理,MIN也会一样,选择对自己最有利的,即MAX有可能获得的最大值。这时候,MIN在走棋时会考虑MAX方占据哪个位置对MAX最有利,然后MIN 把这个位置先占了。有点难理解,其实就是抢先把对对手有利的位置抢占了。

简单说,X方或者MAX方的走棋时由人来控制的,我们不仔细说了。对于O方或者MIN方,它走棋时要考虑哪个位置对X方最有利,然后把该位置占据,即O的最佳走棋就是X的最佳走棋。所以O在走棋之前,先站在X的角度寻找最佳走棋位置。后文中minimax方法就是站在X角度来考虑极小极大算法,找到X的最佳走棋位置,然后由O方来占据该位置。

2、极小极大算法

整个算法包括如下几个部分:

首先要有一个评估方法gameState,对每走一步棋后的棋局进行评估,估值为WIN常量说明X方,即MAX方获胜;估值为LOSE则O方,即MIN方获胜;估值DRAW

相关文档
最新文档