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实现堆排序的方法详解
May 03 Python
浅谈用Python实现一个大数据搜索引擎
Nov 28 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Python批量修改图片分辨率的实例代码
Jul 04 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
Python Pivot table透视表使用方法解析
Sep 11 Python
python使用smtplib模块发送邮件
Dec 17 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中用文本文件做数据库的实现方法
2008/03/27 PHP
php SQL Injection with MySQL
2011/02/27 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
ext监听事件方法[初级篇]
2008/04/27 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
动态加载jQuery的方法
2015/06/16 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
2020/06/06 jQuery
详解JavaScript作用域 闭包
2020/07/29 Javascript
使用SAE部署Python运行环境的教程
2015/05/05 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
悬挂训练绳:TRX
2017/12/14 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
网页设计个人找工作求职信
2013/11/28 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
教师党员公开承诺事项
2014/05/28 职场文书
公司经理任命书
2014/06/05 职场文书
房产协议书范本
2014/10/18 职场文书
2016十一国庆节感言
2015/12/09 职场文书
用python实现监控视频人数统计
2021/05/21 Python
JavaScript 原型与原型链详情
2021/11/02 Javascript
Elasticsearch 数据类型及管理
2022/04/19 Python