[VisualBasic] Funktionsaufruf fehlerhaft?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Tilux, 1. August 2007 .

  1. 1. August 2007
    Funktionsaufruf fehlerhaft?

    Code:
    Public Class Form1
     Dim spieler As Integer 'Gibt an wieviele Spieler teilnehmen'
     Dim comp As Boolean 'Sagt an ob Computerspieler aktiviert ist'
     Dim compskill As Boolean ' Schwierigkeitsgrad des Computers'
     Dim compwahl As Integer 'Die Wahl zwischen Stein,Schere,Papier fuer Computergegner'
     Dim spieler1wahl As Integer 'Die Wahl zwischen Stein,Schere,Papier fuer Spieler 1 1=Stein 2=Schere 3=Papier'
     Dim spieler2wahl As Integer
     Dim spieler3wahl As Integer
     Dim spieler4wahl As Integer
    
     Public Function computerki(ByVal compwahl As Integer) As Integer
     If comp = True Then 'Computerspieler aktiv?'
     If compskill = False Then 'Falls Computerspieler besiegbar ist'
     compwahl = Int(3 * Rnd() + 1) 'Zufallszahl zwischen 1 und 3 wird generiert'
     End If
     If compskill = True Then 'Wenn Computerspieler unbesiegbar ist'
     If spieler1wahl = 1 Then
     compwahl = 3
     End If
     If spieler1wahl = 2 Then
     compwahl = 1
     End If
     If spieler1wahl = 3 Then
     compwahl = 2
     End If
     End If
     End If
     End Function
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     spieler1wahl = 1
     compwahl = computerki(compwahl)
    
     End Sub
    
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
     spieler1wahl = 2
     compwahl = computerki(compwahl)
     End Sub
    
     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     spieler1wahl = 3
     compwahl = computerki(compwahl)
     End Sub
    
     Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
     MsgBox("Anzahl Spieler" & spieler)
     MsgBox("Computerspieler aktiviert?" & comp)
     MsgBox("Schwierigkeisgrad?" & compskill)
     End Sub
    
     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
     spieler = 1
     comp = True
     Label1.Text = "Ein Spieler gegen Computerspieler. Computerspieler aktiviert"
    
     End Sub
    
     Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
     spieler = 2
     comp = False
     Label1.Text = "Zwei Spieler"
     End Sub
    
     Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click
     spieler = 3
     comp = False
     Label1.Text = "Drei Spieler"
     End Sub
    
    
    
     Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
     If compskill = True Then 'Button zum einstellen ob Computerspieler besiegbar ist oder unbesiegbar'
     compskill = False
     Button7.Text = "besiegbar"
     ElseIf compskill = False Then
     compskill = True
     Button7.Text = "unbesiegbar"
     End If
     End Sub
    
     Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
     MsgBox(spieler1wahl)
     MsgBox(compwahl)
     End Sub
    
     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
     End Sub
    End Class
    
    Ich versuche ein Stein,Schere,Papier in VB 2005 zu programmieren. Anfangs nur mit einem Spieler. Später mit mehreren. Aber soweit bin ich noch nicht.
    Ich klicke auf Button 4 um den Computerspieler zu aktivieren und mit einem menschlichen Spieler.(comp=true).
    Mit Button 7 stelle ich ein ob der Computergegner die Züge kennt oder nicht.
    Zu meinem Problem. Sobald ich auf einen Button (Button1 fuer Stein,Button2 fuer Schere, Button3 fuer Papier) klicke und mir danach die Ergebnisse anschaue hat der Spieler eine Zahl zwischen 1 und 3(spieler1wahl). Aber der Computer hat sich keine Zahl ausgewählt. Der Wert bleibt auf 0 stehen. Der Computer soll durch die Funktion entweder eine zufällige Zahl erwischen oder sich die Zahl aussuchen mit der die des Spielers geschlagen wird.Abhängig davon ob die Züge bekannt sind oder nicht.(compskill=False/True)

    Ich bin ein Anfänger und hoffe ihr könnt mir helfen bei der Problematik.
     
  2. 1. August 2007
    AW: Funktionsaufruf fehlerhaft?

    ich programier zwar nur vb6 aber irgendwie kommt mir die Funktion komisch vor.

    Public Function computerki(ByVal compwahl As Integer) As Integer

    Ich würde an die Function nur Ture oder False übergeben also Boolean.
    Desweiteren folgt in der Funktion kein
    "computerki = 1" oder so
    Code:
     End If
     computerki = compwahl
     End Function
    
    wenn du dafür compwahl nehmen willst muss das eine Public variable sein. (wenn ich mich nicht irre, hab selbst damit immer Probleme)
     
  3. 1. August 2007
    AW: Funktionsaufruf fehlerhaft?

    ich habs jetzt nur schnell überflogen... aber du übergibst der funktion "computerki" den wert "compwahl". aber compwahl ist der wert, dem du die rückgabe zuweist.

    und so wie ich das sehe gibt deine funktion "computerki" keinen wert zurück...

    hier die funktionen aufdie es ankommen dürfte:
    Code:
    Public Function computerki() As Integer
     If comp = True Then 'Computerspieler aktiv?'
     If compskill = False Then 'Falls Computerspieler besiegbar ist'
     computerki = Int(3 * Rnd() + 1) 'Zufallszahl zwischen 1 und 3 wird generiert'
     Else
     If spieler1wahl = 1 Then
     computerki = 3
     End If
     If spieler1wahl = 2 Then
     computerki = 1
     End If
     If spieler1wahl = 3 Then
     computerki = 2
     End If
     End If
     End If
     End Function
    
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     spieler1wahl = 1
     compwahl = computerki()
    
     End Sub
    
    
    So müsste es gehen (wenn das mit dem Random so funktioniert ich kenn das bissl anders ^^ aber vll gehts ja so au)

    wunder dich net dass ich in der funktion "computerki" , dem funktionsname einen wert zuweise, so kannst du den rückgabewert zuweisen würde auch mit "return" gehen nur da springt er dann sofort aus der funktion. macht in diesem fall keinen unterschied ....

    Hoffe konnte helfen
    gruß
    meckes
     
  4. 1. August 2007
    AW: Funktionsaufruf fehlerhaft?

    Vielen Dank. Nach euren Ratschlägen und ein wenig Tüftelei scheint der Code richtig zu sein.
    Code:
     Public Function computerki(ByVal compwahl As Integer) As Integer
     If comp = True Then 'Computerspieler aktiv?'
     If compskill = False Then 'Falls Computerspieler besiegbar ist'
     computerki = Int(3 * Rnd() + 1) 'Zufallszahl zwischen 1 und 3 wird generiert'
     End If
     If compskill = True Then 'Wenn Computerspieler unbesiegbar ist'
     If spieler1wahl = 1 Then
     computerki = 3
     End If
     If spieler1wahl = 2 Then
     computerki = 1
     End If
     If spieler1wahl = 3 Then
     computerki = 2
     End If
     End If
     End If
     End Function
     
  5. 1. August 2007
    AW: Funktionsaufruf fehlerhaft?

    Ich würde die 3 Ifs, wo er nach der Zahl schaut, noch mit Select Case machen, ist theoretisch glaub ich schneller, bzw schaut schöner aus find ich^^.
    Und falls dus noch nicht wo anders hast am Anfang der Function noch ein Randomize setzten...
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.