五子棋--软件工程课程设计内容摘要:

t1, point2)) return false。 if (count == 5) return false。 else if (count == 4) return true。 else { bool blnFlag。 points[x, y] = qzcolor+1。 blnFlag = !ActiveConnectqp(qzcolor, count 1, point1, point2)。 points[x, y] = qzcolor。 return blnFlag。 } 9) 查看 是否是最好的点 —— FindBestPoint 首先,查看有没有最佳点,并形成栈元素。 如果没有,返回 false;否则,将这栈元素压入回溯栈中。 当栈非空时,将栈元素弹出,如果栈中的 pointNumber 小于 pointCount 时,在棋盘上下一棋。 如果赢棋,不再继续探测,并在棋盘上退一棋。 如果和棋的话,也不再继续探测,并在棋盘上退一棋。 否则,继续下棋并探测。 如果栈顶元素无点,弹出后栈必非空,并在棋盘上退一棋。 如果栈顶元素中点均已试过,则寻找栈顶元素中点的最好结局,并寻找最佳步数。 实现的代码如下: result totalresult =。 int i, bestStepNumber = 0。 StackElement tempStackElement = new StackElement()。 if (first) { qzcolor = 0。 if (!FindBestFivePointsAndFormAStackElement(qzcolor, ref tempStackElement)) return false。 } else { qzcolor = 1。 if (!FindBestFivePointsAndFormAStackElement(qzcolor, ref tempStackElement)) return false。 } (tempStackElement)。 while ( 0)//栈非空 { tempStackElement = (StackElement)()。 if ( ) { //在棋盘上下一棋 points[[].X, [].Y] =。 if (Win(, [])) {//赢棋,不在继续探测 [] =。 [] = + 1。 //在棋盘上退一棋 points[[].X, [].Y] = 2。 ++。 (tempStackElement)。 } else if ( == M 1) {//将此元素压入栈后栈满,不在继续探测 [] =。 [] = M。 //在棋盘上退一棋 points[[].X, [].Y] = 2。 ++。 (tempStackElement)。 } else {//另一方继续下棋向下探测 ++。 (tempStackElement)。 FindBestFivePointsAndFormAStackElement(+1, ref tempStackElement)。 (tempStackElement)。 } }//end if else//栈顶元素无点或点均已试过 { if ( == 0)//栈顶元素无点,且弹出后栈必非空 { tempStackElement = (StackElement)()。 [ 1] =。 [ 1] = + 1。 //在棋盘上退一棋 points[[ 1].X, [ 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 == [i] amp。 amp。 bestStepNumber [i]) bestStepNumber = [i]。 } if ( 0)//栈非空 { tempStackElement = (StackElement)()。 [ 1] = (result)(0 totalresult)。 [ 1] = bestStepNumber。 //在棋盘上退一棋 points[[ 1].X, [ 1].Y] = 2。 (tempStackElement)。 } } } } for (i = 0。 i。 i++) if (totalresult == [i] amp。 amp。 bestStepNumber == [i]) break。 bestPoint = [i]。 return true。 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。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。