原标题: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返回搜狐,查看更多

责任编辑:

python画城堡_Python游戏设计—Part1相关推荐

  1. 如何用python画帆船_python 游戏(船只寻宝)

    1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import r ...

  2. python画城堡_Python 13 简单项目-堡垒机

    本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...

  3. python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx

    湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...

  4. 基于python的飞机大战游戏设计与实现

    基于python的飞机大战游戏设计与实现,采用MySQL+pygame+Tkinter实现飞机大战游戏,主要功能有注册+登录+游戏初始化(开始游戏+游戏操作说明+版权信息)+游戏主界面[设置敌机种类并 ...

  5. python画蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  6. 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)

    python接口自动化一(设计一款自己的接口自动化框架) 一.起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest.当接口数量不怎么多时还好, ...

  7. python 画蝴蝶_python画蝴蝶曲线图的实例

    蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...

  8. python画树干_python教你画一棵树

    最近不少读者对 python 的 turtle 库比较感兴趣, 用python画一朵玫瑰给你 ,之前也写了一篇文章讲过如何画一朵玫瑰花.今天在知乎上找了一个用 turtle 画树的 python 程序 ...

  9. python画圣诞树_python画圣诞树

    使用python画一棵圣诞树 height = 5stars = 1for i in range(height): print((' ' * (height - i)) + ('*' * stars) ...

最新文章

  1. 基于OpenCV的条形码区域分割
  2. 由粗到精学习LVI-SAM基础:多传感器内外参标定原理
  3. h2 迁移到 mysql_[saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库
  4. 解决Linux中使用google chrome浏览器出现:ERR_PROXY_CONNECTION_FAILED 代理错误,导致不能够上网
  5. c语言求出字符串最长单词,C语言-获取字符串中最长的单词.doc
  6. qmoc文件_Qt中Q_OBJECT与生成的moc文件的作用
  7. poj 2390 Bank Interest(计算本利和)
  8. Greendao bean序列化出现的 问题!
  9. Bourbon: 让你的sass更简洁
  10. PostgresException: 42883: function ifnull(integer, integer) does not exist
  11. Tricks(三十三)—— 自定义 zipWithIndex
  12. practice:win2008 core基本管理(一)
  13. 睡眠 应该用 a加权 c加权_?焦虑自测 ,看看你的焦虑程度到底有多深?是否影响睡眠?...
  14. 自带win10的笔记本电脑如何装win7
  15. dbus-glib编程2:d-feet的使用
  16. 坐标转换 四参数/七参数/正形变换 ∈ C# 编程笔记
  17. 预留度数Rx表达式的推导
  18. markdown多级列表
  19. conda 克隆环境及导入新环境/conda环境移植
  20. mysql 表分区、按时间函数分区、删除分区、自动添加表分区

热门文章

  1. android 第二行代码 源码
  2. UIImageView 处理动画
  3. DHCP和静态和服务器分别是什么?
  4. switch语句解决ATN取款机问题
  5. python安装urllib2_Python如何安装urllib2库
  6. 360证实将推移动通讯工具口信 类似微信米聊
  7. nvarchar类型和varchar类型
  8. Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of
  9. c语言 用回溯算法解决01背包问题,回溯法解决01背包问题
  10. EditText自定义光标的问题