python可以寫游戲,但不適合。下面我們來分析一下具體原因。
用錘子能造汽車嗎? 誰也沒法說不能吧?歷史上也確實曾經有些汽車,是用錘子造出來的。但一般來說,還是用工業機器人更合適對嗎?
比較大型的,使用Python的游戲有兩個,一個是《EVE》,還有一個是《文明》。但這僅僅是個例,沒有廣泛意義。
一般來說,用來做游戲的語言,有兩種。一是C++。。一是C#。。
Python理論上,不僅不適合做游戲,而是只要大型的程序,都不適合。只適合寫比較小型的東西,比如一個計算器,一個爬蟲等。
主要有2個方面,一是速度慢,二是語法缺陷。
也許你一定覺得,Python的語法又干凈,又優雅,怎么還有缺陷?但仔細想想,為什么別的語言沒有這么干凈?沒有這么優雅?明明可以直接a=123 干嘛非要寫成 int a=123;呢?難道是其他語言的設計者,都有強迫癥嗎?道理很簡單,有得必有失。
如果數據類型,只有字符串和數字,省略掉聲明變量的過程,當然不是問題。但只要邏輯一復雜,情況就完全不同了。。。游戲中,你用C#或C++寫起來,大概會是這樣。
1
2
3
4
5
|
技能 a = xxxx; 武器 b = xxxx; 角色 c = xxxx; 藥水 d = xxxx; 音樂 e = xxxx; |
而Python呢?大概是這個樣子
1
2
3
4
|
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張牌,最后示四位牌手所有的牌。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
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) + "\t" 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 ( "\nPress the enter key to exit." ) |
到此這篇關于python能開發游戲嗎的文章就介紹到這了,更多相關python能寫游戲嗎內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.py.cn/faq/python/11726.html