• 欢迎光临~

对比python学julia(第三章:游戏编程)--(第三节)疯狂摩托(2)

开发技术 开发技术 2022-08-04 次浏览

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)
4.0

round(T, x)

x 舍到最接近的整数

T

julia> round(Int, 3.8)
4

floor(x)

x 向 -Inf 舍入

typeof(x)

julia> floor(3.8)
3.0

floor(T, x)

x 向 -Inf 舍入

T

julia> floor(Int, 3.8)
3

ceil(x)

x 向 +Inf 方向取整

typeof(x)

julia> ceil(3.8)
4.0

ceil(T, x)

x 向 +Inf 方向取整

T

julia> ceil(Int, 3.8)
4

trunc(x)

x 向 0 取整

typeof(x)

julia> trunc(3.8)
3.0

trunc(T, x)

x 向 0 取整

T

julia> trunc(Int, 3.8)
3

  

  (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

喜欢 (0)