溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

發(fā)布時(shí)間:2021-07-29 13:42:13 來(lái)源:億速云 閱讀:153 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要介紹“怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲”,在日常操作中,相信很多人在怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

規(guī)則

在一個(gè)1616的棋盤上,黑白雙方交替落子,每次落下子后如果棋盤上出現(xiàn)了五個(gè)同色棋子橫向/豎向/斜向連接,則該方勝利。如果在棋盤下滿后(即下了1616個(gè)子后)仍未分出勝負(fù),則為平局。

邏輯

初始化棋盤,是一個(gè)16*16的二維數(shù)組(定義宏 N=16),一開始每一格都初始化為0。用一個(gè)不斷++的落子數(shù)變量%2來(lái)判斷本回合是黑方下還是白方下,;每次玩家輸入橫縱坐標(biāo),該處的變量值改變(黑子為1,白子為2)。每次落子判斷全盤是否有五子連珠,如果有則結(jié)束游戲,如果沒(méi)有則繼續(xù)下。當(dāng)落子數(shù)達(dá)到N*N即棋盤下滿,還沒(méi)有出現(xiàn)五子連珠時(shí),則判斷為平局,結(jié)束游戲。

五子棋勝負(fù)條件判斷

判斷原理:

勝負(fù)的判斷是在每顆棋子落下之后進(jìn)行,所以用這一子的坐標(biāo)為基準(zhǔn)前后左右斜各個(gè)方向來(lái)看是否取勝。

具體思想:

按照五子棋規(guī)則,當(dāng)一方的棋子,在橫向,縱向或斜向連續(xù)五個(gè)均為同一用戶的棋子時(shí),代表勝利。
另外,勝利判斷只需要在一個(gè)新子落子時(shí)判斷,且僅需要判斷新子所在的四條線上(縱橫加兩個(gè)斜線)是否滿足條件即可。
所以,可以以新子坐標(biāo)為基準(zhǔn)點(diǎn),判斷四次。
比如橫向的,需要判斷左側(cè)和右側(cè)連續(xù)的同類棋子個(gè)數(shù),如果左側(cè)+右側(cè)+1(自身)總數(shù)>=5,則為勝利。
在判斷勝利的時(shí)候,首先我們要排除空子的情況,然后當(dāng)兩個(gè)斜線的時(shí)候, 無(wú)勝情況下,判斷直線,當(dāng)為兩斜線及直線無(wú)勝情況下,判斷橫線。

參考代碼如下:

int win()
{
 extern int arr[100][100];
 int k = 0,l = 0;
 int flag = 0; 
 for(k=2;k<N-2;k++) 
  for(l=2;l<N-2;l++)
  {
   if(arr[k][l]!=0&&arr[k-2][l-2]==arr[k][l]&&arr[k-1][l-1]==arr[k][l]&&arr[k+1][l+1]==arr[k][l]&&arr[k+2][l+2]==arr[k][l])
   {
    flag=1;
    break;
   }
   if(arr[k][l]!=0&&arr[k+2][l-2]==arr[k][l]&&arr[k+1][l-1]==arr[k][l]&&arr[k-1][l+1]==arr[k][l]&&arr[k-2][l+2]==arr[k][l])
   {
    flag=1;
    break;
   }
  }
 if(flag==0) 
  for(k=0;k<N;k++)
   for(l=2;l<N-2;l++)
   {
    if(arr[k][l]!=0&&arr[k][l-2]==arr[k][l]&&arr[k][l-1]==arr[k][l]&&arr[k][l+1]==arr[k][l]&&arr[k][l+2]==arr[k][l])
    {
     flag=1;
     break;
    }
   }
 if(flag==0) 
  for(k=2;k<N-2;k++)
   for(l=0;l<N;l++)
   {
    if(arr[k][l]!=0&&arr[k+2][l]==arr[k][l]&&arr[k+1][l]==arr[k][l]&&arr[k-1][l]==arr[k][l]&&arr[k-2][l]==arr[k][l])
    {
     flag=1;
     break;
    }
   }
 return flag; 
}

注:

1.中的arr[k][l]!=0是排除空子的情況。
2.最后返回判斷結(jié)果時(shí), 有勝為1,無(wú)為0,誰(shuí)勝無(wú)必要判斷,因?yàn)?,誰(shuí)尾手了的一定是勝的。

演示

開始

怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

輸入坐標(biāo)

怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

第二回合

怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

游戲結(jié)束

怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲

到此,關(guān)于“怎么用C語(yǔ)言實(shí)現(xiàn)五子棋游戲”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI