搜索
Hi~登录注册
查看: 918|回复: 0

python能开发游戏吗

[复制链接]

0

主题

0

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2020-6-22 13:44:08 | 显示全部楼层 |阅读模式
python可以写游戏,但不适合。下面我们来分析一下具体原因。
用锤子能造汽车吗? 谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的。但一般来说,还是用工业机器人更合适对吗?
比较大型的,使用Python的游戏有两个,一个是《EVE》,另有一个是《文明》。但这仅仅是个例,没有广泛意义。
一般来说,用来做游戏的语言,有两种。一是C++。。一是C#。。
Python理论上,不仅不适合做游戏,而是只要大型的步伐,都不适合。只适合写比较小型的东西,比如一个盘算器,一个爬虫等。
重要有2个方面,一是速率慢,二是语法缺陷。
也许你一定觉得,Python的语法又干净,又优雅,怎么另有缺陷?但仔细想想,为什么别的语言没有这么干净?没有这么优雅?明明可以直接a=123 干嘛非要写成 int a=123;呢?难道是其他语言的设计者,都有强迫症吗?原理很简单,有得必有失。
假如数据类型,只有字符串和数字,省略掉声明变量的过程,当然不是问题。但只要逻辑一复杂,情况就完全不同了。。。游戏中,你用C#或C++写起来,大概会是这样。
  1. 技能 a=xxxx;武器 b=xxxx;角色 c=xxxx;药水 d=xxxx;音乐 e=xxxx;
复制代码
而Python呢?大概是这个样子
  1. a=xxxxb=xxxxc=xxxxd=xxxx
复制代码
假如你的代码很少,显然是Python比较方便。但假如你创建几百个对象,代码超过1万行。。。写到几千行的时候,遇到一个叫x的对象,你还知道它到底是个啥吗?是一把武器?还是一瓶药水?还是一张图片?一段音频?一盏灯光?一座房子?
不要以为1万行代码许多。。。。1万行连个《斗地主》都写不完。。
用Python写大步伐的感觉就是,当你第一天,只写了50行代码,创建了3个类,5个对象。你会觉得太爽了,这绝对是天下上最好的语言。。。第二天,你又创建了2个类,5个对象的时候,就觉得有点晕晕的了。第三天,又创建了2个类之后,你会发现本身必须非常仔细的看一遍解释,否则就不会写了。第四天,你一整天都在看解释。。。。
这就是动态语言的劣根性。一开始代码量少,看不出任何缺点,各种省事,各种爽。代码量越多,脑子越乱。一般500行以上,效率就会被JAVA,C#之类的语言反超。。1000行,就必须要各种加解释才能看懂了。。2000行,解释就比代码多了。。5000行,解释已经完全不管用了,本身根本看不懂本身的代码,需要准备弃坑了。
总结一下,python不是不能开发游戏,只是并不合适。每种语言都有各自的优缺点,开发游戏这一块或许就是python的缺点吧。
python游戏实例补充:
发牌游戏
1. 游戏介绍
四名牌手打牌,电脑随机2张牌(不合大、小王)发给四名牌手,并在屏幕上表现每位牌手的牌。
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. 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+FaceNumclass 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能写游戏吗内容请搜索脚本之家以前的文章或继续欣赏下面的相干文章希望大家以后多多支持脚本之家!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 点我注册

快速回复 返回顶部 返回列表