Hey ich bin noch Anfänger was das Programmieren und VB allgemein angeht. Ich habe schon ein paar kleinere Übungen gemacht sowas wie einen Taschenrechner zu schreiben etc, war auch kein Problem. Jetzt wollte ich etwas eigenes versuchen und zwar wollte ich ein Text basiertes RPG schreiben. Ich weiß auch nicht warum es dabei auftritt davor als ich etwas deklariert habe, hat es einwandfrei funktioniert sprich: Die Hp, Mp und das Geld.
Ich habe versucht ein "Spielerlevel" und Exp einzufügen. Von der Umsetzung her klappt das leider nur nicht weil ich mich nicht sehr gut auskenne und ich kriege eine Format Exception wenn ich das "Level" auf einem Label anzeigen lassen möchte.
Ich lasse einfach mal die ganzen Codes da damit jemand drübergucken kann und vielleicht einen Fehler (oder auch hunderte) entdeckt.
Module Hero
Public h_HitPoints As Integer = 250
Public h_ManaPoints As Integer = 70
Public h_Exp As Integer
Public h_Level As Integer
''''''Abfrage für Level Up'''''''
Public Level_2 As Boolean = False
Public Level_3 As Boolean = False
Public Level_4 As Boolean = False
Public Level_5 As Boolean = False
Public Level_6 As Boolean = False
Public Level_7 As Boolean = False
Public Level_8 As Boolean = False
Public Level_9 As Boolean = False
Public Level_10 As Boolean = False
Public Level_11 As Boolean = False
''''''''''''''''''''''''''''''''''
Public abfrageCheck As Boolean = False
Public pGold As New Random
Public pGold_int As Integer = Form1.Label3.Text
''''''Hero Attack'''''''
Public Sub h_Hit_calc()
If abfrageCheck = False Then
mon_HitPoints = mon_HitPoints - 27
Form3.Label2.Text = mon_HitPoints
If mon_HitPoints < 1 Then
mon_HitPoints = 0
Form3.Label2.Text = mon_HitPoints
End If
End If
End Sub
''''''Hero HP regenaration'''''''
Public Sub hero_HP_regen()
If mon_HitPoints < 30 Then
h_HitPoints += 25
ElseIf h_HitPoints < 30 Then
h_HitPoints += 65
End If
End Sub
''''''Hero MP regen'''''''
Public Sub hero_MP_regen()
If mon_HitPoints = 100 Then
h_ManaPoints = 70
End If
End Sub
''''''Hero Death -> Lose all Gold'''''''
Public Sub h_death()
If h_HitPoints < 1 Then
pGold_int = 0
End If
End Sub
''''''Hero Skill (Heal)'''''''
Public Sub Skill_Heal()
If h_HitPoints < 250 Then
h_HitPoints += 30
h_ManaPoints -= 35
ElseIf h_HitPoints > 249 Then
h_HitPoints = 250
h_ManaPoints -= 1
If h_ManaPoints < 1 Then
h_ManaPoints = 0
End If
End If
End Sub
''''''Hero EXP'''''''
Public Sub Experience()
If mon_HitPoints < 1 Then
h_Exp = +5
End If
End Sub
''''''Hero Level'''''''
'Public Sub LV_1()
' h_Level = "1"
' If h_Exp = 25 Then
' Level_2 = True
' If Level_2 = True Then
' h_Level = "2"
' End If
' End If
'End Sub
''''''Hero Level'''''''
Public Sub LV_2()
If h_Exp = 50 Then
End If
End Sub '''''''Hero Level'''''''
Public Sub LV_3()
If h_Exp = 75 Then
End If
End Sub '''''''Hero Level'''''''
Public Sub LV_4()
If h_Exp = 100 Then
End If
End Sub '''''''Hero Level'''''''
Public Sub LV_5()
If h_Exp = 150 Then
End If
End Sub '''''''Hero Level'''''''
Public Sub LV_6()
If h_Exp = 200 Then
End If
End Sub '''''''Hero Level'''''''
Public Sub LV_7()
If h_Exp = 250 Then
End If
End Sub '''''''Hero Level'''''''
Public Sub LV_8()
If h_Exp = 300 Then
End If
End Sub
''''''Hero Level'''''''
Public Sub LV_9()
If h_Exp = 350 Then
End If
End Sub
''''''Hero Level'''''''
Public Sub LV_10()
If h_Exp = 400 Then
End If
End Sub
End Module
Module Monster
Public mon_HitPoints As Integer = 100
'''''''Monster Attack'''''''
Public Sub mon_Hit_calc()
If abfrageCheck = False Then
h_HitPoints = h_HitPoints - 15
Form3.Label1.Text = h_HitPoints
If h_HitPoints < 1 Then
h_HitPoints = 0
Form3.Label1.Text = h_HitPoints
End If
End If
End Sub
'''''''Monster Dead -> Next Monster'''''''
Public Sub mon_refsresh()
If mon_HitPoints = 0 Then
Form3.Close()
mon_HitPoints = 100
End If
End Sub
End Module
Imports System.ComponentModel
Public Class Form1
'''''''Save Text to Textbox/Label '''''''
Private Sub ReadFromSettings()
Label3.Text = My.Settings.pGold_Setting
End Sub
Private Sub SaveTexttoSettings()
My.Settings.pGold_Setting = Label3.Text
My.Settings.Save()
My.Settings.Reload()
End Sub
'''''''Start/Welcome Window'''''''
Public Sub Form1_Load(ByVal sender As Object, e As EventArgs) Handles MyBase.Load
Label1.Text = "Obviously Not Flyff"
ReadFromSettings()
Dim LvUp_1 As New LV1_Exp
LvUp_1.LV_1_Experience()
h_LV_Text_Main.Text = "Level:"
h_LV_Num_Main.Text = Hero.h_Level <- In der Zeile taucht der Fehler auf
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form3.Show()
Hide()
End Sub
Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
SaveTexttoSettings()
End Sub
End Class
'''''''Hero Level'''''''
Public Class LV1_Exp
Dim h_Exp As Integer
Dim h_Level As Integer
Public Sub LV_1_Experience()
If h_Exp = 25 Then
Level_2 = True
If Level_2 = True Then
h_Level = 2
End If
End If
End Sub
End Class
Imports System.ComponentModel
Public Class Form3
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Label1.ForeColor = Color.Green
Label1.Text = h_HitPoints
Label2.ForeColor = Color.Red
Label2.Text = mon_HitPoints
Attack_btn.Text = "Normal Attack"
Heal_btn.Text = "Heal Skill"
Manapoints_lbl.ForeColor = Color.Blue
Manapoints_lbl.Text = h_ManaPoints
MP_Text_lbl.Text = "MP"
If h_ManaPoints < 1 Then
Heal_btn.Enabled = False
End If
End Sub
Private Sub Attack_btn_Click(sender As Object, e As EventArgs) Handles Attack_btn.Click
If Attack_btn.Enabled = True Then
h_Hit_calc()
Attack_btn.Enabled = False
mon_Hit_calc()
Attack_btn.Enabled = True
If mon_HitPoints = 0 Then
Attack_btn.Enabled = False
''''''START Gold Drop''''''
Dim mon_DropG As New Gold_drop
mon_DropG.mon_DropGold()
''''''END Gold Drop''''''
'''''''''START Gold Drop Message'''''''
Dim pGold_msg As New Gold_drop_msg
pGold_msg.Gold_drop()
''''''END Gold Drop Message'''''''
mon_refsresh()
hero_HP_regen()
hero_MP_regen()
h_death()
End If
End If
End Sub
Private Sub Form3_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
Form1.Show()
End Sub
Public Sub Heal_btn_Click(sender As Object, e As EventArgs) Handles Heal_btn.Click
Skill_Heal()
Label1.Text = h_HitPoints
Manapoints_lbl.Text = h_ManaPoints
If h_ManaPoints < 1 Then
Heal_btn.Enabled = False
End If
End Sub
End Class
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''MISC''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''Gold Drop Message'''''''
Public Class Gold_drop_msg
Dim pGold_msg
Public Sub Gold_drop()
If mon_HitPoints = 0 Then
MsgBox("You have " & pGold_int & " Penya now!")
End If
End Sub
End Class
''''''Gold Drop''''''
Public Class Gold_drop
Public Sub mon_DropGold()
If mon_HitPoints = 0 Then
pGold_int += pGold.Next(5, 20)
Form1.Label3.Text = pGold_int
End If
End Sub
End Class
Wäre sehr nett wenn es mir jemand erklären könnte ich bin nämlich am verzweifeln und finde im Internet keine Beispiele die so ungefähr wie mein Code ist um es irgendwie vergleichen zu können.
Erstmal danke für die schnelle Antwort, aber es funktioniert nicht, es kommt der selbe Fehler.
Und ich möchte es eigentlich als Integer rausgeben, weil es eine Zahl sein soll. Die Zeile darüber ist schon ein String welches "Level" sagt und die Zeile drunter soll Integer sein welches das Level als Zahl anzeigt.
Zu dem Fehler kann ich leider nichts hilfreiches sagen, auch weil ich nie mit VB gearbeitet habe.
Aber vielleicht hilft es, wenn du uns den ganzen Fehler zeigst.
Quote:
Originally Posted by kuibi1234
Und ich möchte es eigentlich als Integer rausgeben, weil es eine Zahl sein soll. Die Zeile darüber ist schon ein String welches "Level" sagt und die Zeile drunter soll Integer sein welches das Level als Zahl anzeigt.
Ein Label kann nur Text, also einen String, darstellen. Du musst dein Level, den Integer, also in einen String umwandeln, damit das Label die Zahl auch anzeigen kann. Wenn du aus dem Integer einen String machst, sieht der Benutzer trotzdem die Zahl, genau so wie du dir das vorstellst.
Was ich jetzt allerdings nicht weiß ist, ob der VB-Compiler die Umwandlung in einen String für dich von alleine übernimmt. Wenn du noch an anderen Stellen einen Integer in den Text von einem Label packst und das funktioniert, dann wird es nicht daran liegen.
Fehler 1 steht da doch xD ungültige Konvertierung von Zeichenfolge nach integer. Aus "33" kannst du einen integer 33 machen. Aber du gibst ihm wohl etwas falsches. Was soll der computer machen wenn du ihm zb "a" gibst und sagst mach daraus eine Zahl? Fehler 2 xxxxxx. Text erwartet einen string. Also muss h_Level zu einem string konvertiert werden.
Fehler 1 steht da doch xD ungültige Konvertierung von Zeichenfolge nach integer. Aus "33" kannst du einen integer 33 machen. Aber du gibst ihm wohl etwas falsches. Was soll der computer machen wenn du ihm zb "a" gibst und sagst mach daraus eine Zahl? Fehler 2 xxxxxx. Text erwartet einen string. Also muss h_Level zu einem string konvertiert werden.
Und wie mache ich das? Erklärungen wäre vielleicht von Vorteil, wie gesagt bin Anfänger und weiß noch so gut wie nichts. h_Level ist schon in nem Module als Integer deklariert. Und dann soll ich es zu String umkonventieren um eine Zahl rauszugeben?
Das Ding ist, ich weiß nicht warum es aufeinmal von mir eine Konventierung verlangt. Es hat zuvor auch ganz normal funktioniert wenn ich etwas in einem Modul deklariert habe und das deklarierte dann in einer Klasse genutzt habe.
Aaalso 2+2 ist 4 aber "2"+"2" ist "22" (er hängt strings einfach aneinander) und du kannst mit strings halt deswegen keine mathematischen Operationen durchführen."a" + "a" ist ja auch "aa" und nicht "b". Du musst nur an der Stelle wo du es dem. Text zuweist konvertieren. Dadurch ändert sich der wert von h_level nicht. Sondern er nimmt den aktuellen wert ruft die Methode zum konvertieren auf und die Methode gibt einen string zurück und diesen darfst du dann auch dem text zuweisen. Was man sieht sind immer nur strings. Wenn du ein input schreibst und dann 3 eintippen und den wert des input ausliest steht da "3" drinnen und nicht 3 das ist wie eben erklärt ein kleiner aber feiner unterschied.
Aaalso 2+2 ist 4 aber "2"+"2" ist "22" (er hängt strings einfach aneinander) und du kannst mit strings halt deswegen keine mathematischen Operationen durchführen."a" + "a" ist ja auch "aa" und nicht "b". Du musst nur an der Stelle wo du es dem. Text zuweist konvertieren. Dadurch ändert sich der wert von h_level nicht. Sondern er nimmt den aktuellen wert ruft die Methode zum konvertieren auf und die Methode gibt einen string zurück und diesen darfst du dann auch dem text zuweisen. Was man sieht sind immer nur strings. Wenn du ein input schreibst und dann 3 eintippen und den wert des input ausliest steht da "3" drinnen und nicht 3 das ist wie eben erklärt ein kleiner aber feiner unterschied.
Ja, nur Problem bei der ganzen Sache ist: es zeigt mir immer noch den selben Fehler an selbst wenn ich es konventiere oder sagen wir mal ganz einfach,
ich mache jetzt bei der deklaration statt Integer, String bei h_Level. Es kommt immer noch der selbe konventierungsfehler. Das ist der Grund warum ich es nicht verstehe. Schau dir bitte den Code genauer an, falls du es nicht schon getan hast. Entweder ist da etwas allgemein falsch und ich komme nicht dahinter oder es ist was im Code falsch was durch mich verursacht wurde.
Hab jetzt nur mal schnell drüber geschaut, im Startpost schreibst du
PHP Code:
Public h_Level As Integer
Das heißt, h_level ist erst einmal nicht initialisiert. Bei Visual Basic weiß ich ehrlich gesagt nicht wie es sich dann verhält, ob es dann bei Integer mit dem Wert 0 initialisiert wird z. B. oder nicht.
Ansonsten ist das ein wenig unübersichtlich mit den ganzen Spoilern, kannst du vielleicht den Code als ganzes noch einmal posten inkl. der Zeile die den Fehler macht? Dann kann man es vllt besser nachvollziehen.
In deinen ganz am Anfang geposteten Codes zu den Forms, wo werden da denn die Variablen für h_Level etc. deklariert? Du machst
PHP Code:
Hero.h_Level
aber man sieht nirgendswo, wo denn Hero intialisiert deklariert oder würde, du brauchst ja erst eine Instanz davon.
Hab jetzt nur mal schnell drüber geschaut, im Startpost schreibst du
PHP Code:
Public h_Level As Integer
Das heißt, h_level ist erst einmal nicht initialisiert. Bei Visual Basic weiß ich ehrlich gesagt nicht wie es sich dann verhält, ob es dann bei Integer mit dem Wert 0 initialisiert wird z. B. oder nicht.
Ansonsten ist das ein wenig unübersichtlich mit den ganzen Spoilern, kannst du vielleicht den Code als ganzes noch einmal posten inkl. der Zeile die den Fehler macht? Dann kann man es vllt besser nachvollziehen.
In deinen ganz am Anfang geposteten Codes zu den Forms, wo werden da denn die Variablen für h_Level etc. deklariert? Du machst
PHP Code:
Hero.h_Level
aber man sieht nirgendswo, wo denn Hero intialisiert deklariert oder würde, du brauchst ja erst eine Instanz davon.
Also, der ganze code steht da oben schon. das Hero.h_Level ist in dem Hero Modul deklariert. Das "Hero" ist das Modul wo die h_Level Variable rausgenommen wird.
Das mit
Code:
Public h_Level As Integer = 0
Hab ich zb schon ausprobiert, ich habe es einfach nur leer gelassen als ich es kopiert habe.
Fakt ist, egal was ich mache er zeigt mir ständig diesen Konventierungsfehler an ob ich jetzt h_Level initialisiere, ihn in einen String umwandle oder alles aufeinmal, nichts funktioniert. Ich bin schon echt am verzweifeln xD
Mir wird jetzt zwar von jemandem geholfen, ich weiß aber nicht ob das etwas bringen wird oder nicht.
Trotzdem danke für deine Mühen.
Das Problem liegt nicht in der Zuweisung. Die Fehlermeldung bezieht sich nämlich nicht von Int -> String, sondern auf String -> Int. Außerdem soll der Fehler beim Initialisieren des Hero Moduls (was auch immer ein Modul ist) auftreten und nicht beim Zuweisen des Wertes.
Das Problem liegt nicht in der Zuweisung. Die Fehlermeldung bezieht sich nämlich nicht von Int -> String, sondern auf String -> Int. Außerdem soll der Fehler beim Initialisieren des Hero Moduls (was auch immer ein Modul ist) auftreten und nicht beim Zuweisen des Wertes.
Dadurch habe ich es auch gefunden:
Code:
Public pGold_int As Integer = Form1.Label3.Text
> (was auch immer ein Modul ist)
Google sagt das ist wie ne Klasse die man nicht instantiieren kann, also scheinbar ne In Built Singleton Type Artiges Konstrukt.
Das würde aber nicht zu dem Screenshot hier passen:
Quote:
Originally Posted by kuibi1234
Fehler 2 von 2:
Im Anhang mal ein kleines Beispielprojekt wo ich mit 3 Methoden den Wert auch auf das Label zuweise ohne den Integer im Modul zu initialisieren, die klappen alle drei bei mir fehlerfrei ;o
PHP Code:
Module Hero
Public h_HitPoints As Integer = 250
Public h_ManaPoints As Integer = 70
Public h_Level As Integer
End Module
PHP Code:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Label1.Text = h_Level
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Label2.Text = Convert.ToString(h_Level)
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
Label3.Text = h_Level.ToString()
End Sub
End Class