转载请注明来自stanlysheng——talk is cheap, show me your code。http://www.cnblogs.com/stanly/

挺早网上看到了12岁的少年写的博客,使用pygame写简单的小游戏,不能随便说人家是天才,但是至少12岁都开始写了说明很聪明勤奋。

博客原文:http://www.raywenderlich.com/24252/beginning-game-programming-for-teens-with-python

中文有翻译版:http://blog.jobbole.com/46308/

人家都写了怎么做,我想记录下简单的流程和我在写的过程中遇到的一些问题以及需要注意的几点:

一、简单过程

1、安装python

2、安装pygame这个包

3、功能是在框架上逐渐搭建起来的,不要着急。

  按照“框架主体->搭建窗口->加载画面元素->让元素兔子动起来(上下左右以及旋转)->让兔子可以有武器发射->随机位置间隔一定时间创建敌人并向城堡攻击->让武器可以消灭敌人->添加判断胜利与否->完善,包括添加胜利和失败的图片和各种音效”。按照这个顺序,逐渐搭建起整个游戏。由于pygame包包含很多东西,很多都不需要自己动手写,直接调用那些功能即可。

二、问题以及需要注意的地方

1、IDE

这个问题我不知道是设置的问题还是我自己理解有问题,我用的pycharm,虽然最近开源了但是我还是下了一个专业版然后找了注册码。有些无语的是当出现需要用逗号分隔的时候,对空格的个数也有要求。比如width, height = 480, 640逗号和后面的变量名或者数字都要求有一个空格,多了少了空格会提示你。可能是pycharm的代码检查太严格了吧,如果有知道的不吝指教非常感谢。

2、函数参数

screen = pygame.display.set_mode((width, height))比如这个函数,它的参数是一个元组(width, height)而不是两个int变量,及其容易看掉,就会报错。

3、路径

不管是作者原文还是翻译,源文件都是和资源文件夹在同一目录下,所以在加载画面元素的时候直接就是这样:

pygame.image.load("resources/images/dude.png")

但是我从来不喜欢源文件和资源文件夹在一起,肯定会建包。所以在路径上就不是上面那样的简单。而且这是一个好习惯,这个比较简单可能只有一个文件所以容易看得清,以后写别的程序有很多源文件就不那么容易了。所以养成好习惯。这样就得先拿到父级路径然后从父级目录进入resources目录。

python已经提供了获取各种目录的方法。这个网上资料比较多,也可以查看官方文档。

需要引入模块import os。

os.getcwd()获得当前文件的路径(包括该文件)。

os.path.abspath(os.curdir) 当前目录的绝对路径

print os.path.abspath('.') 

 代表当前的路径

.. 代表当前路径的上一级路径

这些对于windows和UNIX是类似的。

这个游戏里要获得上级目录的路径也很简单,os.path.abspath('..')就可以了。

如果要改变当前路径,os.chdir(path) 即可, path里填要改变到的目录

注:查阅了不少博客和文档,当然官方文档没这个,不要通过sys.argv[0]获得当前路径,那是不正确的。sys.argv[0] 是当前执行的Python脚本的文件名,不一定是当前的路径。

4、数学知识

这里需要数学的地方不多,简单计算什么的就不说了是个人都会。唯一需要注意的就是里面兔子根据鼠标的位置进行旋转以及射出的箭也是鼠标指向的方向。这里需要一点三角函数的知识。旋转的函数pygame已经提供了但是我们需要提供旋转的角度和弧度。如果没学的稍微看下三角函数就行,学过了一眼就看得懂。

trig_lesson

4、其他就没什么问题了,根据指导一步步来基本都能完成。

三、缺点与改进:

并不是没有优点,当然要看到缺点追求改进。虽然这是个入门游戏,可以说入门就行,可是如果要把这个游戏做精还是需要不少改进的。

1、整体就是一个文件,并且整个流程好大一个while循环下来,感觉比较臃肿也比较难以看懂。可以抽出函数,这样写起来也比较方便。

2、里面有不少需要加载的元素,路径太多,基本都一样就最后文件名不一样,改进一下。

3、另外里面兔子竟然可以移动到画面外,不见了=。=虽然这样也不能发射箭了。

4、玩完了游戏不理是game over还是youwin就只能关闭,可以改进下再玩一次或者推出。

5、游戏比较简单也比较弱,如果可以调整难度设置时间之类的就比较好了。

6、. . . . . . 

需要改进的很多,虽然只是一个入门的小游戏,但是要把它做精做到极致还是很难的。考虑深一点思考多一点一定会有不少收获的。

posted on 2013-10-02 22:45  stanlysheng  阅读(2778)  评论(0编辑  收藏  举报