对比python学julia(第三章:游戏编程)--(第三节)疯狂摩托(3)
3.3. 编程实现
2. 控制摩托车和箱子
在这个步骤中,将编程控制摩托车和箱子角色的运动,让摩托车在沙漠公路上能够加速或减速行驶,在碰到箱子时能够停止,以及显示麾托车的行驶速度和里程等。
(1) 创建motor_move()函数,实现对摩托的行驶控制,分别使用键盘上的 4 个方向键控制摩托车向上移动、向下移动、减速和加速。
1 function motor_move(up_max, down_min, speed, key ,dt)
2 #摩托移动'''
3 global motor_speed, motor_bottom
4 if key.UP
5
6 motor_bottom -= 50 * dt
7 #println(motor_bottom)
8 if motor_bottom <HEIGHT-up_max
9 motor_bottom = HEIGHT-up_max
10 end
11 end
12 if key.DOWN
13 motor_bottom += 50 * dt
14 if motor_bottom > down_min
15 motor_bottom = down_min
16 end
17 end
18 if key.LEFT
19 motor_speed -= 324 * dt
20 if motor_speed < 0
21 motor_speed = 0
22 end
23 end
24 if key.RIGHT
25 motor_speed += speed * dt
26 if motor_speed > 1620
27 motor_speed = 1620 #摩托车最大速度
28 end
29 end
30 end
这个函数将会被间接调用,与时间敏感的数据和 dt 参数结合使用,从而精确控制数据的变化。例如,按下向上方向键控制麾托车往窗口上方移动时,在代码 motor_bottom -= 50 * dt 中使用了 dt 参数,假设50是 1s 内的变化量。 也就是说,按下向上方向键,变量 motor_bottom 在 lS 内能够减少50(注意坐标轴是位于窗口左上角)。 其他使用了 dt 参数的代码与之是相同的道理。
(2) 创建motor_control()函数,用于控制麾托车角色运动。根据摩托车与箱子是否碰撞和所处位置使用不同的方式控制摩托车移动,以及显示摩托车的行驶速度和里程等。
1 function motor_control(g::Game,dt)
2 #摩托车的控制'''
3 global motor_speed, motor_left, motor_bottom, mileag-es,isPlaying,speed_label,mileages_label
4
5 #碰撞检测和移动控制
6 if collide(motor, box)
7 #println(@sprintf("box.bottom=%2d,motor.bottom=%2d",box.bottom,motor.bottom))
8 if ( box.bottom - 24< motor.bottom < box.bottom)
9 #println("oo")
10 motor_speed = 0
11 motor_move(50, HEIGHT, motor_speed,g.keyboard, dt)
12 elseif motor.bottom <= box.bottom - 24
13 motor_move(50, box.bottom - 24, 162,g.keyboard, dt)
14 else
15 motor_move(box.bottom, HEIGHT, 162,g.keyboard, dt)
16 end
17 else
18 motor_move(50, HEIGHT, 162,g.keyboard, dt)
19 end
20 motor.bottom = motor_bottom
21 motor_left += motor_speed * dt
22 mileages = motor_left * 0.024
23 speed_label =TextActor(@sprintf("Motor: %.3f km/h",motor_speed * 0.024 * 3.6),"moonhouse")
24 speed_label.pos=(10,15)
25 mileages_label = TextActor(@sprintf("Mileages: %.3f km" ,mileages / 1000),"moonhouse")
26 mileages_label.pos=(10,35)
27 end
关于控制摩托车运动的几种方式以及将速度和里程转换成km为单位等,请查看编程思路中的介绍 这个函数在窗口update()方法中使用。
(3) 创建box_control()函数,用于控制箱子角色运动。当摩托车行驶里程超过100m,并且里程数是 300 的整数倍时,将让箱子从x坐标3000 处向窗口左侧移动。同时,箱子出现在麾托车y坐标附近。如果玩家不注意控制摩托车行驶,就会撞上箱子。这个函数在窗口update()方法中使用。
1 function box_control(dt)
2 #'''箱子的控制'''
3 global mileages, motor_speed
4 if mileages > 100 && floor(Int,mileages) % 300 == 0
5 println(floor(Int,mileages))
6 #放置箱子
7 box.left = 3000
8 box.bottom = motor.bottom + 6
9 #播放警报声
10 play_music(alert_sound,3)
11 else
12 #移动箱子
13 box.left -= motor_speed * dt
14 end
15 end
(4) 窗口update()方法
1 function update(g, dt)
2 bgA.pos=(0 - floor(Int,motor_left) % 600, 0)
3 bgB.pos=(600 - floor(Int,motor_left) % 600, 0)
4 motor_control(g,dt)
5 box_control(dt)
6 end
至此,第2个步骤的工作就完成了。运行程序,就可以使用键盘上的4个方向键控制摩托车上下移动、加速或减速,当摩托车碰到箱子时,就会停止前进。同时,在摩托车向前行驶时,窗口左上方的速度和里程数会不断变化。
3. 添加游戏音效
在这个步骤中,将编程实现让麾托车行驶时发出轰鸣的引擎声,以及在靠近箱子时响起警报声,提醒玩家注意躲避。
(1) 在motor_contro()函数中增加播放摩托车音效的代码。当摩托车行驶速度大于0 时,就播放轰鸣的引擎声音效,当行驶速度等于 0 时,则停止声音。
function motor_control(g::Game,dt)
#摩托车的控制'''
……
if motor_speed > 0
if !isPlaying play_music(motor_sound)
isPlaying=true
end
elseif motor_speed == 0
if isPlaying==true
isPlaying=false end end end
(2) 在 box_control()函数中增加播放警报声的代码。当摩托车的行驶里程大于100m,并且是 300 的整数倍时,就播放警报声音效。
1 function box_control(dt)
2 #'''箱子的控制'''
3 global mileages, motor_speed
4 if mileages > 100 && floor(Int,mileages) % 300 == 0
5 println(floor(Int,mileages))
6 #放置箱子
7 box.left = 3000
8 box.bottom = motor.bottom + 6
9 #播放警报声
10 play_music(alert_sound,3)
11 else
12 #移动箱子
13 box.left -= motor_speed * dt
14 end
15 end
至此,这个“疯狂摩托”游戏程序编写完毕。运行程序,玩家就可以听到摩托车在行驶中发出轰鸣的引擎声,还可以在听到警报声后及时躲避前方出现的箱子。 否则,摩托车在高速行驶时,玩家会很难躲避箱子。
代码下载:https://files.cnblogs.com/files/zjzkiss/fkmt_v2.rar
对比python学julia(第三章:游戏编程)--(第三节)疯狂摩托(3)的更多相关文章
- python学习心得第三章
python学习心得第三章 1.三元运算 变量=值1 if 条件 else 值2 由图如果条件成立则赋值1给变量,如果条件不成立则赋值2给变量. 2.数据类型 集合:set() class set(o ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- 跟着高淇学Python——第一到第三章总结
2019/10/26 第一章:Python介绍 Python是一种解释型,面向对象的语言.特点是: 可读性强 简洁,简洁 面向对象 免费开源 可移植性和跨平台性 丰富的库 可扩展性 应用范围:1.人工 ...
- 路飞学城-Python爬虫集训-第三章
这个爬虫集训课第三章的作业讲得是Scrapy 课程主要是使用Scrapy + Redis实现分布式爬虫 惯例贴一下作业: Python爬虫可以使用Requests库来进行简单爬虫的编写,但是Reque ...
- python学习笔记——第三章 串
第三章 字符串学习 1.字符串不灵活, 它不能被分割符值 >>> format = "hello, %s. %s enough for ya?" >> ...
- 《零压力学Python》 之 第三章知识点归纳
第三章(第一个程序)知识点归纳 编程犹如写剧本.Python函数与剧本差别不大,你可以反复调用函数,而它每次都执行预定的“脚本”(脚本也可以指整个程序). 在Python IDLE中,真正的编程是从编 ...
- VSTO开发指南(VB2013版) 第三章 Excel编程
通过前两章的内容,有了一定的基础,但进入第三章,实例的步骤非常多,并且随着VS版本的升级,部分功能菜单界面发生了很大变化,所以,第三章的案例我将逐步编写! 实例3.1的目标就是给Excel写一个加载宏 ...
- Python开发【第三章】:Python的文件操作
一.文件操作模式概述 1.打开文件的模式: r, 只读模式[默认] w,只写模式[不可读:不存在则创建:存在则删除内容:] a, 追加模式[不可读:不存在则创建:存在则只追加内容:] 2." ...
- Python开发【第三章】:文件操作
一.文件操作模式概述 1.打开文件的模式: r, 只读模式[默认] w,只写模式[不可读:不存在则创建:存在则删除内容:] a, 追加模式[不可读:不存在则创建:存在则只追加内容:] 2." ...
- python基础教程-第三章-使用字符串
本章将会介绍如何使用字符串何世华其他的值(如打印特殊格式的字符串),并简单了解下利用字符串的分割.联接.搜索等方法能做些什么 3.1 基本字符串操作 所有标准的序列操作(索引.分片.乘法.判断成员资格 ...
随机推荐
- 8.4考试总结(NOIP模拟30)[毛一琛·毛二琛·毛三琛]
最有名的莫过于想死一次吗. 前言 至今都不知道题目是个啥... T1 毛一琛 解题思路 \(\mathcal{Meet\;In\;The\;Middle}\) 其实就是一个爆搜... 把整个区间分为两 ...
- swap文件修复
修复swap文件 vim -r /aaaa.swap
- 一款WPF的精简版MVVM框架——stylet框架的初体验(包括MVVM绑定、依赖注入等操作)
今天偶然知道一款叫做stylet的MVVM框架,挺小巧的,特别是它的命令触发方式,简单粗暴,让人感觉很巴适,现在我做一个简单的demo来顺便来分享给大家. 本地创建一个WPF项目,此处我使用.NET ...
- Linux扩展篇-shell编程(五)-流程控制(二)-case语句
基本语法: case expression in pattern1) statement1 ;; pattern2) statement2 ;; *) statement3 ;; esac 注意事项: ...
- 如何排查常规软件问题 - 面向 Linux 初级用户的教程
笔者从 14 年做开源软件以来,接触了众多 Linux 新手用户,这里我为这类用户总结了一些常见的问题排查方法,希望能帮助到大家.如果你已经工作多年,对于下面提到的思路和方法应该非常熟悉,如果对某一条 ...
- idea 中的 jrebel
1.打开idea设置 ,下载 jrebel 2搜索下载jrebel 3.重启之后,在右下角有个弹窗,这时候选择enable,然后右边的侧边栏工具会弹出一个界面,总共应该有4步,第一步是展开的,点击蓝色 ...
- 项目管理--PMBOK 读书笔记(5)【项目范围管理】
知识点: 1.范围管理计划与需求管理计划: 需求大于范围 2.项目管理的成果线: 3.收集需求的跟踪: 需求跟踪矩阵(RTM):溯源.商业价值.监控过程输出 4.项目范围说 ...
- python生成随机四位数和AttributeError: module 'random' has no attribute 'sample'
python生成随机四位数和AttributeError: module 'random' has no attribute 'sample' ## AttributeError: module 'r ...
- 汽车生产车间PMC组态画面应该怎么设计
通常我们所说的汽车制造四大工艺指的是:冲压.焊装.涂装.总装.一般来说,在汽车制造工厂,这四大工艺分别对应四大车间.本文结合一些实际应用案例,向大家展示一下 TopStack 在汽车制造业各工艺车间中 ...
- Stable Diffusion 生成个性图片指南
在当今人工智能领域,midjourney无疑是生成图片的王者,但是苦于付费才能使用,今天我就给大家分享一下midjourney平替stable diffusion,实现本地生成不逊色于midjourn ...