0

我似乎在我的程序工作时遇到了问题,我发现很难理解我做错了什么,首先我需要一种简单(不是很复杂)的方法来检查用户是否无法输入字符串或数字请求的数量(目前是 1-9 用于菜单选项,10 用于保存选项 - 我需要稍后做)下面的代码是与菜单相关的数字和字符串检查器的代码,下面的代码是整个代码。

我已经尝试过这样做,但是当您为该行输入它时它只会循环,并让您通过您在列中输入的任何数字。我还需要其他与​​此相关的问题的帮助

告诉用户他们击中了什么船,

保存和加载游戏还有一个分数计数器 - 我有这个工作然后在尝试解决第一个问题时它被删除

并且限制他们可以拥有的数量。

我明天将上传所需的代码,因为现在不能,但是如果有人可以访问他们给你的 AQA As Level 免费伪代码 - (这不是非法的!)请帮助我!

Sub GetRowColumn(ByRef Row As Integer, ByRef Column As Integer) ' Asks the user about where they want to go in the code
    Console.WriteLine()
    Dim checkcol, checkrow As String ' Defining the variables that I will user later
    Dim AscCol, AscRow As Integer

    Console.Write("Please enter a column:") ' Asks users to enter a column
    checkcol = Console.ReadLine()
    AscCol = Asc(checkcol(0)) ' It will check it on the ASCII scale to see if it isnt a letter
    While AscCol > 57 Or AscCol < 48 ' If it doesnt fit in here, it is not one of the alloacated numbers
        Console.WriteLine("This is not a number.")
        Console.Write("Please enter a column")
        checkcol = Console.ReadLine() ' Does the same for checkcol
        AscCol = Asc(checkcol(0))
    End While
    checkcol = ((Chr(AscCol)))
    Column = CInt(checkcol)
    Console.WriteLine() ' This is a printed space for spacing when printed as a code
    Do
        If Column < 0 Or Column > 9 Then ' Now if it fits the column alloation e.g. 1 to 9 it will be allowed through
            Console.WriteLine()
            Console.WriteLine(" That is an invalid Input") ' Tell the user that they cannot go through as it doesn't fit the right requrirments
            Column = Console.ReadLine()
        End If
        Console.WriteLine()
    Loop Until Column < 10 And Column >= 0 ' This part of the code will run until their answer is under 10 and over 0 

    Console.Write("Please enter a row:") ' Here is same for rows as it is for columns 
    checkrow = Console.ReadLine()
    AscRow = Asc(checkrow(0))
    While AscRow > 57 Or AscRow < 48
        Console.WriteLine("This is not a number.")
        Console.Write("Please enter a row")
        AscRow = Asc(checkrow(0))
    End While
    Row = CInt(checkrow)
    Do

        If Row < 0 Or Row > 9 Then
            Console.WriteLine()
            Console.WriteLine("That is an invalid Input.")
        End If
        Console.WriteLine()
    Loop Until Row < 10 And Row >= 0

End Sub

其他代码

'Skeleton Program for the AQA AS Paper 1 Summer 2016 examination
'this code should be used in conjunction with the Preliminary Material
'written by the AQA Programmer Team
'developed in the Visual Studio 2008 programming environment
'Version Number 1.0
Imports System.IO
Module Module1
    Const TrainingGame As String = "Training.txt" ' Calls the training text file used by new players
    Structure TShip ' Starts a new structure for use later that includes a stringed name and a size as an integer
        Dim Name As String
        Dim Size As Integer
    End Structure
    Sub MakePlayerMove(ByRef Board(,) As Char, ByRef Ships() As TShip) ' This part of the code advances on their column and row selection from earlier
        Dim Row As Integer
        Dim Column As Integer
        GetRowColumn(Row, Column)
        If Board(Row, Column) = "m" Or Board(Row, Column) = "h" Then ' m is miss h is a hit 
            Console.WriteLine("Sorry, you have already shot at the square (" & Column & "," & Row & "). Please try again.")
        ElseIf Board(Row, Column) = "-" Then ' Message to user to say that they have shot in a sqaure they habe already shot in
            Console.WriteLine("Sorry, (" & Column & "," & Row & ") is a miss.")
            Board(Row, Column) = "m"
        Else
            Console.WriteLine("Hit at (" & Column & "," & Row & ").")
            Board(Row, Column) = "h"
        End If
    End Sub

    Sub SetUpBoard(ByRef Board(,) As Char)
        Dim Row As Integer
        Dim Column As Integer
        For Row = 0 To 9
            For Column = 0 To 9
                Board(Row, Column) = "-"
            Next
        Next
    End Sub

    Sub LoadGame(ByVal Filename As String, ByRef Board(,) As Char)
        Dim Row As Integer
        Dim Column As Integer
        Dim Line As String
        Using FileReader As StreamReader = New StreamReader(Filename)
            For Row = 0 To 9
                Line = FileReader.ReadLine()
                For Column = 0 To 9
                    Board(Row, Column) = Line(Column)
                Next
            Next
        End Using
    End Sub

    Sub PlaceRandomShips(ByRef Board(,) As Char, ByVal Ships() As TShip)
        Dim Valid As Boolean
        Dim Row As Integer
        Dim Column As Integer
        Dim Orientation As Char
        Dim HorV As Integer
        For Each Ship In Ships
            Valid = False
            While Not Valid
                Row = Int(Rnd() * 10)
                Column = Int(Rnd() * 10)
                HorV = Int(Rnd() * 2)
                If HorV = 0 Then
                    Orientation = "v"
                Else
                    Orientation = "h"
                End If
                Valid = ValidateBoatPosition(Board, Ship, Row, Column, Orientation)
            End While
            Console.WriteLine("Computer placing the " & Ship.Name)
            PlaceShip(Board, Ship, Row, Column, Orientation)
        Next
    End Sub

    Sub PlaceShip(ByRef Board(,) As Char, ByVal Ship As TShip, ByVal Row As Integer, ByVal Column As Integer, ByVal Orientation As Char)
        Dim Scan As Integer
        If Orientation = "v" Then
            For Scan = 0 To Ship.Size - 1
                Board(Row + Scan, Column) = Ship.Name(0)
            Next
        ElseIf Orientation = "h" Then
            For Scan = 0 To Ship.Size - 1
                Board(Row, Column + Scan) = Ship.Name(0)
            Next
        End If
    End Sub

    Function ValidateBoatPosition(ByVal Board(,) As Char, ByVal Ship As TShip, ByVal Row As Integer, ByVal Column As Integer, ByVal Orientation As Char)
        Dim Scan As Integer
        If Orientation = "v" And Row + Ship.Size > 10 Then
            Return False
        ElseIf Orientation = "h" And Column + Ship.Size > 10 Then
            Return False
        Else
            If Orientation = "v" Then
                For Scan = 0 To Ship.Size - 1
                    If Board(Row + Scan, Column) <> "-" Then
                        Return False
                    End If
                Next
            ElseIf (Orientation = "h") Then
                For Scan = 0 To Ship.Size - 1
                    If Board(Row, Column + Scan) <> "-" Then
                        Return False
                    End If
                Next
            End If
        End If
        Return True
    End Function

    Function CheckWin(ByVal Board(,) As Char)
        Dim Row As Integer
        Dim Column As Integer
        For Row = 0 To 9
            For Column = 0 To 9
                If Board(Row, Column) = "A" Or Board(Row, Column) = "B" Or Board(Row, Column) = "S" Or Board(Row, Column) = "D" Or Board(Row, Column) = "P" Then
                    Return False
                End If
            Next
        Next
        Return True
    End Function

    Sub PrintBoard(ByVal Board(,) As Char)
        Dim Row As Integer
        Dim Column As Integer
        Console.WriteLine()
        Console.WriteLine("The board looks like this: ")
        Console.WriteLine()
        Console.Write(" ")
        For Column = 0 To 9
            Console.Write(" " & Column & "  ")
        Next
        Console.WriteLine()
        For Row = 0 To 9
            Console.Write(Row & " ")
            For Column = 0 To 9
                If Board(Row, Column) = "-" Then
                    Console.Write(" ")
                ElseIf Board(Row, Column) = "A" Or Board(Row, Column) = "B" Or Board(Row, Column) = "S" Or Board(Row, Column) = "D" Or Board(Row, Column) = "P" Then
                    Console.Write(" ")
                Else
                    Console.Write(Board(Row, Column))
                End If
                If Column <> 9 Then
                    Console.Write(" | ")
                End If
            Next
            Console.WriteLine()
        Next
    End Sub

    Sub DisplayMenu()
        Console.WriteLine("MAIN MENU") ' Main Menu Screen that is displayed to the user
        Console.WriteLine()
        Console.WriteLine("1. Start new game")
        Console.WriteLine("2. Load training game")
        Console.WriteLine(" 3. Change game limit")
        Console.WriteLine("4. Load Saved Game")
        Console.WriteLine("9. Quit")
        Console.WriteLine()
    End Sub
    Function GetMainMenuChoice() ' Will check if the menu choice is picked can go through
        Dim Choice As Integer ' Dim choice as an integer
        Try
            Console.Write("Please enter your choice: ") ' Ask user to enter their choice for the menu option
            Choice = Console.ReadLine() ' User enters here
            Console.WriteLine()
            If Choice <> "1" And Choice <> "2" And Choice <> "9" And Choice <> "10" Then
                Console.WriteLine("ERROR: Invalid input!") ' If their choice doesnt fit 1, 2 or 9 then it says this message
            End If
            Return Choice ' Return the choice to another part of code
        Catch Ex As Exception
            Console.WriteLine("Please enter a valid input (1, 2,9 or 10)")
        End Try
    End Function

    Sub PlayGame(ByVal Board(,) As Char, ByVal Ships() As TShip)
        Dim GameWon As Boolean = False
        Dim score As Integer = 0
        Dim gamelimit As Integer = 50
        Do
            PrintBoard(Board)
            MakePlayerMove(Board, Ships)
            score = score + 1
            Console.WriteLine("You have taken {0} number of moves,", score)
            GameWon = CheckWin(Board)
            If GameWon Then
                Console.WriteLine("All ships sunk!")
                Console.WriteLine()
            End If
        Loop Until GameWon Or score = 50
        If score = 50 Then
            Console.WriteLine("You used all your moves up. Try again ")

        End If

    End Sub
    Sub SaveGame(ByRef Board(,) As Char)
        Dim SaveGameWrite As StreamWriter
        SaveGameWrite = New StreamWriter("TEST.txt", True)

        For x As Integer = 0 To 9
            For y As Integer = 0 To 9
                SaveGameWrite.Write(Board(x, y))
            Next
        Next
        SaveGameWrite.Close()
    End Sub
    Sub LoadSavedGame(ByVal Filename As String, ByRef Board(,) As Char)
        Dim Row, Column As Integer
        Dim Line As String

        Console.WriteLine("Load training game or open a saved game? T for training or S for saved")

        If Console.ReadLine = "" Then
            Console.WriteLine("Enter the filename: ")
            Filename = Console.ReadLine
        End If
        Using FileReader As StreamReader = New StreamReader("C:\" & Filename)
            For Row = 0 To 9
                Line = FileReader.ReadLine()
                For Column = 0 To 9
                    Board(Row, Column) = Line(Column)
                Next
            Next
        End Using
    End Sub
    Sub SetUpShips(ByRef Ships() As TShip)
        Ships(0).Name = "Aircraft Carrier"
        Ships(0).Size = 5
        Ships(1).Name = "Battleship"
        Ships(1).Size = 4
        Ships(2).Name = "Submarine"
        Ships(2).Size = 3
        Ships(3).Name = "Destroyer"
        Ships(3).Size = 3
        Ships(4).Name = "Patrol Boat"
        Ships(4).Size = 2
    End Sub

    Sub Main()
        Dim Board(9, 9) As Char
        Dim Ships(4) As TShip
        Dim MenuOption As Integer
        Do
            SetUpBoard(Board)
            SetUpShips(Ships)
            DisplayMenu()
            MenuOption = GetMainMenuChoice()
            If MenuOption = 1 Then
                PlaceRandomShips(Board, Ships)
                PlayGame(Board, Ships)
            ElseIf MenuOption = 2 Then
                LoadGame(TrainingGame, Board)
                PlayGame(Board, Ships)
            ElseIf MenuOption = 3 Then
                PlaceRandomShips(Board, Ships)
                PlayGame(Board, Ships)
            End If
        Loop Until MenuOption = 9
    End Sub
End Module

提前致谢,

苏格兰勇士

4

0 回答 0