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 11 Python
python删除文本中行数标签的方法
May 31 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python3中类的继承以及self和super的区别详解
Jun 26 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
Python调用.net动态库实现过程解析
Jun 05 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
python利用while求100内的整数和方式
Nov 07 Python
分析Python list操作为什么会错误
Nov 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开发文件系统实例讲解
2006/10/09 PHP
Php Cookie的一个使用注意点
2008/11/08 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
加速IE的Javascript document输出的方法
2010/12/02 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
vue.js中指令Directives详解
2017/03/20 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
高中体育教学反思
2014/01/24 职场文书
入党推优材料
2014/06/02 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
九年级历史教学反思
2016/02/19 职场文书
创业计划书之寿司
2019/07/19 职场文书
PHP实现创建以太坊钱包转账等功能
2021/04/21 PHP