Just nu i M3-nätverket
Gå till innehåll

En funktion som lägger till pengar till spelet fungerar inte korrekt


FarFlungMilk

Rekommendera Poster

Hej! Jag håller på att programmera ett program/spel i Visual Basic 2010, tanken i spelet är att man ska utforska det och låsa upp nya prestationer och funktioner. Jag har gjort en funktion som skriver till en fil hur mycket pengar man har på spelet, filen heter "money" och med katalogen och namnet med så heter den "SpringOS\data\money". Och när användaren får en prestation t ex när man stänger ett program i spelet för första gången, så får man en prestation och 10 mynt i spelet och då kör den denna koden:

 

                    Label3.Text = ""
                    Label4.Text = ""
                    Label5.Text = ""
                    Label6.Text = ""
                    Label7.Text = ""
                    Label8.Text = ""
                    Label9.Text = ""
                    Label10.Text = ""
                    Label11.Text = ""
                    Label3.Visible = False
                    Label4.Visible = False
                    Label5.Visible = False
                    Label6.Visible = False
                    Label7.Visible = False
                    Label8.Visible = False
                    Label9.Visible = False
                    Label10.Visible = False
                    Label11.Visible = False
                    If My.Computer.FileSystem.FileExists("SpringOS\data\springos_ach_b") Then
                    Else
                        Dim frm5 As New Form5
                        frm5.Label1.Text = "You unlocked a new achievement!"
                        frm5.Label2.Text = "Closing a program"
                        frm5.Show()
                        Dim writer As New IO.StreamWriter("SpringOS\data\springos_ach_b")
                        writer.Write("")
                        writer.Close()
                        If My.Computer.FileSystem.FileExists("SpringOS\data\money") Then
                            Dim reader As New IO.StreamReader("SpringOS\data\money")
                            addmoney = reader.ReadToEnd
                            reader.Close()
                            addmoney = addmoney + 10
                            Dim writer_add_money As New IO.StreamWriter("SpringOS\data\money")
                            writer_add_money.Write(addmoney)
                            writer.Close()
                        End If
                    End If
 
 
Och när användaren skriver "money" så ska den visa hur många mynt man har, och då kör den denna koden:
 
Label3.Text = ""
                    Label4.Text = ""
                    Label5.Text = ""
                    Label6.Text = ""
                    Label7.Text = ""
                    Label8.Text = ""
                    Label9.Text = ""
                    Label10.Text = ""
                    Label11.Text = ""
                    Label3.Visible = True
 
                    If My.Computer.FileSystem.FileExists("SpringOS\data\money") Then
 
                        'This where the first problem happens, it's being used by another process
 
                        Dim reader As New IO.StreamReader("SpringOS\data\money")
                       
                        '-----------------------------
                        money = reader.ReadToEnd
                        reader.Close()
                        Label3.Text = "You have " & money & " coins"
                    Else
                        Dim writer As New IO.StreamWriter("SpringOS\data\money")
                        writer.Write("0")
                        writer.Close()
                        Dim reader As New IO.StreamReader("SpringOS\data\money")
                        money = reader.ReadToEnd
                        reader.Close()
                        Label3.Text = "You have " & money & " coins"
                    End If
 
 
Problemet är att när användaren får en prestation och skriver "money", då kommer det upp en ruta från Visual Basic 2010:
 
"The process cannot access the file 'C:\Users\Viktor\documents\visual studio 2010\Projects\SpringOS\SpringOS\bin\Debug\SpringOS\data\money' because it is being used by another process."
 
 
Det finns ett problem till. Ibland när man får en prestation, så kommer det upp en ruta från Visual Basic 2010 och där står det:
 
"Conversion from string "" to type 'Double' is not valid." Det händer med "addmoney" (Public addmoney As String = 0). addmoney används för att lägga till mynt när man har klarat en prestation. Den läser av vad det står i money filen nu till "addmoney", sen så höjer den siffrorna med 10 och skriver ner det i filen "money" igen. Och när man startar spelet för första gången har man 0 mynt, och efter man har gjort en prestation så står det inget i filen (mycket konstigt).
Jag hittar inga problem, varje "reader" och "writer" (Dim reader As New StreamReader("katalog + filnamn")) och (Dim writer As New StreamWriter("katalog + filnamn")) har haft reader.Close() eller writer.Close() . Spelet/programmet har 7 forms och över 1000 rader kod. Så kan nån hjälpa mig med detta problem?
 
 
Den fullständiga koden får inte plats i Eforum, ni kan läsa den här på Google Drive: https://docs.google.com/document/d/1eQdvEuyebUqCzAvcff7gBJ3XPT60TkmWmTs-AZEH-80

 

Länk till kommentar
Dela på andra webbplatser

Jag hittar inte var du gör fel men kan komma med några råd för att du ska lyckas hitta det.

 

Det är ganska mycket upprepande av kod, dvs samma sak görs i princip med samma kodrader på flera platser i koden.

Dvs det jag föreslår är att du bryter ut kod, exempelvis den som rensar alla labels till att börja med.

 

Sekundärt, bryt ut den kod som läser/skriver till fil. Typ en funktion som hämtar värden, en funktion som skriver värden. I sig behöver dessa inte vara kopplade till en viss fil, de kan vara gränssnittet mot en variabel i minnet. Dvs själva koden, ditt huvudprogram ska bara förvänta sig ett visst svar, inte veta exakt hur detta tas fram.

 

Man brukar parat om atomära funktioner, funktioner som gör en sak och enbart denna men exakt det den ska.

 

Skadar inte förövrigt att ge labels lite bättre namn, namn som återspeglar deras funktion/placering i grafiska miljön.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...