用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的声卡驱动对回放的限制有些多吧。

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

    1. 郑毓铭

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

      Reply
      1. 啃梨

        正在学习python~求大佬发一份源码谢谢(;´༎ຶД༎ຶ`)
        邮箱是:15235117537@163.com

        Reply
  1. zhangtl

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

    Reply
    1. xishui Post author

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

      Reply
    2. Asher

      源码,能发我下吗?邮箱:ludahai19@163.com

      Reply
  2. ywchen2000

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

    Reply
  3. Lhfcws

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

    Reply
  4. leo

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

    Reply
    1. xishui Post author

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

      Reply
    2. 郑毓铭

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

      Reply
    3. QiQi

      能否也给我发一份新的源码包或作者原来的源码包,现在现在不到了。谢谢。 1813103535@qq.com, 非常感谢!

      Reply
    4. jerry

      大佬,能否提供一下源码,316982073@qq.com,谢谢!

      Reply
  5. 苌智

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

    Reply
    1. xishui Post author

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

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

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

      Reply
      1. 苌智

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

        Reply
    2. QiQi

      楼主的 《恶搞俄罗斯方程的源码包》还有吗? 劳驾发一份到1813103535@qq.com, 非常感谢!

      Reply
  6. 苌智

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

    Reply
    1. xishui Post author

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

      Reply
  7. 王杨

    我怎么下不下来代码,楼主请赐教

    Reply
    1. xishui Post author

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

      Reply
  8. TylerTemp

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

    Reply
  9. 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
    “`

    Reply
  10. TylerTemp

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

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

    Reply
  11. Soapieball

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

    Reply
  12. 严爬爬

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

    Reply
  13. 孟雨

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

    Reply
    1. xishui Post author

      抱歉,我自己也没有了……

      Reply
  14. 魏骏

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

    Reply
  15. 石蒜

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

    Reply
  16. cxq

    不知道大佬还有没有源码QAQ想要一份来学习。有的话希望能发一份,邮箱80803716@qq.com

    Reply
  17. 邹清原

    大佬,来个源码吧,谢谢!邮箱1171443643@qq.com

    Reply
  18. xzm2017

    那位好心的大佬,来个”实战二:恶搞俄罗斯方块源码” 吧,谢谢!非商业,纯学习用的。邮箱 xzm.gd@126.com

    Reply
  19. 唐献聿

    楼主源代码包发我一份吧,邮箱443773516@qq.com,谢谢

    Reply
  20. qinchao

    你好,这个俄罗斯方块的工程代码还在吗?如果有,能不能发我邮箱?谢谢了.
    看评论里的朋友,也需要这个工程代码,哪位朋友有的话,可以共享么?
    1424185332@qq.com

    Reply
  21. peng

    请问博主还有俄罗斯方块工程的源文件吗,能否发一份,正在学习,谢谢。8640846703@qq.com

    Reply
  22. grandpaan

    你好博主,那个俄罗斯方块的工程代码还在吗?如果有,能不能麻烦博主发我邮箱?谢谢了.1424437970@qq.com

    Reply
  23. flying-wyf

    麻烦哪位还有源码的可以发我一个吗?414746820@qq.com,谢谢了。

    Reply
  24. Asher

    博主!
    您好,
    下载链接失效了,能把源码发我下吗? 邮箱:ludahai19@163.com
    谢谢

    Reply
  25. 橙九块

    大神,代码还在不。。。
    求搭救!

    Reply
  26. 橙九块

    我的邮箱是:1192326568@qq.com
    求俄罗斯方块的代码。非常感谢!!!

    Reply
  27. 桑朋飞

    游戏已经开发好了, 现在想把游戏打包成可以在安卓和ios手机上运行的安装包, 该怎么办呢? 网上找了一些方案都没有走通, 目光大哥能出个教程吗 ?

    Reply
  28. aword

    您好,最近正在学习pygame,希望能得到一份源码看一下,谢谢931251232@qq.com

    Reply
  29. 清浅流年

    博主你好,最近在学习python,想通过实例学习,希望能得到一份源码借鉴一下,万分感谢。
    2508497853@qq.com

    Reply
  30. 小小菜鸟

    博主你好,可以把俄罗斯方块的源码给发一下吗?万分感谢。

    Reply
  31. Pingback: 用 Python 和 Pygame 写游戏 – 从入门到精通(目录) – ITPCB

  32. maddeer

    有谁有俄罗斯方块的源码,麻烦发一下十分感谢!邮箱:1044734463@qq.com

    Reply
  33. 静沐暖阳

    现在求一份代码还有人吗1014968238@qq.com

    Reply

发表评论

您的电子邮箱地址不会被公开。