【C語言】五子棋勝負判定算法及源代碼

五子棋勝負的判定,一般有一下兩種算法:


1.掃描整個棋盤,分別掃描四個方向是否有5個連子。網上找了很多五子棋源碼都是用此算法,這意味着每下一個棋子都要掃描一遍15×15的棋盤,複雜而且低效,代碼略。

2.每下一字,從該子開始掃描其四個方向(例如:從該子的(x-4,y)座標開始掃描橫向)是否存在5個連子。此算法較爲常用,而且不涉及更爲複雜的數據結構。

另外,爲解決掃描越界的問題,在聲明棋盤棋子位置時,可聲明一個(4+15+4)×(4+15+4)的棋盤,而讓棋子偏移(4,4)個座標。


算法2源代碼如下:

static void IfWin(int x,int y,int color)
{
	TCHAR win[20];
	int a,b;
	if(stone[x][y]==1)
		wcscpy_s(win,_T("黑棋勝利!"));
	else
		wcscpy_s(win,_T("白棋勝利!"));
	for(a=x-4;a<=x+4;a++)//判斷橫
		if(stone[a][y]==color&&stone[a+1][y]==color&&stone[a+2][y]==color&&stone[a+3][y]==color&&stone[a+4][y]==color)
			{MessageBoxW(Xqwl.hWnd,win,TEXT(""),MB_OK);return;}
	for(b=y-4;b<=y+4;b++)//判斷豎
		if(stone[x][b]==color&&stone[x][b+1]==color&&stone[x][b+2]==color&&stone[x][b+3]==color&&stone[x][b+4]==color)
			{MessageBoxW(Xqwl.hWnd,win,TEXT(""),MB_OK);return;}
	for(a=x-4,b=y-4;a<=x+4;a++,b++)//判斷右斜
		if(stone[a][b]==color&&stone[a+1][b+1]==color&&stone[a+2][b+2]==color&&stone[a+3][b+3]==color&&stone[a+4][b+4]==color)
			{MessageBoxW(Xqwl.hWnd,win,TEXT(""),MB_OK);return;}
	for(a=x-4,b=y+4;a<=x+4;a++,b--)//判斷左斜
		if(stone[a][b]==color&&stone[a+1][b-1]==color&&stone[a+2][b-2]==color&&stone[a+3][b-3]==color&&stone[a+4][b-4]==color)
			{MessageBoxW(Xqwl.hWnd,win,TEXT(""),MB_OK);return;}
}

以上源碼編譯器爲VS2010。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章