導航:首頁 > 編程語言 > python游戲設計模式

python游戲設計模式

發布時間:2023-09-08 05:58:21

python有設計模式么

單例模式:Python 的單例模式最好不要藉助類(在 Java 中藉助類是因為 Java 所有代碼都要寫在類中),而是通過一個模塊來實現。一個模塊的模塊內全局變數、模塊內全局函數,組合起來就是一個單例對象了。
模板方法模衫信式:這個可以像其他語言一樣實現,但是如果要遵循鴨子類型原則的話,應該刪除公有的抽象父類(或介面),從而追求靈活性。
工廠方磨卜法模式、多例模式:這個也不用藉助類,直接寫一個全局函數作為工廠函數即可。因為 Python 中實例化是通過 call 類來完成的,現在改成 call 工廠函數,對客戶摳碼者是透明的。(從這點我表示理解 Python 沒有 new 操作符的好處了,使用通用的 call 定義,正交性極強)
裝飾器模式、代理模式:這個接觸過 Python 就不會不知道了,Python 內置的 decorator 語法如此著名。裝飾器模式和代理模式都可以通過這種方式完成。另外一種是對對象的裝飾或代理,這個也瞎塌穗不需要按照契約編程的風格,讓代理對象實現被代理對象的抽象。一切動態代理,只需要通過重載屬性訪問操作符,神馬都簡單了(和 PHP 通過 __get、__set、__call 來實現動態代理很類似)。
原型模式:這個在 Python 中實現的不是那麼爽快,需要調用 來克隆原型對象。但是其實有另一種實現方式:之所以使用原型模式,是因為對象初始化需要較大開銷。我們只需要保存初始化的結果,並在產生新對象的時候賦予新對象即可。所以,通過元類控制對象被創建的過程,來實現原型模式,也是一種選擇。

⑵ python簡單小游戲代碼 怎麼用Python製作簡單小游戲

1、Python猜拳小游戲代碼:

2、import random #導入隨機模塊

3、

4、num = 1

5、yin_num = 0

6、shu_num = 0

7、while num 2:

12、 print('不能出大於2的值')

13、 else:

14、 data = ['石頭', '剪刀', '布']

15、 com = random.randint(0, 2)

16、 print(您出的是{},電腦出的是{}.format(data[user], data[com]))

17、 if user == com:

18、 print('平局')

19、 continue

20、 elif (user == 0 and com == 1) or (user == 1 and com == 2) or (user == 2 and com == 0):

21、 print('你贏了')

22、 yin_num += 1

23、 else:

24、 print('你輸了')

25、 shu_num += 1

26、 num += 1

27、Python數字炸彈小游戲代碼:

28、import random

29、import time

30、

31、bomb = random.randint(1, 99)

32、print(bomb)

33、start = 0

34、end = 99

35、while 1 == 1:

36、

37、 people = int(input('請輸入{}到{}之間的數:'.format(start, end)))

38、 if people > bomb:

39、 print('大了')

40、 end = people

41、 elif people < bomb:

42、 print('小了')

43、 start = people

44、 else:

45、 print('BOOM!!!')

46、 break

47、 print('等待電腦了輸入{}到{}之間的數:'.format(start, end))

48、 time.sleep(1)

49、 com = random.randint(start + 1, end - 1)

50、 print('電腦輸入:{}'.format(com))

51、 if com > bomb:

52、 print('大了')

53、 end = com

54、 elif com < bomb:

55、 print('小了')

56、 start = com

57、 else:

58、 print('BOOM!!!')

59、 break

⑶ Python有設計模式么

Python設計模式主要分為三大類:創建型模式、結構型模式、行為型模式;三 大類中又被細分為23種設計模式,以下這幾種是最常見的。
單例模式:是一種常用的軟體設計模式,該模式的主要目的是確保某一個類只有一個實例存在。當你希望在整個系統中,某個類只能出現一個是實例時,單例對象就能派上用場。單例對象的要點有三個:一是某個類只能有一個實例;二是它必須自行創建整個實例,三是它必須自行向整個系統提供這個實例。
工廠模式:提供一個創建對象的介面,不像客戶端暴露創建對象的過程,使用一個公共的介面來創建對象,可以分為三種:簡單工廠、工廠方法、抽象工廠。一個類的行為或其演算法可以在運行時更改,這種類型的設計模式屬於行為型模式。
策略模式:是常見的設計模式之一,它是指對一系列的演算法定義,並將每一個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法獨立於使用它的客戶而獨立變化。換句話來講,就是針對一個問題而定義出一個解決的模板,這個模板就是具體的策略,每個策略都是按照這個模板進行的,這種情況下我們有新的策略時就可以直接按照模板來寫,而不會影響之前已經定義好的策略。
門面模式:門面模式也被稱作外觀模式。定義如下:要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。門面模式提供一個高層次的介面,使得子系統更易於使用。門面模式注重統一的對象,也就是提供一個訪問子系統的介面。門面模式與模板模式有相似的地方,都是對一些需要重復方法的封裝。但本質上是不同的,模板模式是對類本身的方法的封裝,其被封裝的方法也可以單獨使用;門面模式,是對子系統的封裝,其被封裝的介面理論上是不會被單獨提出來使用的。

⑷ Python實現消消樂小游戲

pre{overflow-x: auto} 實現 消消樂的構成主要包括三部分:游戲主體、計分器、計時器,下面來看一下具體實現。

先來看一下游戲所需 Python 庫。
import os import sys import time import pygame import random
定義一些常量,比如:窗口寬高、網格行列數等,代碼如下:
WIDTH = 400 HEIGHT = 400 NUMGRID = 8 GRIDSIZE = 36 XMARGIN = (WIDTH - GRIDSIZE * NUMGRID) // 2 YMARGIN = (HEIGHT - GRIDSIZE * NUMGRID) // 2 ROOTDIR = os.getcwd() FPS = 30
接著創建一個主窗口,代碼如下:
pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption('消消樂')
看一下效果:

再接著在窗口中畫一個 8 x 8 的網格,代碼如下:
screen.fill((255, 255, 220)) # 游戲界面的網格繪制 def drawGrids(self): for x in range(NUMGRID): for y in range(NUMGRID): rect = pygame.Rect((XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE, GRIDSIZE, GRIDSIZE)) self.drawBlock(rect, color=(255, 165, 0), size=1 # 畫矩形 block 框 def drawBlock(self, block, color=(255, 0, 0), size=2): pygame.draw.rect(self.screen, color, block, size)
看一下效果:

再接著在網格中隨機放入各種拼圖塊,代碼如下:
while True: self.all_gems = [] self.gems_group = pygame.sprite.Group() for x in range(NUMGRID): self.all_gems.append([]) for y in range(NUMGRID): gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+x*GRIDSIZE, YMARGIN+y*GRIDSIZE-NUMGRID*GRIDSIZE], downlen=NUMGRID*GRIDSIZE) self.all_gems[x].append(gem) self.gems_group.add(gem) if self.isMatch()[0] == 0: break
看一下效果:

再接著加入計分器和計時器,代碼如下:
# 顯示得分 def drawScore(self): score_render = self.font.render('分數:'+str(self.score), 1, (85, 65, 0)) rect = score_render.get_rect() rect.left, rect.top = (55, 15) self.screen.blit(score_render, rect) # 顯示加分 def drawAddScore(self, add_score): score_render = self.font.render('+'+str(add_score), 1, (255, 100, 100)) rect = score_render.get_rect() rect.left, rect.top = (250, 250) self.screen.blit(score_render, rect) # 顯示剩餘時間 def showRemainingTime(self): remaining_time_render = self.font.render('倒計時: %ss' % str(self.remaining_time), 1, (85, 65, 0)) rect = remaining_time_render.get_rect() rect.left, rect.top = (WIDTH-190, 15) self.screen.blit(remaining_time_render, rect)
看一下效果:

當設置的游戲時間用盡時,我們可以生成一些提示信息,代碼如下:
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYUP and event.key == pygame.K_r: flag = True if flag: break screen.fill((255, 255, 220)) text0 = '最終得分: %s' % score text1 = '按 R 鍵重新開始' y = 140 for idx, text in enumerate([text0, text1]): text_render = font.render(text, 1, (85, 65, 0)) rect = text_render.get_rect() if idx == 0: rect.left, rect.top = (100, y) elif idx == 1: rect.left, rect.top = (100, y) y += 60 screen.blit(text_render, rect) pygame.display.update()
看一下效果:

說完了游戲圖形化界面相關的部分,我們再看一下游戲的主要處理邏輯。

我們通過滑鼠來操縱拼圖塊,因此程序需要檢查有無拼圖塊被選中,代碼實現如下:
def checkSelected(self, position): for x in range(NUMGRID): for y in range(NUMGRID): if self.getGemByPos(x, y).rect.collidepoint(*position): return [x, y] return None
我們需要將滑鼠連續選擇的拼圖塊進行位置交換,代碼實現如下:
def swapGem(self, gem1_pos, gem2_pos): margin = gem1_pos[0] - gem2_pos[0] + gem1_pos[1] - gem2_pos[1] if abs(margin) != 1: return False gem1 = self.getGemByPos(*gem1_pos) gem2 = self.getGemByPos(*gem2_pos) if gem1_pos[0] - gem2_pos[0] == 1: gem1.direction = 'left' gem2.direction = 'right' elif gem1_pos[0] - gem2_pos[0] == -1: gem2.direction = 'left' gem1.direction = 'right' elif gem1_pos[1] - gem2_pos[1] == 1: gem1.direction = 'up' gem2.direction = 'down' elif gem1_pos[1] - gem2_pos[1] == -1: gem2.direction = 'up' gem1.direction = 'down' gem1.target_x = gem2.rect.left gem1.target_y = gem2.rect.top gem1.fixed = False gem2.target_x = gem1.rect.left gem2.target_y = gem1.rect.top gem2.fixed = False self.all_gems[gem2_pos[0]][gem2_pos[1]] = gem1 self.all_gems[gem1_pos[0]][gem1_pos[1]] = gem2 return True
每一次交換拼圖塊時,我們需要判斷是否有連續一樣的三個及以上拼圖塊,代碼實現如下:
def isMatch(self): for x in range(NUMGRID): for y in range(NUMGRID): if x + 2  -2: for each in [res_match[1], res_match[1]+1, res_match[1]+2]: gem = self.getGemByPos(*[each, start]) if start == res_match[2]: self.gems_group.remove(gem) self.all_gems[each][start] = None elif start >= 0: gem.target_y += GRIDSIZE gem.fixed = False gem.direction = 'down' self.all_gems[each][start+1] = gem else: gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+each*GRIDSIZE, YMARGIN-GRIDSIZE], downlen=GRIDSIZE) self.gems_group.add(gem) self.all_gems[each][start+1] = gem start -= 1 elif res_match[0] == 2: start = res_match[2] while start > -4: if start == res_match[2]: for each in range(0, 3): gem = self.getGemByPos(*[res_match[1], start+each]) self.gems_group.remove(gem) self.all_gems[res_match[1]][start+each] = None elif start >= 0: gem = self.getGemByPos(*[res_match[1], start]) gem.target_y += GRIDSIZE * 3 gem.fixed = False gem.direction = 'down' self.all_gems[res_match[1]][start+3] = gem else: gem = Puzzle(img_path=random.choice(self.gem_imgs), size=(GRIDSIZE, GRIDSIZE), position=[XMARGIN+res_match[1]*GRIDSIZE, YMARGIN+start*GRIDSIZE], downlen=GRIDSIZE*3) self.gems_group.add(gem) self.all_gems[res_match[1]][start+3] = gem start -= 1
之後反復執行這個過程,直至耗盡游戲時間,游戲結束。

最後,我們動態看一下游戲效果。

總結
本文我們使用 Python 實現了一個簡單的消消樂游戲,有興趣的可以對游戲做進一步擴展,比如增加關卡等。

到此這篇關於Python實現消消樂小游戲的文章就介紹到這了,希望大家以後多多支持!

⑸ python面試一般問什麼常用設計模式

1.設計模式介紹
設計模式(Design Patterns)

——可復用面向對象軟體的基礎

設計模式(Design pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使代碼編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。項目中合理的運用設計模式可以完美的解決很多問題,每種模式在現在中都有相應的原理來與之對應,每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的核心解決方案,這也是它能被廣泛應用的原因。

2. 設計模式分類
經典的《設計模式》一書歸納出23種設計模式,這23種模式又可歸為,創建型、結構型和行為型3大類

2.1.創建型模式
前面講過,社會化的分工越來越細,自然在軟體設計方面也是如此,因此對象的創建和對象的使用分開也就成為了必然趨勢。因為對象的創建會消耗掉系統的很多資源,所以單獨對對象的創建進行研究,從而能夠高效地創建對象就是創建型模式要探討的問題。這里有6個具體的創建型模式可供研究,它們分別是:

簡單工廠模式(Simple Factory);

工廠方法模式(Factory Method);

抽象工廠模式(Abstract Factory);

創建者模式(Builder);

原型模式(Prototype);

單例模式(Singleton)。

說明:嚴格來說,簡單工廠模式不是GoF總結出來的23種設計模式之一。

2.2 結構型模式
在解決了對象的創建問題之後,對象的組成以及對象之間的依賴關系就成了開發人員關注的焦點,因為如何設計對象的結構、繼承和依賴關系會影響到後續程序的維護性、代碼的健壯性、耦合性等。對象結構的設計很容易體現出設計人員水平的高低,這里有7個具體的結構型模式可供研究,它們分別是:

外觀模式(Facade);

適配器模式(Adapter);

代理模式(Proxy);

裝飾模式(Decorator);

橋模式(Bridge);

組合模式(Composite);

享元模式(Flyweight)

2.3 行為型模式
在對象的結構和對象的創建問題都解決了之後,就剩下對象的行為問題了,如果對象的行為設計的好,那麼對象的行為就會更清晰,它們之間的協作效率就會提高,這里有11個具體的行為型模式可供研究,它們分別是:

模板方法模式(Template Method);

觀察者模式(Observer);

狀態模式(State);

策略模式(Strategy);

職責鏈模式(Chain of Responsibility);

命令模式(Command);

訪問者模式(Visitor);

調停者模式(Mediator);

備忘錄模式(Memento);

迭代器模式(Iterator);

解釋器模式(Interpreter)。

3. 設計模式的六大原則
1、開閉原則(Open Close Principle)

開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用介面和抽象類,後面的具體設計中我們會提到這點。

2、里氏代換原則(Liskov Substitution Principle)

里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關系就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規范。—— From Bai 網路

3、依賴倒轉原則(Dependence Inversion Principle)

這個是開閉原則的基礎,具體內容:真對介面編程,依賴於抽象而不依賴於具體。

4、介面隔離原則(Interface Segregation Principle)

這個原則的意思是:使用多個隔離的介面,比使用單個介面要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實設計模式就是一個軟體的設計思想,從大型軟體架構出發,為了升級和維護方便。所以上文中多次出現:降低依賴,降低耦合。

5、迪米特法則(最少知道原則)(Demeter Principle)

為什麼叫最少知道原則,就是說:一個實體應當盡量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

6、合成復用原則(Composite Reuse Principle)

原則是盡量使用合成/聚合的方式,而不是使用繼承。

⑹ python可以開發游戲嗎

使用Python開發游戲可以嗎?用Python開發游戲完全沒有問題,游戲裡面要用到一些全局變數、載入資源、創建開始界面、開始游
戲,舞台層滑鼠點擊事件的監聽器是startGame函數,也就是我們點擊開始界面就開始游戲。
首先打開命令行,使用PyPI下載Pygame包(輸入命令pip install pygame)
使用Python開發游戲步驟:
1、打開python編輯器(vs,IDLE,或其他),再引入包定義一些需要用到的數據
2、先使用pygame包創建一個游戲窗口,然後使用循環將窗口展示出來
3、現在定義一個可操控的小球類Player,draw()方法可以使它展示在屏幕上,update()方法讓小球跟隨滑鼠移動
4、類似的,定義不可操控的小球類Ball,使用random包使它隨機移動
5、再對Player小球進行碰撞檢測,遇到大球就被吃掉,游戲自動退出,遇到小球就吃掉小球,並且增大自己體積,並加入到Player小球
的update()方法中
6、類定義完畢了,再創建對象,將多個Ball類對象加入列表
7、調用各個對象的draw()方法與update()方法
8、最後一步控制幀率,使用pygame.time.Clock().tick(60)將幀率控制在60幀
python開發游戲的庫平台pygame,pygame是python的一個跨平台模塊,專門為設計電子游戲而開發,建立在SDL基礎上,允許開發
者快速的開發出自己的游戲而又不被低級語言束縛,這個庫的安裝和簡單使用,實驗環境win10,python版本為python3.6。
推薦學習《python教程》。

閱讀全文

與python游戲設計模式相關的資料

熱點內容
看電腦配置命令 瀏覽:104
單片機調用db數值偏移量 瀏覽:444
賓士smart車型壓縮機功率 瀏覽:525
伺服器預留地址獲取 瀏覽:1002
雲庫文件夾怎麼設置 瀏覽:293
文件夾目錄製作自動跳轉 瀏覽:452
在哪個音樂app能聽exo的歌 瀏覽:847
pdf超級加密 瀏覽:47
蘋果手機app安裝包怎麼解壓並安裝 瀏覽:905
中原30系統源碼 瀏覽:184
程序員如何遵紀守法 瀏覽:499
java的webxml配置 瀏覽:962
如何封包遠程注入伺服器 瀏覽:864
監測機構資金動向源碼 瀏覽:967
android狀態欄字體50 瀏覽:767
python如何判斷文件後綴 瀏覽:126
龍空app哪裡下 瀏覽:348
阿里雲伺服器搭建網盤 瀏覽:691
京東軟體程序員 瀏覽:806
php游戲伺服器框架 瀏覽:392