Python游戏设计—Part1

程序演示图:兔子要保卫自己的城堡家园(4个城堡),右侧方随机出现罐来袭击,兔子需要瞄准并射击罐,从而保卫自己的城堡。

【开始】安装Python

如果你想在Windows系统下使用本教程,你需要安装Python。安装完程序后,在程序文件夹中有一个IDLE的文件,打开它就可以使用了。

如果你是苹果电脑用户,并且安装了Python的话,打开终端(/Applications/Utilities/Terminal.app),输入Python然后回车即可

如果安装成功,你会看到下面信息

Python 2.7.3 (v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>>

你打开Python提示符状态,可以测试一下Python是否正常工作。输入语句 Print 1+1 然后回车键,下面一行会打印出2。恭喜你,编写了第一个Python程序

Python安装成功以后,我们需要安装一个库文件PyGame,它提供了类似图片处理和声音播放的功能模块,让游戏编写更加简单方便。

可以测试一下,你的机器能不能够运行PyGame,打开IDLE或者在终端中输入 import pygame,如果没有任何提示信息,则说明安装成功。

如果输出结果如下图所示,则表明PyGame没有在电脑上安装好。

素材有两份

(1)图片素材

(2)音频素材

第【1】步:你好,兔子

运行IDLE,打开文本编辑器窗口,把下面代码输入其中

保存文件到游戏文件夹中,命名成“game.py”,

我们一段段来分析代码:

1、导入PyGame库文件,这样我们就可以在程序中使用这个库中的函数

2、初始化PyGame,设置显示窗口

3、载入程序中使用到的兔子图片

4、反复循环下面的代码

5、在绘制其它物品前,使用黑色的背景

6、兔子的图片装入,定位于坐标(100,100)

7、更新屏幕

8、检查新的事件,如果有的话就执行,执行退出命令则退出程序

这时候,你运行程序,可以看到下面的界面

第【2】步:添加场景

我们来给这个游戏场景添加一个背景,可以用screen.blit()来做。

在#3代码区后面,添加如下代码

上面的语句载入图片,把图片放在指定变量中。现在可以在屏幕上绘制了,但是你检查一下,草地图片不能覆盖整个屏幕(640*480像素)。这也就是意味着,我们可以像贴瓷砖一样,把一张张的Grass贴到背景上去。

在game.py 文档的#6代码区的前面,添加下面的代码 :

for x in range(width/grass.get_width()+1):

for y in range(height/grass.get_height()+1):

screen.blit(grass,(x*100,y*100))

screen.blit(castle,(0,30))

screen.blit(castle,(0,135))

screen.blit(castle,(0,240))

screen.blit(castle,(0,345 ))

上面的代码中,For语句中先遍历x,在这个循环体中开始遍历y,把(x,y)的位置的草地绘制出来。后面4句代码是把城堡图片绘制在背景上。

现在你运行程序,可以看到下面的界面

第【3】步:让兔子动画起来

下面,我们得添加一些真实的游戏元素,通过键盘让兔子动起来。第一步,得跟踪键盘上那个按键被按下。我们要做的是制作一个键盘状态数列,并且跟踪游戏中每一个按键,每一次按键。

在game.py的#2代码区后面,添加下面的代码(在设置屏幕的高度与宽度后面)

代码很好理解,数组array会跟踪下面按键的秩序:WASD。数组中每一个元素对应一个按键- 第一个是W,第二个是A等,以此类推

playerpos 变量是在游戏中摆放玩家的位置(绘制地方)。游戏中,玩家会移动到不同的位置,使用变量可以非常方便的跟踪玩家位置,然后在这个位置处绘制玩家。

你需要修改原来的代码,可以使用新的变量,

screen.blit(player, (100,100))

把上面的坐标位置修改成变量playerpos

screen.blit(player, playerpos)

下面一步是更新按键数列中的状态,跟踪那个键被按下。PyGame通过添加事件函数event.key来侦测这种状态的变化。

在#8代码区的结尾处,检查event.type==pygame.QUIT,我们可以编写如下代码:

这里的代码数量开始增多了,把他们拆分成If语句,其实并不复杂。首先,检测某个键是按下还是释放,然后确认是那个键被按下或者释放,那个键被检测到,就会更新相应的键盘变量。

最后,还要根据按键的情况,更新playerpos 这个变量。

把下面代码放在game.py的最后面。

上面的代码检测那个键被按下,然后就相应增加或者减少玩家的X坐标或者Y坐标的位置,从而移动玩家。试着玩一下游戏吧,试着使用WASD控制玩家。

第【4】步:让兔子转个弯

兔子能够移动了,但是如果能够用鼠标控制兔子,可以旋转起来就更好了。实现这个功能挺简单的,我们会用到三角函数。

可以看下图

如上图,坐标(5,3)的位置是兔子,坐标(2,4)的位置是鼠标,旋转的角度你可以这样计算:atan2 是一个三角函数,通过计算两个点的X,Y坐标距离差,来计算出角度的大小。

这部分,如果你有一些问题的吧,也不必担心-程序可以往下走。以后数学课可要专心了噢,在游戏编程中经常会用到数学的知识。

现在你可以把这些知识应用到游戏中去了。你可以使用PyGame中的Surface.rotate(角度) 这个函数。

atan2 函数来自库 Python的数学库(Math). 所以在#1代码区后面添加下面代码:

import math

替换#6代码区的代码(player.blit这几行),修改后如下图:

来,复习一下这些代码的基本结构吧。

第一步,你会取得鼠标与玩家的平面位置(坐标),接着这些数据扔给atan2函数,atan2可以计算出从弧度到角度的转化值。兔子可以转动,当然它的位置也会变化,所以你需要重新计算兔子的新的位置,刷新它在屏幕上的显示。

再试试运行程序,按WASD和以前一样,当你移动鼠标时,兔子能够转起来了。

很棒!

上期Python二级模拟卷A标准答案如下:

1-10 DACDC DACCD

11-20 ACDCC CDBAD

21-30 DCCCD ACBDA

31-40 BAAAA CCCDB

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813B11I5M00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励