Tworzę małą giełdowy brokerską grę jako uboczny projektu i zderzył się z problemem

0

Pytanie

Obecnie gra рандомизирует nowe wartości cen akcji za wirtualne dni za każdym razem, gdy form5 zamyka i otwiera się na nowo. Mój cel-uzyskać randomizowane wartość w dniach: 2, 8, 5, 3, 13, 24, 29, w tej chwili gra tworzy określoną wartość dla pierwszego dnia, ale kiedy ten dzień gry kończy się i rozpoczyna się drugi dzień, ceny pierwszego i drugiego dnia рандомизируются. Gdy ta forma zamyka i ponownie otwiera się, ceny ponownie рандомизируются na te 2 dni.

Oto podprogram dla formy 2: w tej formie są wyświetlane dostępne marki akcji, w których użytkownik może "zainwestować", to pokazuje podprogramu, gdy użytkownik kliknie na akcje tesla:

Public Shared Sub tesla(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Teslal.Click


    stockbrand.tesla()
    Teslastock.Show()
End Sub

Oto podprogram dla stockbrand.tesla:

Shared Sub tesla()
    stockrand(2, 8, 5, 3, 13, 24, 29)
End Sub

a następnie stockrand jest odpowiedzialny za generowanie wartości losowych w następujące dni:

 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)
    For i As Integer = 1 To Form2.DAYno.Text

        If i = a Then
            Teslastock.at1986(a.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)

        ElseIf i = b Then
            Teslastock.at1986(i.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)

        ElseIf i = c Then
            Teslastock.at1986(i.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)

        ElseIf i = d Then
            Teslastock.at1986(i.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)

        ElseIf i = e Then
            Teslastock.at1986(i.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)

        ElseIf i = f Then
            Teslastock.at1986(i.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)

        ElseIf i = g Then
            Teslastock.at1986(i.ToString & "/8/86 1986", CInt(Int((11 * Rnd()) + 1)) * 2000)
        Else
            Teslastock.at1986(i.ToString & "/8/86 1986", Math.Sin(i) * 2000)
        End If
    Next
End Function

wykres utworzony funkcją, jest podobny do wykresu sin z wyjątkami w określone dni, a ujemne wartości cen są mnożone przez -1, aby uzyskać rozsądną cenę

Тесласток.pokaż pokazuje kształt, w którym znajduje się wykres

vb.net
2021-11-23 21:56:57
1

Najlepsza odpowiedź

0

Niektóre z twoich problemów są spowodowane tym, że nie ma ścisłej opcje. On musi być włączony. Właściwości projektu -> zakładka "Kompilacja". Również dla przyszłych projektów Narzędzia -> Opcje ->> Projekty i rozwiązania ->>> VB domyślnie

Funkcje w vb.net potrzebna Type i Return oświadczenie. Nic nie wraca, więc dlaczego używasz Function? Użyj Sub.

Nie wiem, co DAYno w formie 2, ale gdy widzę Text właściwość ta oznacza, że String do mnie. U ciebie nie może być String w To oświadczenie o For pętla, w taki sposób, CInt()

Zadeklaruj egzemplarz Random zajęcia w ClassPoziom. Musimy tylko nową liczbę losową (a nie nowy egzemplarz Random klasa) raz na iterację. O ile mogłem zrozumieć, to byłoby to liczba od 1 do 12. Ja ledwo pamiętam Rnd(). W Next sposób przeprowadzenia Random klasa umożliwia Integer w tym pierwszy argument i mniej niż drugi.

Wszystkie te If...ElseIfs mają prawie identyczny kod. Próbowałem sobie z tym poradzić za pomocą Select Case. W pierwszych 2 przypadkach prześlij Integer Dla at1986 ale trzeci wysyła Doublew ten sposób 2 metody w Teslastock klasa z różnymi sygnaturami.

Być może twoje problemy znikną z tymi poprawkami.

Private Rand As New Random()

Public Sub 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)
    For i As Integer = 1 To CInt(Form2.DAYno.Text)
        Dim r = Rand.Next(1, 13)
        Select Case i
            Case a
                Teslastock.at1986($"{a}/8/86 1986", r * 2000)
            Case b, c, d, e, f, g
                Teslastock.at1986($"{i}/8/86 1986", r * 2000)
            Case Else
                Teslastock.at1986($"{i}/8/86 1986", Math.Sin(i) * 2000)
        End Select
    Next
End Sub

Public Class Teslastock
    Public Shared Sub at1986(strDate As String, aNumber As Integer)
        'Some code
    End Sub

    Public Shared Sub at1986(strDate As String, aNumber As Double)
        'Some code
    End Sub
End Class
2021-11-24 03:29:56

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................