国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Scratch五子棋游戲

2022-11-11 17:03馮地龍
電腦報 2022年42期
關(guān)鍵詞:連珠行數(shù)五子棋

馮地龍

五子棋大家都玩過,雙方分別使用黑白兩色的棋子,下在棋盤直線與橫線的交叉點上,先形成五子連珠者獲勝。五子棋起源于中國,還是全國智力運動會競技項目之一。由于規(guī)則簡單,老少皆宜,而且趣味橫生,引人入勝(圖1)。

今天跟大家分享怎么用Scratch制作五子棋游戲。想要把五子棋的規(guī)則完全用Scratch編程實現(xiàn)還是不容易的。在編寫程序之前,我們先梳理一下思路,程序需要實現(xiàn)以下目標(biāo):

①繪制棋盤

②限制光標(biāo)移動

③實現(xiàn)落子功能

④判斷棋盤狀態(tài)

⑤判斷五子連珠

⑥實現(xiàn)人機對下

2021年第3期我們曾經(jīng)介紹過用Scratch制作五子棋,當(dāng)時實現(xiàn)了繪制棋盤和黑白交替落子功能,也就是完成了前3項功能,后面幾項沒能實現(xiàn)?,F(xiàn)在我們的編程能力已經(jīng)提高了,本文將能實現(xiàn)前5項功能,完成五子相連的勝負判斷。由于前3項功能已經(jīng)介紹過,本文只提示一下要點,重點還是在于判斷棋盤狀態(tài)和判斷五子連珠。至于實現(xiàn)人機對下涉及算法策略,我們以后再來實現(xiàn)。

1.用一個角色隱藏繪制棋盤。

2.為了方便計算,起點坐標(biāo)值取整數(shù)(XY軸方向分別為-150、150)。重復(fù)繪制16條橫線和豎線,每條長度300。

3.繪制XY方向的間距為20(也就是步長)。

4.用畫筆功能完成繪制15×15的棋盤。

參考代碼如圖2:

1.創(chuàng)建新的角色“光標(biāo)”,用來提示當(dāng)前操作者,含有兩個造型(黑色光標(biāo)造型編碼為1;白色光標(biāo)造型編碼為2),光標(biāo)角色稍大于五子棋(因五子棋在光標(biāo)內(nèi)落子)。

2.利用邏輯與配合棋盤大小的坐標(biāo)值把光標(biāo)控制在棋盤內(nèi)跟隨鼠標(biāo)指針移動。

3.根據(jù)光標(biāo)跟隨鼠標(biāo)的坐標(biāo)值可以計算出在棋盤的行數(shù)和列數(shù),儲存在新建變量的“行數(shù)Y”和變量“列數(shù)X”中?!靶袛?shù)Y”是因為Y值不同則行數(shù)不同,同理兩個棋子的X值不同Y值一樣則兩個棋子在同一行,有相同的“行數(shù)Y”。

4.通過計算,把變量“行數(shù)Y”和“列數(shù)X”計算出來的舞臺坐標(biāo)值分別賦值到鼠標(biāo)XY軸坐標(biāo)上,同時設(shè)為當(dāng)前坐標(biāo),這樣我們就可以把角色固定在棋盤XY兩軸相交點上。

5.棋盤大小是15×15,行數(shù)和列數(shù)相交點也就是225個。

6.通過變量“行數(shù)Y”和變量“列數(shù)X”中的計算得出光標(biāo)在棋盤內(nèi)X、Y(行列相交的點)新的坐標(biāo)值,賦值在新建變量ID上。(ID相當(dāng)于在棋盤行列相交點的每一個坐標(biāo)。每一個相交點都有一個對應(yīng)的ID值。)

參考代碼如圖3:

1.創(chuàng)建角色五子棋,棋的造型為兩個,黑色棋1和白色棋2(對應(yīng)光標(biāo)造型的顏色)。

2.在光標(biāo)角色里通過按下鼠標(biāo)成立與不成立的邏輯,按下就廣播新建消息落子,切換下一個造型,如果沒有按下鼠標(biāo)就一直等待。落子代碼在圖3中。

3.當(dāng)角色五子棋接收到落子的消息,換成光標(biāo)的造型編碼,移動到角色光標(biāo)的位置蓋上圖章(實現(xiàn)落子功能)。如圖4。

1.新建“棋盤狀態(tài)”列表,這是15×15=225項的列表。將0加入狀態(tài)(空狀態(tài))(圖5)。

2.通過在光標(biāo)角色里按下鼠標(biāo)成立與不成立的邏輯,嵌套條件判斷如果列表的ID項等于0(也就是空狀態(tài),沒有棋子),廣播消息落子,并把造型的編號賦值在列表棋盤狀態(tài)的ID項(造型編號兩個,也就賦值1的狀態(tài),1就是黑棋),下一個造型。

3.如果列表的ID項不等于0(狀態(tài)兩種,0是空狀態(tài),1代表黑子和2代表白子),有棋子狀態(tài)的情況不能廣播落子消息,無動作。等待光標(biāo)移動到棋盤是0的ID項才能實現(xiàn)按下鼠標(biāo)條件成立并廣播落子的消息。具體代碼請參考圖3。落子之后列表對應(yīng)效果如圖6。

1.判斷五子連珠首先要知道五子棋的連珠規(guī)則,以最近一個棋子落下為原點,橫豎斜等八個方向有5顆同色棋子連成一條線代表此方勝利。

2.創(chuàng)建繪制新的角色“判斷”。鼠標(biāo)在棋盤內(nèi)移動,注意行列的變量,你會發(fā)現(xiàn)方向變化的規(guī)律,總結(jié)出往八個方向每走一格數(shù)據(jù)的變化:

正方向,向上走X增加0、Y增加1;斜上走X增加1、 Y增加1;右走X增加1、Y增加0;斜下走X增加1、Y減少1(如圖7)。

反方向走的規(guī)律變化類似,只是根據(jù)方向變成負數(shù),變量“列數(shù)X”和“行數(shù)Y”增加負1。

3.新建變量“判斷列數(shù)X”和“判斷行數(shù)Y”,并把變量“列數(shù)X”和“行數(shù)Y”賦值給這兩個變量上,用于判斷五子連珠。

4.自定義函數(shù)積木“判斷連珠XYK”,參數(shù)XY表示縱橫坐標(biāo),K為系數(shù)用作正反方向。

原理:變量“列數(shù)X”和“行數(shù)Y”分別賦值到對應(yīng)“判斷列數(shù)X”和“判斷行數(shù)Y”;然后開始判斷,將“判斷列數(shù)X”和“判斷行數(shù)Y”增加“判斷連珠”函數(shù)里的X和Y的值乘以系數(shù)K(正數(shù)1和負數(shù)1),這樣可以將8個方向都試一遍。

先判斷落子在棋盤內(nèi),在行數(shù)與列數(shù)是-1到15之間。

如果棋盤狀態(tài)的ID項等于當(dāng)前的造型編號(1或2)時,將變量計數(shù)增加1,重復(fù)4次,如果等于棋盤狀態(tài)的1或者2時,表示旁邊有同色的棋子,就按這個方向繼續(xù)去檢測,如果可以重復(fù)4次就表示五子連珠了,否則就停止這個腳本(如圖8)。

5. 在角色光標(biāo)里,按下鼠標(biāo)成立,廣播新建消息判斷方向消息,當(dāng)判斷角色接收到判斷方向消息后把自定義函數(shù)積木判斷連珠方向值傳送一遍。

6. 自定義函數(shù)積木方向,把判斷連珠函數(shù)里面的系數(shù)K正反值輸入進去,將變量檢測設(shè)為1,如果變量計數(shù)的值檢測到大于4,且光標(biāo)的造型編碼等于1,黑棋贏,等于2白棋贏(如圖9)。

到這里,我們的五子棋游戲也就成功了。其實五子棋的難點在于思路,判斷邏輯要明確清楚,涉及的數(shù)學(xué)知識比較廣泛,比如參數(shù)K就是向量知識。根據(jù)鼠標(biāo)的指針坐標(biāo)計算變量行數(shù)Y,變量列數(shù)X以及變量ID。你需要充分理解自定義積木里面參數(shù)之間的關(guān)系,判斷勝負的條件等。

這里我們只用五子連珠來判斷勝負,真實比賽中為了平衡先手的優(yōu)勢還會對黑棋規(guī)定“禁手”。如三三禁手(兩個以上的活三)、四四禁手、長連禁手。黑方禁手形成時,白方應(yīng)立即指出。若白方在之后繼續(xù)落子,則禁手失效。黑方出現(xiàn)禁手,無論是自愿下或被迫下,均判負。黑方五連與禁手同時形成,判黑方勝。

最后給大家留一個問題,在目前的五子棋游戲中是屬于雙人對戰(zhàn),如果把一方改為自動(機器AI)落子實現(xiàn)人機大戰(zhàn)呢?好了,這個問題就交給下一篇文章了。我們一起動腦思考一下吧。

猜你喜歡
連珠行數(shù)五子棋
英語專業(yè)八級統(tǒng)測改錯試題語言特征
Sim Sim
能干的大象
玉米超多穗行數(shù)基因型通15D969 的 單倍體育種效應(yīng)
玉米超多穗行數(shù)DH系15D969的發(fā)現(xiàn)
90后羅運生:五子棋是我生命的一部分
“九星連珠”=世界末日?
財政部長吳波的“五子棋局”
“連珠”文體及其與《韓非子·儲說》的關(guān)系
夏日五子棋