基于c的五子棋游戏的设计与实现(编辑修改稿)内容摘要:

ckElement)()。 [ 1] =。 [r 1] = + 1。 //在棋盘上退一棋 13 points[[tempStackElement.pointNumber 1].X, [umber 1].Y] = 2。 (tempStackElement)。 } else//栈顶元素中点均已试过 { //寻找栈顶元素中点的最好结局 totalresult = [0]。 for (i = 0。 i。 i++) if (totalresult [i]) totalresult = [i]。 //寻找最佳步数 if (totalresult == ) { bestStepNumber = M + 2。 for (i = 0。 i。 i++) if (totalresult == [i] amp。 amp。 bestStepNumber [i]) bestStepNumber = [i]。 } else//totalresult==或 lose { bestStepNumber = 0。 for (i = 0。 i。 i++) if (totalresult == 14 [i] amp。 amp。 bestStepNumber [i]) bestStepNumber = [i]。 } if ( 0)//栈非空 { tempStackElement = (StackElement)()。 [ 1] = (result)(0 totalresult)。 [r 1] = bestStepNumber。 //在棋盘上退一棋 points[[tempStackElement.pointNumber 1].X, [umber 1].Y] = 2。 (tempStackElement)。 } } } } for (i = 0。 i。 i++) if (totalresult == [i] amp。 amp。 bestStepNumber == [i]) break。 bestPoint = [i]。 return true。 15 10) 寻 找 最 佳 的 五 个 点 , 并 形 成 栈 元 素 ——FindBestFivePointsAndFormAStackElement 函数主要是找最佳点,并形成栈元素。 如果找到,返回 true;否则。 返回 false。 要找 最佳点,就是找权值最大的点。 首先,计算出棋盘上每一个点的权值,并找出最大的一 个。 代码如下: int[,] qpPower = new int[15, 15]。 bool blnHaveFound。 int x, y, i, max。 = 0。 for (x = 0。 x 15。 x++) for (y = 0。 y 15。 y++) qpPower[x, y] = GetqpPower(qzcolor, x, y)。 for (i = 0。 i 5。 i++) {//求第 i个最佳点 max = 0。 for (x = 0。 x 15。 x++) for (y = 0。 y 15。 y++) if (max qpPower[x, y]) max = qpPower[x, y]。 for (x = 0。 x 15。 x++) { blnHaveFound = false。 for (y = 0。 y 15。 y++) if (max == qpPower[x, y]) { [i] = new Point(x, y)。 ++。 qpPower[x, y] = 1。 blnHaveFound = true。 break。 } if (blnHaveFound) break。 } 16 } if ( == 0) return false。 else { = qzcolor。 = 0。 return true。 } 11) 求权值 —— GetqpPower 定义八个方向:左,右,上,下,左上,右下,左下,右上。 代码如下: left = new Point((0, x 4), y)。 right = new Point((14, x + 4), y)。 top = new Point(x, (0, y 4))。 down = new Point(x, (14, y + 4))。 temp = (x , y )。 leftTop = new Point(x temp, y temp)。 temp = (x , y)。 leftDown = new Point(x temp, y + temp)。 temp = ( x, y )。 rightTop = new Point(x + temp, y temp)。 temp = ( x, y)。 rightDown = new Point(x + temp, y + temp)。 如果颜色是黑色,处理黑棋连子情况:如果这 个点没有下棋子,则在此置为 1,表示这点下的是黑棋。 然后看这个点各个方向黑棋子的数目是多少,并看是否是活棋,再作出处理。 最后,将此点处置为 2。 表示这点没有下棋子。 处理白棋连子情况: 在此点处置为 0,表示这点下的是白棋。 然后看这个点各个方向白棋子的数目是多少,并在此放一白棋破坏黑棋,再做出相应的处理。 如果各个方向上出现 3 个的活 棋。 就将tempActive3自加 1。 最后,将此点处置为 2。 表示这点没有下棋子。 设置权值:形成黑棋五个的权值设为 150000;形成白棋五个的权值设为 140000;形成黑活棋个数为 4或形成两条 以上黑棋个数为 4的权值设为 130000;形成一条黑棋个数为 4并且一条为黑活棋个数为 3的权值为 120200;形成一条黑棋个数为 4或一条 17 以上黑棋个数为 3的权值 110000;形成白活棋个数为 4或形成两条以上白棋个数为 4的权值设为 100000;形成一条黑棋个数为 4并且一条为黑活棋个数为 3的权值为 120200;形成一条白棋个数为 4 并且一条为白活棋个数为 3 的权值为 90000;两条以上白活棋个数为 3 的权值为 80000;形成一条白棋个数为 4 或一条以上白棋个数为 3 的权值为 70000;同样,如果颜色为白色,做法和以上的差不多。 代码如下 : if (qzcolor == 1) { if (points[x, y] != 2) return 2。 else { /// ///处理黑棋连子情况 /// points[x, y] = 1。 //左右方向 connectCount = ConnectqpCount(1, left, right)。 [connectCount]++。 if (ActiveConnectqp(1, connectCount, left, right)) { [connectCount]。 [connectCount]++。 } //上下方向 connectCount = ConnectqpCount(1, top, down)。 [connectCount]++。 if (ActiveConnectqp(1, connectCount, top, down)) { 18 [connectCount]。 [connectCount]++。 } //左上 _右下方向 connectCount = ConnectqpCount(1, leftTop, rightDo。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。