最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python游戲開發(fā)實(shí)例之graphics實(shí)現(xiàn)AI五子棋

 更新時間:2021年11月01日 11:40:36   作者:小雁子學(xué)Python  
五子棋是經(jīng)典的棋牌類游戲,很多人都玩過,那么如何用Python實(shí)現(xiàn)五子棋呢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

前言

利用Python+graphics模塊實(shí)現(xiàn)AI五子棋。
讓我們愉快地開始吧~~~

效果展示

在這里插入圖片描述

源碼

import sys
import cfg

from modules.misc.Buttons import *
from modules.ai.playWithAI import *
from modules.online.playOnline import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

'''游戲開始界面'''
class gameStartUI(QWidget):
	def __init__(self, parent=None, **kwargs):
		super(gameStartUI, self).__init__(parent)
		self.setFixedSize(760, 650)
		self.setWindowTitle('五子棋-微信號: ilove-python')
		self.setWindowIcon(QIcon(cfg.ICON_FILEPATH))
		# 背景圖片
		palette = QPalette()
		palette.setBrush(self.backgroundRole(), QBrush(QPixmap(cfg.BACKGROUND_IMAGEPATHS.get('bg_start'))))
		self.setPalette(palette)
		# 按鈕
		# --人機(jī)對戰(zhàn)
		self.ai_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('ai'), self)
		self.ai_button.move(250, 200)
		self.ai_button.show()
		self.ai_button.click_signal.connect(self.playWithAI)
		# --聯(lián)機(jī)對戰(zhàn)
		self.online_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('online'), self)
		self.online_button.move(250, 350)
		self.online_button.show()
		self.online_button.click_signal.connect(self.playOnline)
	'''人機(jī)對戰(zhàn)'''
	def playWithAI(self):
		self.close()
		self.gaming_ui = playWithAIUI(cfg)
		self.gaming_ui.exit_signal.connect(lambda: sys.exit())
		self.gaming_ui.back_signal.connect(self.show)
		self.gaming_ui.show()
	'''聯(lián)機(jī)對戰(zhàn)'''
	def playOnline(self):
		self.close()
		self.gaming_ui = playOnlineUI(cfg, self)
		self.gaming_ui.show()


'''run'''
if __name__ == '__main__':
	app = QApplication(sys.argv)
	handle = gameStartUI()
	font = QFont()
	font.setPointSize(12)
	handle.setFont(font)
	handle.show()
	sys.exit(app.exec_())

開發(fā)工具

Python版本: 3.6.4

相關(guān)模塊:

graphics模塊。

環(huán)境搭建

安裝Python并添加到環(huán)境變量即可。

注:
graphics模塊在相關(guān)文件中已經(jīng)提供,就是一個py文件,直接放在當(dāng)前路徑或者放到python安裝文件夾下的site-packages文件夾內(nèi)均可。

原理簡介

對于五子棋這樣的博弈類AI,很自然的想法就是讓計(jì)算機(jī)把當(dāng)前所有可能的情況都嘗試一遍,找到最優(yōu)的落子點(diǎn)。這里有兩個問題:

(1)如何把所有可能的情況都嘗試一遍;

(2)如何定量判斷某落子點(diǎn)的優(yōu)劣。

對于第一個問題,其實(shí)就是所謂的博弈樹搜索,對于第二個問題,其實(shí)就是所謂的選擇評估函數(shù)。評估函數(shù)的選取直接決定了AI算法的優(yōu)劣,其形式也千變?nèi)f化??梢哉f,每個評估函數(shù)就是一個選手,對不同的棋型每個選手自然有不同的看法和應(yīng)對措施,當(dāng)然他們的棋力也就因此各不相同了。

但博弈樹搜索就比較固定了,其核心思想無非是讓計(jì)算機(jī)考慮當(dāng)前局勢下之后N步所有可能的情況,其中奇數(shù)步(因?yàn)楝F(xiàn)在輪到AI下)要讓AI方的得分最大,偶數(shù)步要讓AI方的得分最?。ㄒ?yàn)閷κ忠簿褪侨祟?,也可以選擇最優(yōu)策略)。

當(dāng)然這樣的搜索其計(jì)算量是極大的,這時候就需要剪枝來減少計(jì)算量。例如下圖:

圖片

其中A代表AI方,P代表人類方。AI方搜索最大值,人類方搜索最小值。因此Layer3的A1向下搜索的最終結(jié)果為4,Layer3的A2向下搜索,先搜索Layer4的P3,獲得的分值為6,考慮到Layer2的P1向下搜索時取Layer3的A1和A2中的較小值,而Layer3的A2搜索完Layer4的P3時,其值就已經(jīng)必大于Layer3的A1了,就沒有搜索下去的必要了,因此Layer3到Layer4的路徑3就可以剪掉了。

上述搜索策略其實(shí)質(zhì)就是:

minimax算法+alpha-beta剪枝算法。

了解了上述原理之后,就可以自己寫代碼實(shí)現(xiàn)了。當(dāng)然實(shí)際實(shí)現(xiàn)過程中,我做了一些簡化,但萬變不離其宗,其核心思想都是一樣的。

在這里插入圖片描述

到此這篇關(guān)于Python游戲開發(fā)實(shí)例之graphics實(shí)現(xiàn)AI五子棋的文章就介紹到這了,更多相關(guān)Python AI五子棋內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于python監(jiān)控程序是否關(guān)閉

    基于python監(jiān)控程序是否關(guān)閉

    這篇文章主要介紹了基于python監(jiān)控程序是否關(guān)閉,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Pyside2中嵌入Matplotlib的繪圖的實(shí)現(xiàn)

    Pyside2中嵌入Matplotlib的繪圖的實(shí)現(xiàn)

    這篇文章主要介紹了Pyside2中嵌入Matplotlib的繪圖的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python數(shù)據(jù)分析庫pandas基本操作方法

    Python數(shù)據(jù)分析庫pandas基本操作方法

    下面小編就為大家分享一篇Python數(shù)據(jù)分析庫pandas基本操作方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 對python pandas中 inplace 參數(shù)的理解

    對python pandas中 inplace 參數(shù)的理解

    這篇文章主要介紹了對python pandas中 inplace 參數(shù)的理解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python開發(fā)必備知識內(nèi)存管理與垃圾回收

    Python開發(fā)必備知識內(nèi)存管理與垃圾回收

    Python是一種高級編程語言,因其簡潔而強(qiáng)大而備受歡迎,然而如其他編程語言一樣,Python也面臨著內(nèi)存管理的挑戰(zhàn),在Python中,垃圾回收是一項(xiàng)關(guān)鍵任務(wù),用于自動釋放不再使用的內(nèi)存,以避免內(nèi)存泄漏,本文將介紹Python中的垃圾回收機(jī)制,以及如何通過優(yōu)化代碼來提高性能
    2023-11-11
  • python多進(jìn)程日志以及分布式日志的實(shí)現(xiàn)方式

    python多進(jìn)程日志以及分布式日志的實(shí)現(xiàn)方式

    這篇文章主要介紹了python多進(jìn)程日志以及分布式日志的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python基于百度AI實(shí)現(xiàn)抓取表情包

    Python基于百度AI實(shí)現(xiàn)抓取表情包

    本文先抓取網(wǎng)絡(luò)上的表情圖像,然后利用百度 AI 識別表情包上的說明文字,并利用表情文字重命名文件,感興趣的小伙伴們可以參考一下
    2021-06-06
  • python 錯誤處理 assert詳解

    python 錯誤處理 assert詳解

    這篇文章主要介紹了python 錯誤處理 assert詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python?itertools中accumulate函數(shù)用法及使用運(yùn)用詳細(xì)講解

    Python?itertools中accumulate函數(shù)用法及使用運(yùn)用詳細(xì)講解

    這篇文章主要介紹了Python的itertools庫中的accumulate函數(shù),該函數(shù)可以計(jì)算累積和或通過指定函數(shù)進(jìn)行累積運(yùn)算,文中通過代碼將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • 解決python存數(shù)據(jù)庫速度太慢的問題

    解決python存數(shù)據(jù)庫速度太慢的問題

    這篇文章主要介紹了解決python存數(shù)據(jù)庫速度太慢的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

尼玛县| 涿州市| 松滋市| 兴隆县| 克什克腾旗| 泾川县| 城市| 崇文区| 延吉市| 南平市| 云霄县| 凌源市| 育儿| 错那县| 谷城县| 商都县| 那曲县| 广饶县| 和平区| 封开县| 长岭县| 松潘县| 定远县| 新竹县| 虞城县| 孟村| 沂南县| 长岭县| 新野县| 花莲市| 宁海县| 六枝特区| 宣恩县| 陈巴尔虎旗| 雷波县| 酉阳| 麻栗坡县| 长海县| 普宁市| 肇州县| 兖州市|