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之??碌某?? target=
Sep 12 Python
详解Python的Django框架中的模版继承
Jul 16 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
Python之str操作方法(详解)
Jun 19 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
python通过zabbix api获取主机
Sep 17 Python
Python使用gRPC传输协议教程
Oct 16 Python
在pycharm中设置显示行数的方法
Jan 16 Python
Django异步任务之Celery的基本使用
Mar 23 Python
一文秒懂python读写csv xml json文件各种骚操作
Jul 04 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 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
杏林同学录(五)
2006/10/09 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
JavaScript Prototype对象
2009/01/07 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
2012/08/17 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
微信小程序学习总结(四)事件与冒泡实例分析
2020/06/04 Javascript
多个Vue项目部署到服务器的步骤记录
2020/10/22 Javascript
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
python读取Kafka实例
2019/12/23 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
django 装饰器 检测登录状态操作
2020/07/02 Python
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
运动会解说词50字
2014/01/18 职场文书
春节联欢晚会主持词范文
2014/03/24 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
小学教师教育随笔
2015/08/14 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android