五子棋设计说明书
主要成员变量说明
) 选择游戏模式标志——
用来表示当前玩家选择游戏的情况,当 为 时,表示人机对战;为 时,
表示人人对弈。
) 游戏开始标志——
用来判断当前游戏是否开始
) 音效标志——
在下棋过程中,判断是否需要声音,当 为 时,表示玩家需要声音,否则的
话,玩家不需要声音。
) 谁先下的标志——
这个标志只对人机对弈时有效。当 为 时,表示人先下,否则,电脑先下。
) 棋盘数据——
为棋盘情况数组,是用一个 的二维数组来表示的。 表示此处无
子, 表示此处为黑子 表示此处为白子。
) 棋子颜色标志——!"#
用来表示当前棋子的颜色,!"# 时表示黑棋,!"# 时表示百棋。
$) 棋子数据——!"
表示棋子所放的位子,是用一个 的 %#&' 类型的二维数组来表示。它还可以
用来显示当前棋子的图片。
() )*%
用来记录鼠标经过后点的位置。
+) #,-#,
用于悔棋的栈。
)#,.#,-#,
用于回溯的栈
)结局
用枚举类型来表示结局。如:
结局
回溯栈元素类——StackElement
成员变量:
) !"/棋子的颜色
) 0*%最好点的位置
) /计算最好点的数目
)1点的数目
)2结局
)1预测的步数
棋子点属性 ——类 qzdianshuxing
成员变量:
)#,/#黑棋子 个(包括活棋)的连接条数
)#,3#4*黑活棋 个的连接条数
)52/#白棋子 个(包括活棋)的连接条数
)523#4*白活棋 个的连接条数
)3#4*活棋数为 的连接条数
主要成员函数说明
) 初始化棋盘——64"!
初始化操作包括以下几个步骤:
设置棋子所在的位置
设置棋子的大小
初始化棋子的背景颜色
将棋子的 " 设置为/6
将棋子的可见性设置为
将棋子添加到 上。
) 绘制棋盘——0%
其主要是画出以 的大小为每一小格,代码如下:
!!"
#$%&'()!*+ )!*+,"
#$%&'() !*+ - !*+"
) 绘制光标——0))*
当鼠标在棋盘上移动时,当前的显示画红方框,过去的显示和背景一样颜色的方框。
当前的红方框代码如下:
$.//$0//$.12#$345//$012#$6#5"
7$."+"*+!)
'$0"+"*+!
#$%&7 ' 7 ' "
#$%&7 ' 7 ' "
#$%&7! ' 7! ' "
#$%&7! ' 7! ' "
#$%&7 '! 7 '! "
#$%&7 '! 7 '! "
#$%&7! '! 7! '! "
#$%&7! '! 7! '! "
489($.7
489($0'
过去的方框代码如下:
489($.:"
#$%&4489($. 489($0 489($.
489($0 "
#$%&4489($. 489($0 489($.
489($0 "
#$%&4489($.! 489($0 489($.!
489($0 "
#$%&4489($.! 489($0 489($.!
489($0 "
#$%&4489($. 489($0! 489($.
489($0! "
#$%&4489($. 489($0! 489($.
489($0! "
#$%&4489($.! 489($0! 489($.
! 489($0! "
#$%&4489($.! 489($0! 489($.
! 489($0! "
) 下棋子——!"
下棋子有两种可能性,一是知道一个点的横纵坐标;二是知道一个点。
下面我就说一说知道',7坐标的情况,第二种情况只要调用第一种情况就行了。
假如下的是一个黑棋子,将!"的背景图设置为#,,并将此处标记为已下黑棋,
并将此棋子标记为最后落子指示。如果悔棋的栈不为空,将其弹出栈,并将!"的图像
设置为什么都没有,再将其压入栈。同理,白旗也跟这一样做。代码如下:
;"
;<7'=$>?#4@##五子棋$($2$?
<7'=
;<7'=$@##五子棋$($2$?
?A?$1B"
("?A?$("
;<$.$0=$@##五子棋$($2$
?A?$(5"
;<7'=$>?#4@##五子棋$($2$5
<7'=
;<7'=$@##五子棋$($2$5
?A?$1B"
("?A?$("
;<$.$0=$@##五子棋$($2$
?A?$(5"
最后将其可见性设置为 。
) 开始函数——
当棋局开始时,就应将棋盘初始化,使棋盘上没有棋子。如果有悔棋,就要将悔棋栈
清空。代码如下8
if (!begin)
{
begin = true;
for (x = 0; x < 15; x++)
for (y = 0; y < 15; y++)
{
qz[x, y].Visible = false;
points[x, y] = 2;
}
while (backStack.Count > 0)
backStack.Pop();
}
以下函数是实现人机对弈的主要函数:
) 察看两点之间的棋子数函数——/#!/
这个函数主要求两点之间可能形成五连子的 !"# 色棋的连子数9包括活期:。首先,
求出两点之间总共的棋子数,并判断棋子所在哪个方向。沿着这个方向每个点的坐标 ,
并察看这几个点中有没有反色的棋子。如果有,棋子数设为 ,否则的话,棋子数自加
。代码如下:
int x, y, i, j, length, xPlus = 0, yPlus = 0, sum, maxSum = 0;
length = Math.Max(Math.Abs(point1.X - point2.X), Math.Abs(point1.Y
- point2.Y)) + 1;
if (point1.X != point2.X) xPlus = 1;
if (point1.Y != point2.Y) yPlus = (point2.Y -
point1.Y)/Math.Abs(point2.Y - point1.Y);
for (i = 0; i < length - 4; i++)
{
x = point1.X + i * xPlus;
y = point1.Y + i * yPlus;
sum = 0;
for (j = 0; j < 5; j++)
{//察看两点之间当中有没有反色
if (points[x + j * xPlus, y + j * yPlus] ==
qzcolor)
sum++;
else if (points[x + j * xPlus, y + j * yPlus] ==
-qzcolor+1)
{
sum = 0;
break;
}
}
if (maxSum < sum)
maxSum = sum;
}
return maxSum;
$) 察看两点之间是否存在活棋的函数——3#4*/#!
这个函数主要求两点之间 !"# 色棋是否存在活棋。 变量表示在一直线上,比如,
一条向下的直线,则表示点 上方可下的个数;而 表示点 下方可下的
个数。代码表示为:
85$885$885$8 $."$0"+$0"
C 85$885$885$8 + C$." + C$0"
C$0"
则长度表示为:
#585$8785$D$.C$."85$D$0C$0""!!
!C
先求两点之间 ; 色棋的棋子个数,做法和函数 /#!/ 一样。再判断它是否是
活棋。当参数 # 和所得两点之间 ; 色棋的棋子个数相等,并且两头都没下棋子时,它
为活棋。否则,反之。代码如下:
9;<=;<:'%>
9;?=;?:7%9;?@;?:A)2;39;?@;?:>
9>B2@>CC:
D
';<@'%C'%>
7;?@7%C7%>
9'C'%EFF7C7%E:
,>
>
9>B>CC:
D
9'C'%7C7%!"#:
CC>
9'C'%7C7%@!"#C:
D
>
,>
G
G
9B'HHB7@7%HH7@7%B:
D
9#HH'@'%7@7%HH'C'%7C
7%:
评论19
最新资源