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里使用正则的findall函数的实例详解
Oct 19 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
使用python来调用CAN通讯的DLL实现方法
Jul 03 Python
python处理大日志文件
Jul 23 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
python中对_init_的理解及实例解析
Oct 11 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
python模拟点击网页按钮实现方法
Feb 25 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 Python
Python竟然能剪辑视频
May 25 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/04/19 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
PHP中list方法用法示例
2016/12/01 PHP
$()JS小技巧
2007/07/21 Javascript
语义化 H1 标签
2008/01/14 Javascript
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
innerText 使用示例
2014/01/23 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
解读Python中degrees()方法的使用
2015/05/18 Python
python中异常报错处理方法汇总
2016/11/20 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
欧舒丹比利时官网:L’OCCITANE比利时
2017/04/25 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
财务管理专业推荐信
2013/11/19 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
工程管理专业毕业生自荐信
2014/01/24 职场文书
老公爱的承诺书
2014/03/31 职场文书
欢迎领导检查标语
2014/06/27 职场文书
课内比教学心得体会
2014/09/09 职场文书
文书工作总结(范文)
2019/07/11 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers