python能开发游戏吗


Posted in Python onJune 11, 2020

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. 游戏介绍

四名牌手打牌,电脑随机??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张牌,最后示四位牌手所有的牌。

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能写游戏吗内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用xauth方式登录饭否网然后发消息
Apr 11 Python
python实现简单ftp客户端的方法
Jun 28 Python
python学习之编写查询ip程序
Feb 27 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
局域网内python socket实现windows与linux间的消息传送
Apr 19 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
python的pip有什么用
Jun 17 Python
Python用dilb提取照片上人脸的示例
Oct 26 Python
python 写一个文件分发小程序
Dec 05 Python
解决pytorch读取自制数据集出现过的问题
May 31 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 #Python
python属于解释语言吗
Jun 11 #Python
numpy的Fancy Indexing和array比较详解
Jun 11 #Python
python如何更新包
Jun 11 #Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 #Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 #Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 #Python
You might like
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JS批量操作CSS属性详细解析
2013/12/16 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
单击某一段文字改写文本颜色
2014/06/06 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
python格式化字符串实例总结
2014/09/28 Python
Python数据结构之Array用法实例
2014/10/09 Python
Python中文件的读取和写入操作
2018/04/27 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
《黄河颂》教学反思
2014/02/07 职场文书
优秀学生获奖感言
2014/02/15 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
营业用房租赁协议书
2014/11/26 职场文书
寒山寺导游词
2015/02/03 职场文书