计算机毕业论文五子棋游戏软件的设计与实现 联系客服

发布时间 : 星期一 文章计算机毕业论文五子棋游戏软件的设计与实现更新完毕开始阅读18a820b0d15abe23482f4d94

北方工业大学继续教育学院本科毕业论文(设计)

表4.3下棋操作

if(m_color==1) //此时应为黑棋走 { wzq[m_point.x][m_point.y] = 1; Invalidate(); //更新数据 if(IsOver(point,1)) //判断是否结束 m_flag = 0; //已有胜方,不需要再接受鼠标消息 else m_color = -1; //黑棋走完,理所当然下面白棋走 } else if(m_color==-1) //此时应为白棋走 { wzq[m_point.x][m_point.y] = -1; Invalidate(); //更新数据 if(IsOver(point,1)) m_flag = 0; else m_color = 1; } //白棋走完,理所当然下面黑棋走 4.3.4 判断输赢

接着是用一个IsOver()函数判断是否结束,是则结束并重新开始;否则,接着把鼠标变成对方棋子,表示对方下棋。

此函数是利用刚下棋的位置为中心,检查它各个方向上的连续五个棋子是否同色,是则结束并重新开始。

然而,判断一个方向上的五个棋子的是否同色就涉及到声明棋盘数组wzq[SIZE][SIZE],初始情况每一项为0;若黑棋按下,该项值为1;若白棋按下,该项值为-1,这样就可以利用连续五个棋子的值相加,如果它们的值的绝对值等于5,则说明是同色,具体代码如表4.4所示、流程图如图4.4所示。

新游戏下棋N判断输赢Y显示胜方

图4.4判断输赢

20

北方工业大学继续教育学院本科毕业论文(设计)

表4.4判断输赢

BOOL C五子棋Dlg::IsOver(CPoint m_point,int flag) { int temp1,temp2; CPoint temp_point; GetPosition(m_point,temp_point,flag); if(temp_point.x<4) temp1 = 0; else temp1 = temp_point.x-4; if(temp_point.y<4) temp2 = 0; else temp2 = temp_point.y-4; //横向检查 for(int i=temp1;i

AI算法

所谓人机对战就是人和计算机的博弈,计算机如何下棋就需要程序的设计与实现。然而,计算机不能随便在棋盘上面放一颗棋子。计算机要下的那个位置,必定是它认为最好的!当然,这里的最好是程序员给予计算机的,是计算机算法的体现,下面主要介绍一下本文的AI博弈算法。

在上文中声明了wzq棋盘数组,赋值为1和-1,五个连续的棋子的值相加绝对值

21

北方工业大学继续教育学院本科毕业论文(设计)

为5,则判断为胜, 然而,它的功能不止于此,它几乎关系到本程序的全部算法,当绝对值为4时,表示五个棋子中有一个空位置和四个同色的棋子;绝对值为3时,表示五个棋子中有两个空位置和三个同色的棋子,也表示五个棋子中有四个同色棋子和一个异色棋子;绝对值为2时,表示五个棋子中有三个空位置和两个同色棋子,也表示五个棋子中一个空位置和三个同色棋子和一个异色棋子;当绝对值为0或1时,由于出现1和0的机会太少不必多加考虑,具体代码如表4.5所示。

表4.5 AI算法

void C五子棋Dlg::SearchDown4(int i,int j,int n) { //横向 if(n == 0) { if(wzq[i][j]==0) //如果第一个棋子即为空 { //查看其余四个棋子为黑棋或白棋 if(wzq[i+1][j]==-1) //四个白棋 { m_white4.x = i; m_white4.y = j; } else if(wzq[i+1][j]==1) //四个黑棋 { m_black4.x = i; m_black4.y = j; } } else //第一个棋子非空,则寻找为空的棋子 { for(int k=1;k<5;k++) { if(wzq[i+k][j]==0) { break; } else if(wzq[i][j]==1) if(wzq[i][j]==-1) { m_white4.x = i+k; m_white4.y = j; 22

北方工业大学继续教育学院本科毕业论文(设计)

{ } } } } m_black4.x = i+k; m_black4.y = j; break; }

23