Python小游戲17之五子棋
一、pygame初始化畫布界面
然后呢上面代碼的運行結(jié)果如下:

背景是白色的,當(dāng)然我們常見的棋盤應(yīng)該是棕黃色的,于是我們查找顏色的數(shù)值表。點擊這里RGB顏色表。
于是找到這個顏色和對應(yīng)的RGB:

我覺得這個Tan2的顏色還行,于是選擇這個的RGB值替換[255,255,255]
運行結(jié)果如下:

現(xiàn)在看起來還行了哈,接下來開始畫棋盤。
二、畫棋盤
首先棋盤需要直線,先拋出畫直線的函數(shù)。
參數(shù)解釋為screen表示在當(dāng)前這個窗口上作畫,line_color表示線條顏色,[0,0]表示起始位置,[670,670]表示終止位置,2表示線條粗細,數(shù)值越大線條越粗。
我們五子棋一般棋盤大小為15x15,我們初始化的窗口大小為670x670,因為每個棋子之間要存在一定間隔這樣顯得好看些。
于是我們定義每個棋子的半徑大小為20,然后每顆棋子間隔為2,也就是相鄰的兩條橫線或者豎線之間間隔為22 * 2 = 44。
然后因為670 - 44 * (15-1) = 54
然后54 / 2 = 27。也就是最邊緣的兩條線和棋盤邊緣距離應(yīng)該為27。
所以我們利用循環(huán)開始畫15條棋盤的線,應(yīng)該從27開始,循環(huán)間隔為44
希望方便理解上面的代碼,完整代碼如下:
運行結(jié)果如下

再考慮下細節(jié),我們應(yīng)該在棋盤中心位置打一個標記點,一個黑色實心小圓。
畫實心圓代碼如下:
screen和line_color上面解釋過了,[27+447,27+447]為圓心位置,這里是棋盤正中心,8為圓的半徑大小,0表示實心圓,如果設(shè)置為1輸出空心圓。
加進去后運行結(jié)果如下:

這樣更好看些~
三、獲取鼠標信息下棋子
現(xiàn)在得根據(jù)鼠標信息下棋了,我們點擊鼠標左鍵然后落子,為了讓效果看起來更好,我們應(yīng)該時實獲取鼠標位置信息,然后顯示出當(dāng)前應(yīng)該下棋的位置。
拋出獲取鼠標左鍵的代碼如下:
我們獲取鼠標坐標信息后,我們需要找到這個坐標具體落入哪個位置,所以需要判斷一下:
返回可以落子的位置后,我們需要顯示出來,我們用一個正方形框出來,拋出這個正方形框的代碼如下:
和剛才畫圓畫直線的函數(shù)基本一樣,[0 ,229 ,238 ]是顏色的RGB,我找到是一個熒光綠色類似的顏色,然后[x-22,y-22,44,44]表示從位置(x-22,y-22)開始向右向下分別延長44的長度,得到一個正方形,2表示線條的粗細程度,1表示空心的正方形,和畫圓那里一樣。
運行結(jié)果如下:

這里直接手機拍照了,不太好截屏。。。。。
可以看到鼠標移動到哪兒就會有個對應(yīng)的正方形光圈,表示這個地方可以落子。
現(xiàn)在就是落子了,這里就簡單了,因為我們已經(jīng)得到了具體的位置(x,y),獲取鼠標左鍵信息,如果按下左鍵就落子,然后用畫圓的函數(shù)在這個位置畫圓。
拋出代碼如下:
因為我們落子后這個位置就不能再落子,所以是需要儲存下已經(jīng)落子的位置,定義over_pos表示已經(jīng)落子的位置。
代碼如下:
運行效果如下:

現(xiàn)在就差個判斷函數(shù),判斷五子連心。
上面代碼返回五子連心的坐標。
四、完整代碼

因為沒有添加AI對戰(zhàn),所以只能兩個人輪流對戰(zhàn),后面空閑了會設(shè)計一個AI加入里面。