3.1. 编程实现
这个游戏比较简单,没有设计游戏的欢迎画面和结束画面等,游戏一开始就是游戏进行画面。同时,游戏也没有胜负之分,不需要设计得分、生命机制等。接下来,将按照编程思路中的介绍,分3个步 编写程序和进行测试。
在本地磁盘新建“fkmt”(疯狂摩托拼音首字母)目录,根据GameZero的规则,创建相关资源的子目录,并将字体、图像和音频文件放入对应的目录。
启动VSCode,打开fkmt目录,新建version1.jl文件,开始编写代码。
1. 准备工作
在这个步骤中 ,主要是进行编写游戏控制逻辑前的准备工作,即游戏配置游戏中使用的图像和声音资源,设置游戏窗口,创建角色和文本标签,以及创建摩托车模拟动画。
(1) 配置图像和声音资源
#配置资源 bg_img = "沙漠.png" box_img = "box.png" motor_sound = "motor.wav" alert_sound = "alter.mp3"
(2) 配置游戏窗口
#创建窗口 # Height of the game window HEIGHT = 295 # Width of the game window WIDTH = 600 # Background color of the game window BACKGROUND = "沙漠.png"
(3) 创建5个全局变量,分别用于记录摩托车的左边坐标、底部坐标、行驶速度和行驶里程,以及用于模拟动画的图像索引值。
#全局变量 motor_left= 0 motor_bottom = 40 motor_speed = 0 mileages = 0 index = 1
(4) 创建角色和文本标签
#创建角色 motor=Actor("motor-1.png") motor.pos=(50,193) box =Actor(box_img, pos=(500,226)) bgA=Actor(bg_img,pos=(0,0)) bgB=Actor(bg_img,pos=(0,0)) #文本标签 speed_label = TextActor("Speed: 0","moonhouse";pos=(10,15)) mileages_label = TextActor("Mileages: 0","moonhouse";pos=(10,35))
对上面代码的说明如下。
① 创建两个角色摩托车motor和大箱子box。其中,摩托车角色默认显示第一张图片。
② 创建两个文本标签speed_label和mileages_label,分别用于显示摩托车的速度和里程。
③ 创建两个角色bgA和bgB,用于实现背景的横屏滚动。
(5) 在窗口的draw()方法中绘制游戏画面。
1 function draw(g::Game) 2 #绘制游戏画面 3 global motor_left,motor_bottom 4 clear() 5 draw(bgA) 6 draw(bgB) 7 if motor.bottom < box.bottom 8 draw(motor) 9 draw(box) 10 else 11 draw(box) 12 draw(motor) 13 end 14 draw(speed_label) 15 draw(mileages_label) 16 end
为了增强真实感,当摩托车和箱子的位置重叠时,根据它们的bottom坐标大小决定摩托车和箱子绘制的先后顺序,从而实现遮挡效果。
(6) 实现屏幕滚动
function update(g, dt) bgA.pos=(0 - floor(Int,motor_left) % 600, 0) bgB.pos=(600 - floor(Int,motor_left) % 600, 0) end
屏幕背景图像的滚动速度与摩托车的行驶速度相关。当摩托车速度改变时,根据摩托车left坐标计算出角色bgA和bgB在窗口中的起始位置,在窗口的update()方法中控制制背景图像。请查看编程思路中对屏幕滚动技术的介绍。
代码中floor是舍入函数,用于取整。在python中取整函数是int(),而在julia中Int()是类型转换函数(如将String类型转换为Int类型)。
下表列出了 Julia 支持的舍入函数:
函数 |
描述 |
返回类型 |
实例 |
round(x) |
x 舍到最接近的整数 |
typeof(x) |
julia> round(3.8) |
round(T, x) |
x 舍到最接近的整数 |
T |
julia> round(Int, 3.8) |
floor(x) |
x 向 -Inf 舍入 |
typeof(x) |
julia> floor(3.8) |
floor(T, x) |
x 向 -Inf 舍入 |
T |
julia> floor(Int, 3.8) |
ceil(x) |
x 向 +Inf 方向取整 |
typeof(x) |
julia> ceil(3.8) |
ceil(T, x) |
x 向 +Inf 方向取整 |
T |
julia> ceil(Int, 3.8) |
trunc(x) |
x 向 0 取整 |
typeof(x) |
julia> trunc(3.8) |
trunc(T, x) |
x 向 0 取整 |
T |
julia> trunc(Int, 3.8) |
(7) 创建摩托车模拟动画
新增一个计划任务:schedule_interval(motor_animation,1/16),每隔1/16秒,调用函数motor_animation(),实现图像的轮换。motor_animation函数的代码如下:
1 function motor_animation() 2 global index 3 #println(k) 4 if index < 7 5 motor.image = "motor-" * string(index) * ".png" 6 index += 1 7 8 else 9 index=1 10 end 11 end
至此,第1个步骤的工作就完成了。运行程序,就可以看到窗口中绘制出的沙漠背景图,摩托车的行驶速度和里程显示为0,麾托车和箱子出现在沙漠公路上。
源码下载:https://files.cnblogs.com/files/zjzkiss/fkmt_v1.rar
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/278843.html