股票经纪小游戏开发:表单重开后股价重复随机化问题求助
问题核心原因
- 当前
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
相关产品推荐
相关产品推荐

