整活:狐狸彩票

这节整活来实现一个买彩票的小游戏,简单概括如下:

  • 刚开始你有 1000 块钱
  • 彩票售价 100 块
  • 彩票下注需要两个数字,这两个数字都是个位数,不能是 0
  • 猜中一个数奖金 300,猜中两个奖金 3000

玩起来大概这样:

狐狸彩票

场景创建

这个界面需要这么几个东西:

  • 标题
  • 两个数字输入框
  • 一个购买按钮
  • 一个显示结果的 label
  • 一个显示钱包的 label

我创建的节点长这样:

node

逻辑分析

我们现在已经知道了游戏的逻辑,但是该如何将其转换成代码呢?

首先我们需要一个变量来保存钱包里的钱,并在按下购买按钮时对其进行判断,如果金钱足够则扣钱并进行买彩票的逻辑,如果金钱不足则显示钱不够。

所以我们可以得到这样一段伪代码:

当按下按钮时:
    if 钱包的钱足够买一张彩票:
        扣钱
        获取输入的两个数字
        随机抽取两个数
        判断随机数和输入的数字是否相等并以此产生奖金
        显示获奖结果
    else:
        显示“你的钱不够了!”

我的脚本编写参考

这里是我编写的代码,可以作为参考,你也可以尝试自己翻译一下上面的伪代码。

脚本放置在最外层的 Panel 节点上,然后绑定按钮的 pressed 信号。

界面布局和组件设置一类的操作我就不再讲解了,大家随意点击自己琢磨即可,没有什么特别难的地方。

代码:

extends Panel

var 钱包 := 1000

func _on_button_pressed():
    if 钱包 >= 100: # 看看有钱吗?
        # 先交钱
        钱包 -= 100
        $Label3.text = "钱包:" + str(钱包)

        # 获取下注的两个数字
        var 下注数a: int = $SpinBox1.value
        var 下注数b: int = $SpinBox2.value

        # 随机产生两个数字
        var 随机数a: int = randi_range(1, 9)
        var 随机数b: int = randi_range(1, 9)

        # 在消息 label 上显示随机产生的两个数,最后的 "\n" 表示换行。
        $Label2.text = str(随机数a) + ", " + str(随机数b) + "\n"

        # 判断两个数字是否赌对了
        var a赌对了: bool = 下注数a == 随机数a
        var b赌对了: bool = 下注数b == 随机数b

        # 根据两个数字的猜测结果加钱
        if a赌对了 and b赌对了:
            $Label2.text += "全猜对了!奖金 3000"
            钱包 += 3000
            $Label3.text = "钱包:" + str(钱包)
        elif a赌对了 or b赌对了:
            $Label2.text += "猜对一个,奖金 300"
            钱包 += 300
            $Label3.text = "钱包:" + str(钱包)
        else:
            $Label2.text += "你一分钱也没赚到"
    else: # 穷了
        $Label2.text = "你已经没钱下注了"

这里唯一一个陌生的东西就是 randi_range 了,它会根据括号里填入的数字生成一个随机整数,包含这两个数以及两数之间的数。

注意不要把钱包变量的定义放在方法里,否则每次点按钮都会创建一个新的钱包变量,逻辑就错了。