真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何使用Python面向?qū)ο笞鰝€(gè)小游戲

這篇文章主要講解了“如何使用Python面向?qū)ο笞鰝€(gè)小游戲”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“如何使用Python面向?qū)ο笞鰝€(gè)小游戲”吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、榆林網(wǎng)站維護(hù)、網(wǎng)站推廣。

我們今天同樣實(shí)現(xiàn)一個(gè)小游戲,這個(gè)小游戲非常有名,我想大家都應(yīng)該玩過。它就是tic tac  toe,我們打開chrome搜索一下就可以直接找到游戲了。

如何使用Python面向?qū)ο笞鰝€(gè)小游戲

由于我們使用Python來實(shí)現(xiàn),并且不會(huì)制作UI界面,所以不會(huì)這么好看。雖然不夠好看,但是邏輯卻是一樣的。并且和之前我們做的那些小游戲相比,今天做的這個(gè)游戲有一個(gè)非常大的特點(diǎn)就是非常適合設(shè)計(jì)AI。我們只需要用很簡單的算法就可以做出一個(gè)還不錯(cuò)的ai來。當(dāng)然我們循序漸進(jìn),先從最簡單的游戲功能本身開始。

課題

今天的課題就是使用Python編寫一個(gè)不帶UI界面的tic tac toe的小游戲。

這一次,游戲當(dāng)中會(huì)涉及兩方,所以我們需要有判斷游戲勝負(fù)手的相關(guān)邏輯。除此之外,由于涉及兩個(gè)玩家,所以我們需要設(shè)計(jì)一個(gè)AI,讓我們可以和電腦進(jìn)行游戲。最后實(shí)現(xiàn)的效果差不多應(yīng)該是這樣的:

如何使用Python面向?qū)ο笞鰝€(gè)小游戲

也就是在游戲一開始的時(shí)候,支持玩家選擇參與游戲的兩方。這里我們先把AI算法的設(shè)計(jì)放一放,可以先做出隨機(jī)選擇的弱智AI。

游戲開始之后,雙方交替行動(dòng),每次執(zhí)行都會(huì)在屏幕上輸出相應(yīng)的具體信息,以及棋盤當(dāng)前的情況。

如何使用Python面向?qū)ο笞鰝€(gè)小游戲

知識(shí)點(diǎn)

面向?qū)ο?/strong>

tic  tac的游戲雖然簡單,但是它涉及的內(nèi)容還是挺多的。需要棋盤,還需要玩家,還需要添加玩家以及執(zhí)行步驟等等操作。這些邏輯如果不加以封裝,全部都寫成面向過程的話,會(huì)使得代碼非常的混亂。很明顯的,我們需要使用面向?qū)ο?,?duì)這些邏輯進(jìn)行抽象和封裝,來達(dá)到簡化編碼以及思考的目的。

我們目前的設(shè)計(jì)比較簡單,也不需要用到繼承以及抽象類等等高端的用法,就使用最基本的面向?qū)ο蠖x類就可以了。在Python當(dāng)中定義一個(gè)類非常簡單,通過關(guān)鍵字class完成。

比如:

class Game:     pass

構(gòu)造函數(shù)

一般來說當(dāng)我們定義一個(gè)類的時(shí)候都需要為它設(shè)計(jì)構(gòu)造函數(shù),構(gòu)造函數(shù)就是當(dāng)我們創(chuàng)建這個(gè)類的實(shí)例的時(shí)候調(diào)用的方法。它會(huì)替我們完成一些初始化的工作。Python當(dāng)中類的構(gòu)造函數(shù)是__init__,我們直接在類當(dāng)中實(shí)現(xiàn)它即可。

class Game:     def __init__(self):         self.board = Board()         self.players = []         self.markers = ['O', 'X']         self.numbers = [1, -1]

比如在上面這個(gè)例子當(dāng)中,我們就為Game這個(gè)類做了一些初始化的設(shè)定。比如給它賦予一個(gè)board以及players等等變量。

類方法

既然是類,自然會(huì)有屬于類的類方法。類方法的定義和普通函數(shù)的定義是一樣的,唯一不同的是它寫在類的內(nèi)部,并且第一個(gè)參數(shù)默認(rèn)是self。self這個(gè)關(guān)鍵字相當(dāng)于Java當(dāng)中的this,指代的就是運(yùn)行的時(shí)候調(diào)用方法的實(shí)例。

比如我們給Game這個(gè)類實(shí)現(xiàn)一個(gè)添加玩家的方法:

class Game:     def __init__(self):         self.board = Board()         self.players = []         self.markers = ['O', 'X']         self.numbers = [1, -1]       def add_player(self, player):         if player == 'h' or player == 'human':             self.players.append(HumanPlayer())         elif player == 'r' or player == 'random':             self.players.append(RandomPlayer())

我們看下add_player這個(gè)方法內(nèi)部的邏輯,我們?cè)谶@個(gè)方法當(dāng)中通過self關(guān)鍵字調(diào)用了類實(shí)例當(dāng)中的變量。這就是為什么我們需要設(shè)定一個(gè)self參數(shù)的原因,當(dāng)我們調(diào)用的時(shí)候,并不需要理會(huì)self這個(gè)參數(shù),它是Python自動(dòng)為我們填充的。

當(dāng)然我們定義類方法的時(shí)候也可以定義沒有self參數(shù)的方法,只不過這樣的方法不再屬于類的實(shí)例,而屬于類本身。我們想要調(diào)用的話,只能通過類名來訪問。

比如:

class Test:     def say():         print("hello world")

在Test這個(gè)類當(dāng)中我們實(shí)現(xiàn)了一個(gè)沒有self關(guān)鍵字的say方法,如果我們通過Test的實(shí)例去調(diào)用它一定會(huì)出錯(cuò)。因?yàn)槲覀冊(cè)谕ㄟ^實(shí)例調(diào)用方法的時(shí)候,Python會(huì)自動(dòng)為我們把實(shí)例作為第一個(gè)參數(shù)傳入。這樣就導(dǎo)致了接受和傳輸?shù)膮?shù)對(duì)應(yīng)不上,于是引發(fā)報(bào)錯(cuò),如果我們想要調(diào)用這個(gè)say方法,應(yīng)該這樣:

Test.say()

也就是說這個(gè)方法不再屬于類創(chuàng)建的實(shí)例,而屬于類本身。可以理解成Java類當(dāng)中的static關(guān)鍵字修飾的方法。

方法的方法

Python當(dāng)中對(duì)于方法的定義是比較靈活的,我們可以給一個(gè)類創(chuàng)建方法,同樣也可以在一個(gè)方法的內(nèi)部創(chuàng)建另外一個(gè)方法。比如下面這個(gè)例子:

def outer(arg1, arg2):          def inner(arg1, arg2):         return arg1 + arg2          return inner(arg1, arg2)

由于Python支持函數(shù)式編程,所以方法內(nèi)部的方法還可以實(shí)現(xiàn)像是閉包、  裝飾器等等功能。不過這里我們用不到那么高端的用法,只需要會(huì)最基本的就可以了。最基本的也就是在函數(shù)內(nèi)部定義一個(gè)函數(shù),主要在這個(gè)inner函數(shù)當(dāng)中是可以使用outer當(dāng)中的定義的變量的。比如:

def outer(arg1):          arg2 = 10     def inner(arg1):         return arg1 + arg2          return inner(arg1)

上述的代碼沒有問題,不過還有一點(diǎn)需要注意。在inner當(dāng)中雖然可以訪問到outer中定義的參數(shù)和變量,但是它是不可以修改的。如果想要修改,需要使用nonlocal關(guān)鍵字聲明這是一個(gè)外層變量。

比如:

def outer(arg1):          arg2 = 10     def inner(arg1):         nonlocal arg2         arg2 += 1         return arg1 + arg2          return inner(arg1)

通過在方法內(nèi)實(shí)現(xiàn)方法,可以進(jìn)一步簡化函數(shù)內(nèi)部代碼的邏輯,把一些很復(fù)雜的函數(shù)功能進(jìn)行進(jìn)一步的拆分和簡化。了解這個(gè)用法,也是后面學(xué)習(xí)閉包、函數(shù)式編程等進(jìn)階內(nèi)容的基礎(chǔ)。

感謝各位的閱讀,以上就是“如何使用Python面向?qū)ο笞鰝€(gè)小游戲”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)如何使用Python面向?qū)ο笞鰝€(gè)小游戲這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


當(dāng)前文章:如何使用Python面向?qū)ο笞鰝€(gè)小游戲
網(wǎng)站網(wǎng)址:http://weahome.cn/article/psdoeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部