python画城堡_Python游戏设计—Part1
原标题: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相关推荐
- 如何用python画帆船_python 游戏(船只寻宝)
1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import r ...
- python画城堡_Python 13 简单项目-堡垒机
本节内容 项目实战:运维堡垒机开发 前景介绍 到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功 ...
- python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx
湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...
- 基于python的飞机大战游戏设计与实现
基于python的飞机大战游戏设计与实现,采用MySQL+pygame+Tkinter实现飞机大战游戏,主要功能有注册+登录+游戏初始化(开始游戏+游戏操作说明+版权信息)+游戏主界面[设置敌机种类并 ...
- python画蝴蝶_python画蝴蝶曲线图的实例
蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...
- 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)
python接口自动化一(设计一款自己的接口自动化框架) 一.起因: 前面学习过了python接口requests来进行接口测试,但是在框架选择上还是选择的unittest.当接口数量不怎么多时还好, ...
- python 画蝴蝶_python画蝴蝶曲线图的实例
蝴蝶曲线是由Temple H·Fay发现的可用极坐标函数表示的蝴蝶曲线. 由于此曲线优美, 因此就想把它作为博客favicon.ico,这里我使用pytho matplotlib.pyplot包来绘制 ...
- python画树干_python教你画一棵树
最近不少读者对 python 的 turtle 库比较感兴趣, 用python画一朵玫瑰给你 ,之前也写了一篇文章讲过如何画一朵玫瑰花.今天在知乎上找了一个用 turtle 画树的 python 程序 ...
- python画圣诞树_python画圣诞树
使用python画一棵圣诞树 height = 5stars = 1for i in range(height): print((' ' * (height - i)) + ('*' * stars) ...
最新文章
- 基于OpenCV的条形码区域分割
- 由粗到精学习LVI-SAM基础:多传感器内外参标定原理
- h2 迁移到 mysql_[saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库
- 解决Linux中使用google chrome浏览器出现:ERR_PROXY_CONNECTION_FAILED 代理错误,导致不能够上网
- c语言求出字符串最长单词,C语言-获取字符串中最长的单词.doc
- qmoc文件_Qt中Q_OBJECT与生成的moc文件的作用
- poj 2390 Bank Interest(计算本利和)
- Greendao bean序列化出现的 问题!
- Bourbon: 让你的sass更简洁
- PostgresException: 42883: function ifnull(integer, integer) does not exist
- Tricks(三十三)—— 自定义 zipWithIndex
- practice:win2008 core基本管理(一)
- 睡眠 应该用 a加权 c加权_?焦虑自测 ,看看你的焦虑程度到底有多深?是否影响睡眠?...
- 自带win10的笔记本电脑如何装win7
- dbus-glib编程2:d-feet的使用
- 坐标转换 四参数/七参数/正形变换 ∈ C# 编程笔记
- 预留度数Rx表达式的推导
- markdown多级列表
- conda 克隆环境及导入新环境/conda环境移植
- mysql 表分区、按时间函数分区、删除分区、自动添加表分区
热门文章
- android 第二行代码 源码
- UIImageView 处理动画
- DHCP和静态和服务器分别是什么?
- switch语句解决ATN取款机问题
- python安装urllib2_Python如何安装urllib2库
- 360证实将推移动通讯工具口信 类似微信米聊
- nvarchar类型和varchar类型
- Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of
- c语言 用回溯算法解决01背包问题,回溯法解决01背包问题
- EditText自定义光标的问题