日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python五子棋人机对战_Python:游戏:五子棋之人机对战

發布時間:2024/7/5 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python五子棋人机对战_Python:游戏:五子棋之人机对战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題:Python:游戲:五子棋之人機對戰

開端

畫棋盤

首先肯定是要畫出棋盤來,用 pygame 畫出一個 19 × 19 或 15 × 15 的棋盤并不是什么難事,這在之前的文章中已經多次用到,就不贅述了。

畫棋子

需要說一下的是畫棋子,因為沒找到什么合適的棋子圖片,所以只要自己來畫棋子。

我們用 pygame.draw.circle 畫出來的圓形是這樣的:

鋸齒狀十分明顯,pygame.draw 中有畫抗鋸齒直線的函數 aaline,但是并沒有 aacircle 這樣的函數來畫一個抗鋸齒的圓。

這里就需要用到 pygame.gfxdraw 啦。pygame.gfxdraw 目前還僅是實驗版本,這意味著這個 API 可能會在以后的 pygame 版本中發生變化或消失。

要繪制抗鋸齒和填充形狀,請首先使用函數的aa *版本,然后使用填充版本。例如:

我們用這個方法在棋盤上畫一個棋子試試看。

可以看到效果已明顯改善。

落子

落子需要判斷鼠標事件,當鼠標左鍵點擊,獲取鼠標點擊的位置,然后根據棋盤的位置,計算出棋子落在棋盤的位置。

勝利判定

當一子落下,如何判定是否勝利?

可以肯定的是,當某一子落下的時候,如果出現了 5 連,那么落下的這顆子必定在這條 5 連線上。那么這個問題就可以簡化了,我們無需全盤掃描,只需要在落子位置上橫豎撇捺掃描一下,判斷是否出現 5 連即可。

我們定義一個棋盤類,類中實例化一個 19 × 19 的二維數組,初始值皆為 0,表示空,用 1 表示黑子,2 表示白子。這個類對外提供一個落子方法 drop,接收參數落子方和落子坐標,如果落子后勝利,則返回勝利者,否則返回 None。

這里我定義了一個偏移量,我們一共要計算橫豎撇捺 4 條線,任意一條線出現 5 連就算獲勝。計算方法實際上是一樣的,只是方向不同,所以定義一個偏移量數組,不同的偏移量表示不同的方向,這樣就可以利用循環來實現了,節省了很多代碼。

電腦落子

這就是全篇的重頭戲了,要怎么教電腦下五子棋。

首先聲明,我用的是相對傳統的方式,不是深度學習。

五子棋就是要實現 5 連,所以,一開始,我的想法是:將所有連線保存在一個數組中,落子的時候選擇最長的連線落子。但這樣有個問題解決不掉,如何讓電腦識別“三三”呢?

后來網上看到篇文章,使用的方法是:遍歷棋盤上的空位,計算每一個位置其橫豎撇捺 8 個方向上是否有己方的子,有一個就加 10 分,最后選得分最高的位置落子。

這樣不太嚴謹,寫出來的電腦估計水平很菜,但是這個思路卻是對的,落子就是要找到最值得的地方,那么我們干脆對每一個可落子的地方來做一個評估,選出最優解。

這里我們需要了解一下五子棋的幾種基本棋形:連五,活四,沖四,活三,眠三,活二,眠二。

連五

顧名思義,五顆同色棋子連在一起,贏了。

活四

四顆同色棋子連在一起,并且左右兩邊都沒有對方棋子阻擋,有兩個連五點。

沖四

四顆同色棋子連在一起,并且一邊有對方棋子阻擋,或者四顆棋子不是連的,當中有個空擋,這時只有一個連五點。

活三、跳活三

活三:三顆同色棋子連在一起。

跳活三:中間隔了一個空格的活三。

眠三

只能夠形成沖四的三,無外乎兩種情況,一是一邊被擋住了,一是當中有 2 個空格。(其實我在代碼中僅考慮了第一種情況,即便形成沖四,也不是什么危險局面。)

活二和眠二

活二,能夠形成活三的二;眠二,能夠形成眠三的二。這里就不放圖了,參考活三眠三。

打分機制

理解了這些棋形,那么按我們之前的思路,就是如何打分了。

首先,連五肯定是不存在的,出現連五勝負已分,所以只要棋局還在進行中,就不會出現連五。那么,什么優先級最高?自然就是活四了。

其次是對方的“四”,對方活四,你防不防都一樣輸了,對方沖四,你就必須防守。

再次是我方的活三或沖四,活三跟沖四其實是一個級別的,對方必須防守。

再次是對方的活三或沖四。

以此類推下去。我們可以總結一點規律:

相同的棋形,我方優于對方。

沖四跟活三一個級別,眠三跟活二一個級別。

如果中間有空格的話,肯定是要比沒空格的略微低級一點,但不至于降級。

基本邏輯就是這樣,這一塊的代碼我寫得也不好,整個判斷寫了100多行,就不貼代碼了,大家可以直接下源碼看。

五子棋執黑是必贏的,代碼中,玩家就是執黑先手,電腦執白后手,所以,下的好是完全可以贏電腦的,不過一個小小失誤也很可能被電腦翻盤。返回搜狐,查看更多

責任編輯:

總結

以上是生活随笔為你收集整理的python五子棋人机对战_Python:游戏:五子棋之人机对战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91色视频 | 爱情岛论坛永久入口 | 日本在线高清视频 | 国产一区激情 | 亚洲色图综合 | 午夜精品999 | 日韩二区在线观看 | 国产精品无码免费在线观看 | 图片区偷拍区小说区 | 国产亚洲色婷婷久久99精品91 | 欧美一级淫片bbb一84 | 自拍天堂 | 日韩资源| 日韩久久综合 | 免费暧暧视频 | 青青草在线视频免费观看 | 亚洲成色在线 | 欧美在线一区二区三区四区 | 欧美熟妇精品黑人巨大一二三区 | 久久视频一区二区三区 | 亚洲一级Av无码毛片久久精品 | 性生活三级视频 | 少妇又色又紧又黄又刺激免费 | 永久av在线免费观看 | 91一级视频 | 99这里有精品 | 夜夜综合网 | 亚洲九九九| avtt久久| 欧美成人免费在线观看视频 | 色妞综合网 | 亚洲一区二区三区香蕉 | 波多野结衣理论片 | 成人精品视频一区二区三区尤物 | 天天想你在线观看完整版电影免费 | 午夜性福利 | 国产精品网站在线 | 久久精品99久久久久久久久 | 日日摸日日添日日躁av | 超碰av在线免费观看 | 99久久久无码国产精品性色戒 | 少妇性bbb搡bbb爽爽爽欧美 | 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美疯狂做受xxxxx高潮 | 黄色在线视频播放 | 91精品毛片 | 日本免费一区二区三区视频 | 好邻居韩国剧在线观看 | 免费国产羞羞网站视频 | 男人天堂b | 国产av日韩一区二区三区精品 | 欧美色99| 色乱码一区二区三区网站 | 欧美一级生活片 | 拍摄av现场失控高潮数次 | 日韩一区二区三区在线观看 | 欧美老熟妇乱大交xxxxx | japanese国产打屁股网站 | 亚洲一道本 | 性欧美一区二区 | 欧美亚洲精品在线观看 | 奇米影视第四色777 波多野结衣一区二区三区免费视频 | 欧美精品日韩精品 | 麻豆系列在线观看 | 久久精品婷婷 | 日本在线加勒比 | 欧美天天搞| 成人精品综合 | 欧美日韩一区二区精品 | 日本www黄 | 中文字幕2021 | 中日一级片 | 日韩一区二区三区精品视频 | 欧美日韩国产高清 | 国产黄色在线 | 蜜臀久久精品 | 久章草在线观看 | 91在线视频导航 | 黑人玩弄人妻一区二区三区 | 91在线中文字幕 | 最黄一级片 | 好吊妞一区二区三区 | 国产乱大交 | 无码人妻aⅴ一区二区三区有奶水 | 天堂av片| 少妇精品久久久久www | 黄色网页在线播放 | 黄色精品| 国产富婆一级全黄大片 | 男女啪动最猛动态图 | 老司机av网站| 免费在线观看黄色 | 国产无套丰满白嫩对白 | 久久久久亚洲av无码专区桃色 | 亚洲第一色网站 | 欧美激情久久久久久 | 国产麻豆免费视频 | 天天爽夜夜爽人人爽 | 亚洲激情网址 |