歡迎您光臨本站 註冊首頁

python能開發遊戲嗎

←手機掃碼閱讀     f2h0b53ohn @ 2020-06-12 , reply:0

python可以寫遊戲,但不適合。下面我們來分析一下具體原因。

用錘子能造汽車嗎? 誰也沒法說不能吧?歷史上也確實曾經有些汽車,是用錘子造出來的。但一般來說,還是用工業機器人更合適對嗎?

比較大型的,使用Python的遊戲有兩個,一個是《EVE》,還有一個是《文明》。但這僅僅是個例,沒有廣泛意義。
 一般來說,用來做遊戲的語言,有兩種。一是C++。。一是C#。。

Python理論上,不僅不適合做遊戲,而是隻要大型的程序,都不適合。只適合寫比較小型的東西,比如一個計算器,一個爬蟲等。

主要有2個方面,一是速度慢,二是語法缺陷。

也許你一定覺得,Python的語法又幹淨,又優雅,怎麼還有缺陷?但仔細想想,為什麼別的語言沒有這麼幹淨?沒有這麼優雅?明明可以直接a=123 幹嘛非要寫成 int a=123;呢?難道是其他語言的設計者,都有強迫症嗎?道理很簡單,有得必有失。
 如果數據類型,只有字符串和數字,省略掉聲明變量的過程,當然不是問題。但只要邏輯一複雜,情況就完全不同了。。。遊戲中,你用C#或C++寫起來,大概會是這樣。

  技能 a=xxxx;  武器 b=xxxx;  角色 c=xxxx;  藥水 d=xxxx;  音樂 e=xxxx;

 

而Python呢?大概是這個樣子

  a=xxxx  b=xxxx  c=xxxx  d=xxxx

 

如果你的代碼很少,顯然是Python比較方便。但如果你創建幾百個對象,代碼超過1萬行。。。寫到幾千行的時候,遇到一個叫x的對象,你還知道它到底是個啥嗎?是一把武器?還是一瓶藥水?還是一張圖片?一段音頻?一盞燈光?一座房子?
 不要以為1萬行代碼很多。。。。1萬行連個《鬥地主》都寫不完。。

用Python寫大程序的感覺就是,當你第一天,只寫了50行代碼,創建了3個類,5個對象。你會覺得太爽了,這絕對是世界上最好的語言。。。第二天,你又創建了2個類,5個對象的時候,就覺得有點暈暈的了。第三天,又創建了2個類之後,你會發現自己必須非常仔細的看一遍註釋,否則就不會寫了。第四天,你一整天都在看註釋。。。。

這就是動態語言的劣根性。一開始代碼量少,看不出任何缺點,各種省事,各種爽。代碼量越多,腦子越亂。一般500行以上,效率就會被JAVA,C#之類的語言反超。。1000行,就必須要各種加註釋才能看懂了。。2000行,註釋就比代碼多了。。5000行,註釋已經完全不管用了,自己根本看不懂自己的代碼,需要準備棄坑了。

總結一下,python不是不能開發遊戲,只是並不合適。每種語言都有各自的優缺點,開發遊戲這一塊或許就是python的缺點吧。

python遊戲實例補充:

發牌遊戲

1. 遊戲介紹

四名牌手打牌,電腦隨機��52張牌(不合大、小王)發給四名牌手,並在屏幕上顯示每位牌手的牌。

2. 面向對象程序設計

3. 程序設計步驟

設計類,發牌程序設計出三個類: Card類、Hand類和Poke類。

Card類:Card類代表一張牌,其中,FaceNum字段指的是牌面數字1~13,Suit字段指的是花色,”梅”為梅花,”方”為方塊,”紅”為紅桃,”黑”為黑桃。

Hand類:Hand類代表手牌(一個玩家手裡拿的牌),可以認為是一位牌手手裡的牌,其中,cards列表變量存儲牌手手中的牌。可以增加牌、清空手裡的牌、把一張牌給別的牌手等操作。

Poke類:Poke類代表一副牌,我們可以將一副牌看作是有52張牌的牌手,所以繼承Hand類。由於其中cards列表變量要存儲52張牌,而且要進行發牌、洗牌操作,所以增加如下的方法。

主程序:主程序比較簡單,因為有四個牌手,所以生成players列表存儲初始化的四位牌手。生成一副牌的對象實例poke1,調用populate()方法生成有52張牌的一副牌,調用huffle()方法洗牌打亂順序,調用deal(players,13)方法分別給每位玩家發13張牌,最後示四位牌手所有的牌。

  class Card():   """ A playing card. """   RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"] #牌面數字1-13   SUITS=["梅","方","紅","黑"]  #梅為梅花,方為方鑽,紅為紅心,黑為黑桃     def __init__(self,rank,suit,face_up=True):    self.rank=rank    #指的是牌面數字1-13    self.suit=suit    #suit指的是花色    self.is_face_up=face_up #是否顯示牌正面,True為正面,False為牌背面     def __str__(self): #print()    if self.is_face_up:     rep=self.suit+self.rank #+" "+str(self.pic_order())    else:     rep="XX"    return rep     def flip(self):    #翻牌方法    self.is_face_up=not self.is_face_up     def pic_order(self):   #牌的順序號    if self.rank=="A":     FaceNum=1    elif self.rank=="J":     FaceNum=11    elif self.rank=="Q":     FaceNum=12    elif self.rank=="K":     FaceNum=13    else:     FaceNum=int(self.rank)    if self.suit=="梅":     Suit=1    elif self.suit=="方":     Suit=2    elif self.suit=="紅":     Suit=3    else:     Suit=4    return (Suit-1)*13+FaceNum  class Hand( ):   """ A hand of playing cards. """   def __init__(self):    self.cards=[]   def __str__(self):    if self.cards:     rep=""     for card in self.cards:      rep+=str(card)+"	"    else:     rep="無牌"    return rep   def clear(self):    self.cards=[]   def add(self,card):    self.cards.append(card)   def give(self,card,other_hand):    self.cards.remove(card)    other_hand.add(card)  class Poke(Hand):   """ A deck of playing cards. """   def populate(self):   #生成一副牌    for suit in Card.SUITS:     for rank in Card.RANKS:      self.add(Card(rank,suit))   def shuffle(self):   #洗牌    import random    random.shuffle(self.cards) #打亂牌的順序   def deal(self,hands,per_hand=13):    for rounds in range(per_hand):     for hand in hands:        top_card=self.cards[0]      self.cards.remove(top_card)      hand.add(top_card)  if __name__=="__main__":   print("This is a module with classed for playing cards.")   #四個玩家   players=[Hand(),Hand(),Hand(),Hand()]   poke1=Poke()   poke1.populate()   #生成一副牌   poke1.shuffle()    #洗牌   poke1.deal(players,13)  #發給玩家每人13張   #顯示四位牌手的牌   n=1   for hand in players:    print("牌手",n,end=":")    print(hand)    n=n+1   input(" Press the enter key to exit.")

  


[f2h0b53ohn ] python能開發遊戲嗎已經有249次圍觀

http://coctec.com/docs/python/shhow-post-238298.html