请注意我们是怎么使用数据表的值来绘制选择器到屏幕上的。这个选择器图像将会上下移动以高亮显示被选择的菜单项。要确保在打印文字之前绘制,否则图像将覆盖文字。
打印的两行字则是我们给玩家的选项。要么以黑色屏幕开始游戏,要么是蓝色的屏幕。
在函数的下一部分将检测按键是否按下。先做上键的部分吧。
代码:
if pad:up() and oldpad:up() ~= pad:up() then
selector.y = 77
startcolor = black
local sound = menusound
voice = sound:play()
end
第一行是说如果上键被按下并且不是最后被按下的按钮则.....
第二行将 selector 的 y 值设置为 77。这是为了在文本周围贴上图像以便看起来像是被选择的。
然后设置 startcolor 为 black。
接着使用我之前建议的方法播放 menusound 这个 wav 文件。
现在处理下键。代码与上面很相似,除了图像向下一点,颜色改为蓝色以外。代码如下:
代码:
if pad:down() and oldpad:down() ~= pad:down() then
selector.y = 97
startcolor = blue
local sound = menusound
voice = sound:play()
end
现在来处理 X 按钮。
代码:
if pad:cross() and oldpad:cross() ~= pad:cross() then
gamestate = "game"
counter = counter + 1
file = io.open("counter.txt","w")
file:write(counter)
file:close()
end
end
此处我们将 gamestate 设为“game”以便菜单的代码不再执行(在我们编写了后面的代码之后)。我们以 1 为基数递增 counter 变量。然后打开 txt 文件,写入 counter 的新值,替换文件里的旧值。不要忘了关闭文件。
注意,多出来的那个 end 是用来终结函数的。这个函数已完成了!
我们下一个函数将执行离开菜单后的游戏代码。这个函数相当小巧简单,全部代码如下:
代码:
function playGame()
screen:clear(startcolor)
pad = Controls.read()
screen:print(100,100,"This program has been executed " .. counter .. " times.",white)
screen:print(100,110,"Press Start to exit to Menu",white)
if pad:start() then
gamestate = "menu"
local sound = goodbye
voice = sound:play()
end
end
在此函数中,请注意我们使用了在菜单中通过 startcolor 变量选择的颜色清屏。打印了两个消息,检查了 start 按键的按下。按下 start 键将把 gamestate 设回 menu 并播放一个 wav 文件。
接下来开始我们的程序主循环。由于使用了函数,此处很简短。在循环中我们将检查游戏的状态并执行该状态的函数。代码如下!