程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [C語言]五子棋勝負判定算法及源代碼

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

編輯:關於C語言

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

 

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

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

另外,為解決掃描越界的問題,在聲明棋盤棋子位置時,可聲明一個(4+19+4)×(4+19+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。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved