python能開(kāi)發(fā)游戲嗎
python可以寫(xiě)游戲,但不適合。下面我們來(lái)分析一下具體原因。
用錘子能造汽車嗎? 誰(shuí)也沒(méi)法說(shuō)不能吧?歷史上也確實(shí)曾經(jīng)有些汽車,是用錘子造出來(lái)的。但一般來(lái)說(shuō),還是用工業(yè)機(jī)器人更合適對(duì)嗎?
比較大型的,使用Python的游戲有兩個(gè),一個(gè)是《EVE》,還有一個(gè)是《文明》。但這僅僅是個(gè)例,沒(méi)有廣泛意義。
一般來(lái)說(shuō),用來(lái)做游戲的語(yǔ)言,有兩種。一是C++。。一是C#。。
Python理論上,不僅不適合做游戲,而是只要大型的程序,都不適合。只適合寫(xiě)比較小型的東西,比如一個(gè)計(jì)算器,一個(gè)爬蟲(chóng)等。
主要有2個(gè)方面,一是速度慢,二是語(yǔ)法缺陷。
也許你一定覺(jué)得,Python的語(yǔ)法又干凈,又優(yōu)雅,怎么還有缺陷?但仔細(xì)想想,為什么別的語(yǔ)言沒(méi)有這么干凈?沒(méi)有這么優(yōu)雅?明明可以直接a=123 干嘛非要寫(xiě)成 int a=123;呢?難道是其他語(yǔ)言的設(shè)計(jì)者,都有強(qiáng)迫癥嗎?道理很簡(jiǎn)單,有得必有失。
如果數(shù)據(jù)類型,只有字符串和數(shù)字,省略掉聲明變量的過(guò)程,當(dāng)然不是問(wèn)題。但只要邏輯一復(fù)雜,情況就完全不同了。。。游戲中,你用C#或C++寫(xiě)起來(lái),大概會(huì)是這樣。
技能 a=xxxx; 武器 b=xxxx; 角色 c=xxxx; 藥水 d=xxxx; 音樂(lè) e=xxxx;
而Python呢?大概是這個(gè)樣子
a=xxxx b=xxxx c=xxxx d=xxxx
如果你的代碼很少,顯然是Python比較方便。但如果你創(chuàng)建幾百個(gè)對(duì)象,代碼超過(guò)1萬(wàn)行。。。寫(xiě)到幾千行的時(shí)候,遇到一個(gè)叫x的對(duì)象,你還知道它到底是個(gè)啥嗎?是一把武器?還是一瓶藥水?還是一張圖片?一段音頻?一盞燈光?一座房子?
不要以為1萬(wàn)行代碼很多。。。。1萬(wàn)行連個(gè)《斗地主》都寫(xiě)不完。。
用Python寫(xiě)大程序的感覺(jué)就是,當(dāng)你第一天,只寫(xiě)了50行代碼,創(chuàng)建了3個(gè)類,5個(gè)對(duì)象。你會(huì)覺(jué)得太爽了,這絕對(duì)是世界上最好的語(yǔ)言。。。第二天,你又創(chuàng)建了2個(gè)類,5個(gè)對(duì)象的時(shí)候,就覺(jué)得有點(diǎn)暈暈的了。第三天,又創(chuàng)建了2個(gè)類之后,你會(huì)發(fā)現(xiàn)自己必須非常仔細(xì)的看一遍注釋,否則就不會(huì)寫(xiě)了。第四天,你一整天都在看注釋。。。。
這就是動(dòng)態(tài)語(yǔ)言的劣根性。一開(kāi)始代碼量少,看不出任何缺點(diǎn),各種省事,各種爽。代碼量越多,腦子越亂。一般500行以上,效率就會(huì)被JAVA,C#之類的語(yǔ)言反超。。1000行,就必須要各種加注釋才能看懂了。。2000行,注釋就比代碼多了。。5000行,注釋已經(jīng)完全不管用了,自己根本看不懂自己的代碼,需要準(zhǔn)備棄坑了。
總結(jié)一下,python不是不能開(kāi)發(fā)游戲,只是并不合適。每種語(yǔ)言都有各自的優(yōu)缺點(diǎn),開(kāi)發(fā)游戲這一塊或許就是python的缺點(diǎn)吧。
python游戲?qū)嵗a(bǔ)充:
發(fā)牌游戲
1. 游戲介紹
四名牌手打牌,電腦隨機(jī)將52張牌(不合大、小王)發(fā)給四名牌手,并在屏幕上顯示每位牌手的牌。
2. 面向?qū)ο蟪绦蛟O(shè)計(jì)
3. 程序設(shè)計(jì)步驟
設(shè)計(jì)類,發(fā)牌程序設(shè)計(jì)出三個(gè)類: Card類、Hand類和Poke類。
Card類:Card類代表一張牌,其中,F(xiàn)aceNum字段指的是牌面數(shù)字1~13,Suit字段指的是花色,”梅”為梅花,”方”為方塊,”紅”為紅桃,”黑”為黑桃。
Hand類:Hand類代表手牌(一個(gè)玩家手里拿的牌),可以認(rèn)為是一位牌手手里的牌,其中,cards列表變量存儲(chǔ)牌手手中的牌??梢栽黾优?、清空手里的牌、把一張牌給別的牌手等操作。
Poke類:Poke類代表一副牌,我們可以將一副牌看作是有52張牌的牌手,所以繼承Hand類。由于其中cards列表變量要存儲(chǔ)52張牌,而且要進(jìn)行發(fā)牌、洗牌操作,所以增加如下的方法。
主程序:主程序比較簡(jiǎn)單,因?yàn)橛兴膫€(gè)牌手,所以生成players列表存儲(chǔ)初始化的四位牌手。生成一副牌的對(duì)象實(shí)例poke1,調(diào)用populate()方法生成有52張牌的一副牌,調(diào)用huffle()方法洗牌打亂順序,調(diào)用deal(players,13)方法分別給每位玩家發(fā)13張牌,最后示四位牌手所有的牌。
class Card(): """ A playing card. """ RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"] #牌面數(shù)字1-13 SUITS=["梅","方","紅","黑"] #梅為梅花,方為方鉆,紅為紅心,黑為黑桃 def __init__(self,rank,suit,face_up=True): self.rank=rank #指的是牌面數(shù)字1-13 self.suit=suit #suit指的是花色 self.is_face_up=face_up #是否顯示牌正面,True為正面,F(xiàn)alse為牌背面 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): #牌的順序號(hào) 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="無(wú)牌" 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.") #四個(gè)玩家 players=[Hand(),Hand(),Hand(),Hand()] poke1=Poke() poke1.populate() #生成一副牌 poke1.shuffle() #洗牌 poke1.deal(players,13) #發(fā)給玩家每人13張 #顯示四位牌手的牌 n=1 for hand in players: print("牌手",n,end=":") print(hand) n=n+1 input("\nPress the enter key to exit.")
到此這篇關(guān)于python能開(kāi)發(fā)游戲嗎的文章就介紹到這了,更多相關(guān)python能寫(xiě)游戲嗎內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 3.6.7實(shí)現(xiàn)端口掃描器
這篇文章主要為大家詳細(xì)介紹了python 3.6.7實(shí)現(xiàn)端口掃描器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09超詳細(xì)注釋之OpenCV實(shí)現(xiàn)視頻實(shí)時(shí)人臉模糊和人臉馬賽克
這篇文章主要介紹了OpenCV實(shí)現(xiàn)視頻實(shí)時(shí)人臉模糊和人臉馬賽克,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09python ceiling divide 除法向上取整(或小數(shù)向上取整)的實(shí)例
今天小編就為大家分享一篇python ceiling divide 除法向上取整 (或小數(shù)向上取整)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式
這篇文章主要介紹了解讀Scrapy回調(diào)函數(shù)callback傳遞參數(shù)的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Python中使用kitti數(shù)據(jù)集實(shí)現(xiàn)自動(dòng)駕駛(繪制出所有物體的行駛軌跡)
這篇文章主要介紹了Python中使用kitti數(shù)據(jù)集實(shí)現(xiàn)自動(dòng)駕駛——繪制出所有物體的行駛軌跡,本次內(nèi)容主要是畫(huà)出kitti車的行駛的軌跡,需要的朋友可以參考下2022-06-06