如何指定从哪个函数获取参数?

时间:2015-01-03 11:49:01

标签: vb.net

我必须为我的工作学习视觉基础,并且我已经在我自己的时间编写代码来帮助加快这个过程。我在这里有一个基本的控制台应用程序,我认为我没有错误地传递参数。

这个程序应该做的是在矩形中绘制一堆ASCII字母。其中一封信将代表玩家。当玩家按下一个键时,它应该清除屏幕并根据按下的箭头键将玩家重新绘制在新位置。

问题是我将所有代码分成子和函数,以便于维护和理解。现在它被打破了,当按下一个键时,玩家的位置不再变化。

   Sub Game()
        Dim width As Integer = 60
        Dim height As Integer = 10
        Dim playerX As Integer = 5
        Dim playerY As Integer = 5
        Dim cursorX As Integer = 0
        Dim cursorY As Integer = 0
        Dim numofTiles As Integer = 0
        Dim keyPressed As ConsoleKeyInfo = Nothing

    While True
        numofTiles = 0
        cursorY = 0
        'Each time the screen is updated these variables need to go back to default
        For i = 0 To height - 1
            cursorY += 1
            cursorX = 0
            'we are starting on a new line so the X position of the cursor will go back to 0
            For j = 0 To width - 1
                DrawTiles(cursorX, playerX, cursorY, playerY)
                cursorX += 1
                numofTiles += 1
                'update information since we just drew a char to the screen
            Next
            Console.WriteLine()
        Next
        keyPressed = Console.ReadKey()
        If PlayerPressedLeftKey(keyPressed) Then
            If LeftIsClear(playerX) Then
                MovePlayerLeft(playerX)
            End If
        ElseIf PlayerPressedRightKey(keyPressed) Then
            If RightIsClear(playerX, width) Then
                MovePlayerRight(playerX)
            End If
        ElseIf PlayerPressedUpKey(keyPressed) Then
            If TopIsClear(playerY) Then
                MovePlayerUp(playerY)
            End If
        ElseIf PlayerPressedDownKey(keyPressed) Then
            If BottomIsClear(playerY, height) Then
                MovePlayerDown(playerY)
            End If
        End If
        Console.Clear()
    End While
End Sub
Sub DrawTiles(cursorX, playerX, cursorY, playerY)
    If Not CursorIsOnPlayersPosition(cursorX, playerX, cursorY, playerY) Then
        DrawBackgroundTile()
    ElseIf CursorIsOnPlayersPosition(cursorX, playerX, cursorY, playerY) Then
        DrawPlayer()
    End If
End Sub
Function RightIsClear(playerX, width)
    If playerX + 1 < width Then : Return True
    Else : Return False
    End If
End Function
Function LeftIsClear(playerX)
    If playerX > 0 Then : Return True
    Else : Return False
    End If

End Function
Function BottomIsClear(playerY, height)
    If playerY < height Then : Return True
    Else : Return False
    End If
End Function
Function TopIsClear(playerY)
    If playerY - 1 > 0 Then : Return True
        'top edge of screen is (X, 0)
    Else : Return False
    End If

End Function
Function CursorIsOnPlayersPosition(cursorX, playerX, cursorY, playerY)
    If cursorX = playerX AndAlso cursorY = playerY Then
        Return True
    Else : Return False
    End If
End Function
Sub DrawPlayer()
    Console.ForegroundColor = ConsoleColor.Green
    Console.Write("X")
    Console.ResetColor()
End Sub
Sub DrawBackgroundTile()
    Console.Write("-")
End Sub
Function PlayerPressedLeftKey(keyPressed)
    If keyPressed.Key = ConsoleKey.LeftArrow Then
        Return True
    Else : Return False
    End If
End Function
Function PlayerPressedRightKey(keyPressed)
    If keyPressed.Key = ConsoleKey.RightArrow Then
        Return True
    Else : Return False
    End If
End Function
Function PlayerPressedUpKey(keyPressed)
    If keyPressed.Key = ConsoleKey.UpArrow Then
        Return True
    Else : Return False
    End If
End Function
Function PlayerPressedDownKey(keyPressed)
    If keyPressed.Key = ConsoleKey.DownArrow Then
        Return True
    Else : Return False
    End If
End Function
Sub MovePlayerLeft(playerX)
    playerX -= 1
End Sub
Sub MovePlayerRight(playerX)
    playerX += 1
End Sub
Sub MovePlayerUp(playerY)
    playerY -= 1
End Sub
Sub MovePlayerDown(playerY)
    playerY += 1
End Sub

我很确定LeftIsClear(),RightIsClear()等函数是问题所在。

If LeftIsClear(playerX) Then
    MovePlayerLeft(playerX)
        End If

LeftIsClear()函数和MovePlayerLeft()子函数都将playerX作为参数,MovePlayerLeft()在LeftIsClear()中。我确信这会破坏代码,以便我无法再改变玩家的位置。

我知道这是一大块代码,但我想尽可能清楚地了解我的问题。重要的部分是while循环和函数所采用的参数。

0 个答案:

没有答案