999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Scratch五子棋游戲

2022-11-11 17:03:24馮地龍
電腦報 2022年42期

馮地龍

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

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

①繪制棋盤

②限制光標移動

③實現落子功能

④判斷棋盤狀態

⑤判斷五子連珠

⑥實現人機對下

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

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

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

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

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

參考代碼如圖2:

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

2.利用邏輯與配合棋盤大小的坐標值把光標控制在棋盤內跟隨鼠標指針移動。

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

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

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

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

參考代碼如圖3:

1.創建角色五子棋,棋的造型為兩個,黑色棋1和白色棋2(對應光標造型的顏色)。

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

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

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

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

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

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

2.創建繪制新的角色“判斷”。鼠標在棋盤內移動,注意行列的變量,你會發現方向變化的規律,總結出往八個方向每走一格數據的變化:

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

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

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

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

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

先判斷落子在棋盤內,在行數與列數是-1到15之間。

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

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

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

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

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

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

主站蜘蛛池模板: 五月天丁香婷婷综合久久| 先锋资源久久| 亚洲bt欧美bt精品| 国产精品一区二区无码免费看片| 国产三级毛片| 亚洲天堂久久新| 国产成人午夜福利免费无码r| 国产超碰在线观看| 国产成人禁片在线观看| 国产精品自在在线午夜| 日韩免费毛片| 制服丝袜在线视频香蕉| 国产视频一二三区| 成人av专区精品无码国产 | 国产精品吹潮在线观看中文| 毛片免费在线视频| 国产视频大全| 亚洲天堂久久久| 日韩精品亚洲人旧成在线| 久久国产黑丝袜视频| 国产一级视频在线观看网站| 国产乱人乱偷精品视频a人人澡| a级毛片免费看| 国产在线观看人成激情视频| 亚洲欧美h| 亚洲精品无码抽插日韩| 色综合日本| 天堂在线www网亚洲| 国产精品免费p区| 欧洲欧美人成免费全部视频| 夜精品a一区二区三区| 97视频免费在线观看| 又爽又大又黄a级毛片在线视频| 成人久久18免费网站| 看你懂的巨臀中文字幕一区二区| 国产激情无码一区二区三区免费| av在线无码浏览| 91九色国产porny| 57pao国产成视频免费播放| 91久久国产热精品免费| 色综合中文| 一级成人欧美一区在线观看| 在线综合亚洲欧美网站| 亚洲av日韩av制服丝袜| 热re99久久精品国99热| 精品91在线| 岛国精品一区免费视频在线观看 | 久久久久久午夜精品| 亚洲中文无码h在线观看| 无码丝袜人妻| 国产h视频在线观看视频| 国产成人h在线观看网站站| 国产精品综合久久久| 日本在线视频免费| 亚洲天堂网在线视频| 国产成人精品第一区二区| 国产亚洲精品无码专| 亚洲高清在线播放| 亚洲第一色网站| 亚洲精品国偷自产在线91正片| 91成人免费观看| www.精品视频| 日本在线免费网站| 在线观看视频一区二区| 欧美精品二区| 中文字幕调教一区二区视频| 亚洲欧美不卡| 国产区免费精品视频| 亚洲av无码久久无遮挡| 午夜在线不卡| 怡春院欧美一区二区三区免费| 99成人在线观看| 中文字幕亚洲精品2页| 青草视频在线观看国产| 爽爽影院十八禁在线观看| 国产天天射| 免费无码在线观看| 欧美成人在线免费| 18黑白丝水手服自慰喷水网站| 国产亚洲视频播放9000| 香蕉视频在线观看www| 久操中文在线|