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