溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Python面向對象做個小游戲

發(fā)布時間:2021-10-19 13:48:14 來源:億速云 閱讀:131 作者:iii 欄目:編程語言

這篇文章主要講解了“如何使用Python面向對象做個小游戲”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用Python面向對象做個小游戲”吧!

我們今天同樣實現一個小游戲,這個小游戲非常有名,我想大家都應該玩過。它就是tic tac  toe,我們打開chrome搜索一下就可以直接找到游戲了。

如何使用Python面向對象做個小游戲

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

課題

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

這一次,游戲當中會涉及兩方,所以我們需要有判斷游戲勝負手的相關邏輯。除此之外,由于涉及兩個玩家,所以我們需要設計一個AI,讓我們可以和電腦進行游戲。最后實現的效果差不多應該是這樣的:

如何使用Python面向對象做個小游戲

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

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

如何使用Python面向對象做個小游戲

知識點

面向對象

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

我們目前的設計比較簡單,也不需要用到繼承以及抽象類等等高端的用法,就使用最基本的面向對象定義類就可以了。在Python當中定義一個類非常簡單,通過關鍵字class完成。

比如:

class Game:     pass

構造函數

一般來說當我們定義一個類的時候都需要為它設計構造函數,構造函數就是當我們創(chuàng)建這個類的實例的時候調用的方法。它會替我們完成一些初始化的工作。Python當中類的構造函數是__init__,我們直接在類當中實現它即可。

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

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

類方法

既然是類,自然會有屬于類的類方法。類方法的定義和普通函數的定義是一樣的,唯一不同的是它寫在類的內部,并且第一個參數默認是self。self這個關鍵字相當于Java當中的this,指代的就是運行的時候調用方法的實例。

比如我們給Game這個類實現一個添加玩家的方法:

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這個方法內部的邏輯,我們在這個方法當中通過self關鍵字調用了類實例當中的變量。這就是為什么我們需要設定一個self參數的原因,當我們調用的時候,并不需要理會self這個參數,它是Python自動為我們填充的。

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

比如:

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

在Test這個類當中我們實現了一個沒有self關鍵字的say方法,如果我們通過Test的實例去調用它一定會出錯。因為我們在通過實例調用方法的時候,Python會自動為我們把實例作為第一個參數傳入。這樣就導致了接受和傳輸的參數對應不上,于是引發(fā)報錯,如果我們想要調用這個say方法,應該這樣:

Test.say()

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

方法的方法

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

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

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

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

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

比如:

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

通過在方法內實現方法,可以進一步簡化函數內部代碼的邏輯,把一些很復雜的函數功能進行進一步的拆分和簡化。了解這個用法,也是后面學習閉包、函數式編程等進階內容的基礎。

感謝各位的閱讀,以上就是“如何使用Python面向對象做個小游戲”的內容了,經過本文的學習后,相信大家對如何使用Python面向對象做個小游戲這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI