用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块4)

By | 2011/09/27

恶搞俄罗斯方块的制造之旅也可以结束了,通过上三次的说明,基本就整遍了整个代码,虽说都说了一些类名和方法名而没有涉及到具体的实现,不过实现就是排列几句代码,大家一定没问题吧:)

揉成一团

总是可以把这几次说的东西放在一起运行了,界面的美化啥的我完全没有做,所以很难看,咱们主要学习的东西是pygame,就不在这上面多花功夫了。

运行界面:

恶搞俄罗斯,猫先生

这个是第4种模式的截图,会落下莫名其妙的东西的版本…… 落下个猫先生纪念“夏目友人帐3”的完结。。。

各个模式说明:

  • 1: 落下的直接消失
  • 2: 落下长条
  • 3: 非常小的方块
  • 4: 上图所示,落下乱糟糟的东西(当然可以随便改)
  • 5: 暂时和6一样,发挥交给你们了:)
  • 6: 正常模式

完成度说明:

直接进去菜单是没有背景的,你很容易自己加一个……游戏过程中空格暂停,Esc返回菜单,返回菜单时直接覆写在当前的游戏画面上。暂时懒得弄了,大家先凑合凑合。

资源说明:

图片和音效是网上随便找的,许可什么的,我什么不知道……
背景音乐史俄罗斯方块之经典“永恒俄罗斯”的音乐中的Hawker’s song,理论上应该是有版权的,不过都已经20多年了,而且咱们是学习,学习~ 不要太在意了(笑)

下载

DBank下载

我放在DBank上是因为记得DBank不用下载器也不用登陆就能下载的,直接点可能会跳出登陆框,直接右键另存为就OK了。

py2exe的执行代码也放出来了,基本就是参考我之前的py2exe篇写的,不过说实话这东西真是难搞,还是多多实践,根据每个工程自己修改,不存在一个脚本放在哪里都好用!

总结

如果您做过游戏,稍微看看这里面的代码一定会嗤之以鼻,看似有条不紊实际上可实在有些乱,各种界面的跳转也是很让人崩溃。不管图像还是运动,都是用最原始的东西组织起来的,维护起来简直要命啊。

我们需要“游戏引擎”来让我们的游戏书写更加的漂亮。

为什么一开始不提供一个引擎?如果一开始就引入引擎的概念,会让我们对引擎的认识不深刻。只有真正的用原始的代码写过一个游戏后,我们才能意识到“引擎”的作用和必要性。对我们面对的东西有足够深刻的认识,才能让我们更卓越!

当时光看这几篇文章的内容,是不够理解的,只要把代码通读,然后完成一个新的模式(就是那个空着的模式5),才能有足够的认识(这个代码写的不够漂亮,着重理解的是pygame,而不是整个代码设计,我可不能误人子弟啊)。

下一个游戏会更加的精彩……

更新

关于在fedora上运行不起来的问题,我原想会有哪位fedora用户研究一下把问题贴出来呢,看来没有,只好自己安装了尝试了……

问题在于game.py中pre_init(44100, 16, 2, 1024*4),fedora必须把16改小,比如8,或者默认的-16,具体原因我也没时间找,猜测可能是fedora的声卡驱动对回放的限制有些多吧。


有33人评论 用Python和Pygame写游戏-从入门到精通(实战二:恶搞俄罗斯方块4)

    1. 郑毓铭

      请问python的俄罗斯方块的源码包还在吗,能不能给我一份

      回复
  1. zhangtl

    问一下 是不是在linux上不能运行啊 我再Fedora 15上运行之后虾米都没 ?

    回复
    1. xishui 作者

      我在Ubuntu 10.10上运行的很好,如果能贴出错信息的话,或许能看出一些端倪。

      回复
  2. ywchen2000

    我在fedora 14上运行也是什么也没有

    回复
  3. Lhfcws

    dbank 现在需要坑爹的插件下载器,还是exe的。linux用户情何以堪

    回复
  4. leo

    博主你好,我在此教程的基础上修改了部分代码与素材资源,写成一俄罗斯方块,想要送给朋友娱乐,请问这样是否侵犯您的权益?谢谢

    回复
    1. xishui 作者

      完全可以,我的权益?那是什么东东:)

      回复
    2. 郑毓铭

      请问python的俄罗斯方块的源码包还在吗,能不能给我一份

      回复
  5. 苌智

    感谢博主的无私奉献。
    请教个问题,我在阅读源码的时候,在main.py中发现
    self.tetris = eval( “tetris.Tetris” + str(kind) + “(self.screen)”)
    不是很理解其作用,感觉是根据kind值去确定Tetris X ?求解答!!

    回复
    1. xishui 作者

      时间比较久了,手头没有源码我也不太记得具体的功用了,但是你的猜测是正确的,里面有很多TerisX的函数,如果按照传统的

      if x == 1:
          tetris.Tetris1(self.screen)
      if x == 2:
          tetris.Tetris2(self.screen)

      比较低效,而且也不确定到底有多少种x,所以使用eval来“合成”代码并执行,当然这种方法未必是最好的,Python中还有一种比较流行的做法是把函数存储在一个字典里,通过key来调用……

      回复
      1. 苌智

        多谢博主回答!原来eval还有这功能。。。学习了!

        回复
  6. 苌智

    还要请教个问题,我在shape.py的check_legal和at_bottom函数中发现,写的是shape[y][x],为什么不是shape[x][y]呢?求解!

    回复
    1. xishui 作者

      这个真难讲,程序就是这样的运行机制。。。可以画个坐标图,自己看看?

      回复
    1. xishui 作者

      那就是没有成功执行吧,看看log里写了些什么。

      回复
  7. TylerTemp

    楼主辛苦了
    文件编码我这边测出来是gb2312, 略蛋疼啊, 我Ubuntu系统的……

    回复
  8. TylerTemp

    楼主辛苦了, Again!
    下标有问题额, 变成浮点数了:
    “`
    Start game at level 1
    Will read /home/tyler/Downloads/ftetris3k/data/image/background.jpg
    Traceback (most recent call last):
    File “run_game.py”, line 14, in
    game.run()
    File “/home/tyler/Downloads/ftetris3k/lib/game.py”, line 56, in run
    tetris.loop()
    File “/home/tyler/Downloads/ftetris3k/lib/game.py”, line 43, in loop
    self.stat = self.main.run(elapse)
    File “/home/tyler/Downloads/ftetris3k/lib/main.py”, line 8, in run
    return self.tetris.update(elapse)
    File “/home/tyler/Downloads/ftetris3k/lib/tetris.py”, line 51, in update
    e.key == K_LEFT, e.key == K_RIGHT)
    File “/home/tyler/Downloads/ftetris3k/lib/tetris.py”, line 81, in move
    elif d: next(self) #self.shape.move(0, 1) is bad
    File “/home/tyler/Downloads/ftetris3k/lib/tetris.py”, line 155, in __next__
    if self.shape.at_bottom():
    File “/home/tyler/Downloads/ftetris3k/lib/shape.py”, line 175, in at_bottom
    self.board[self.y+y+1][self.x+x])):
    TypeError: list indices must be integers, not float
    “`

    回复
  9. TylerTemp

    上面那个浮点数错误是因为我转py3k忘了py3k默认地板除改为了浮点除

    一个BUG:
    Space暂停后, 可以通过方向键一下一下的按来控制-__-

    回复
  10. Soapieball

    你好,这个完整版还提供下载么?

    回复
  11. 严爬爬

    博主,下载链接错误,想要看你的源码进行学习!

    回复
  12. 孟雨

    博主您好,这个代码下载不下来了,说网盘外挂存在,哪里还有链接可以下载到吗

    回复
  13. 魏骏

    楼主 俄罗斯方块代码能不能个我一份,非常感谢,好强悍!

    回复
  14. 石蒜

    楼主,能提供一下俄罗斯方块的源码吗?1461862234@qq.com这是我的邮箱,非常感谢

    回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注