You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

股票经纪小游戏开发:表单重开后股价重复随机化问题求助

问题核心原因
  • 当前stockrand函数每次被调用时,都会从第1天到当前游戏日全量重新计算所有日期的股价,历史日期的随机值每次都会重新生成,没有做持久化存储
  • 每次打开特斯拉股票表单都会触发全量重算,自然导致历史股价反复变化
修改方案

我们只需要新增一个共享存储结构保存已生成的历史股价,生成前先判断对应日期的股价是否已经存在,存在就直接复用,不存在才计算新值即可。

步骤1:新增共享股价存储变量

在stockbrand类中新增共享的股价存储字典:

' 键为游戏天数,值为对应日期的特斯拉股价
Public Shared TeslaStockHistory As New Dictionary(Of Integer, Double)

步骤2:修改stockrand函数逻辑

修改后的stockrand函数代码如下:

Public Shared Function stockrand(ByVal a As Integer, ByVal b As Integer, ByVal c As Integer, ByVal d As Integer, ByVal e As Integer, ByVal f As Integer, ByVal g As Integer)
    ' 把指定随机日期存到数组,方便判断
    Dim randomDays As New List(Of Integer) From {a, b, c, d, e, f, g}
    Dim currentDay As Integer = CInt(Form2.DAYno.Text)
    
    For i As Integer = 1 To currentDay
        Dim price As Double
        ' 该天股价已生成过就直接复用
        If TeslaStockHistory.ContainsKey(i) Then
            price = TeslaStockHistory(i)
        Else
            ' 未生成过才计算新价格
            If randomDays.Contains(i) Then
                price = CInt(Int((11 * Rnd()) + 1)) * 2000
            Else
                price = Math.Abs(Math.Sin(i) * 2000)
            End If
            ' 计算完存入字典,后续不再重新生成
            TeslaStockHistory.Add(i, price)
        End If
        ' 渲染到股价图表
        Teslastock.at1986(i.ToString & "/8/86 1986", price)
    Next
End Function

步骤3:可选补充:游戏重置逻辑

如果你的游戏支持重新开档,记得在开新游戏的时候清空历史存储:

' 新游戏开始时调用
TeslaStockHistory.Clear()
效果说明

修改后只有第一次进入对应日期的时候才会生成股价,后续不管是切换日期还是关闭重开股票表单,历史日期的股价都会复用之前生成好的值,不会再出现随机变化的问题。

内容的提问来源于stack exchange,提问作者kylegreene234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:36:07