s System.IO
Module Module1
Dim IconOne As String = "X", IconTwo As String = "O"
Dim BoardSquares(3, 3) As String, PlayerScore(2) As Integer
Dim GameOver As Integer = 1, MoveCount As Integer = 0
Dim StartPlayer As Integer
Sub Main()
Dim Response As String
Call StartOfGame()
Console.WriteLine()
Console.WriteLine("Do You Wish To Play Again? (Y/N) : ") : Response = Console.ReadLine
If Response.ToLower() = "y" Then
'Resets Variables *?Allow icons Not To Be Reset*?
IconOne = "X"
IconTwo = "O"
GameOver = 1
StartPlayer = 0
Call Main()
End If
End Sub
Sub StartOfGame()
Randomize()
Dim Response, Icon As String
Dim Starter As Integer = CInt(Int((2 * Rnd()) + 1))
Call AssignArray()
Console.Write("Do You Wish To Load A Saved Game (Y/N) : ") : Response = Console.ReadLine()
If Response.ToLower() = "y" Then
Call Open()
End If
'Allows The Player Who Starts To Be A Random Choice
StartPlayer = Starter
'Allows Choice Of Icon Used In The Grid
Console.Write("Player 1 Choose Your Icon (Default : X) : ") : Icon = Console.ReadLine
If Icon <> "" Then
Iconone = Icon
Icon = ""
End If
Console.WriteLine()
Console.Write("Player 2 Choose Your Icon (Default : O) : ") : Icon = Console.ReadLine
If Icon <> "" Then
Icontwo = Icon
End If
Console.WriteLine()
Console.WriteLine("Player " + Starter.ToString() + " Starts The Game.")
Console.WriteLine()
Call Showboard()
Call Move()
End Sub
Sub Move()
Dim Input, Vernum, Hornum As String, PlayerMove As Integer
On Error Resume Next
Do
If MoveCount = 0 Then
Console.Write("Player " + StartPlayer.ToString() + " Enter Position (Type Help For Help) : ") : Input = Console.ReadLine
Else
Console.Write("Player " + PlayerMove.ToString() + " Enter Position : ") : Input = Console.ReadLine
End If
If Input.ToLower() = "help" Then
Console.WriteLine()
Console.WriteLine("Enter Vertical Coordinate First.")
Console.WriteLine("Type Save To Save The Game And Exit.")
Console.WriteLine("Type Quit To Exit Without Saving.")
Console.WriteLine()
ElseIf Input.ToLower() = "save" Then
'Call Save()
Exit Sub
ElseIf Input.ToLower() = "quit" Then
Exit Sub
End If
If Input.ToLower <> "help" And Input.ToLower() <> "save" And Input.ToLower() <> "quit" Then
Vernum = Left$(Input, 1)
Hornum = Right$(Input, 1)
If MoveCount = 0 Or PlayerMove = "" Then
PlayerMove = MoveCount + StartPlayer
End If
PlayerMove = PlayerMove Mod 2
Select Case Hornum.ToLower()
Case Is = "a"
Hornum = 1
Case Is = "b"
Hornum = 2
Case Is = "c"
Hornum = 3
End Select
If BoardSquares(Vernum, Hornum) <> " " Then
Console.WriteLine()
Console.WriteLine("You Tried To Use A Square That Is Already Taken. Try Again")
Call Move()
End If
'Determines Who Placed The Placed The Piece And Changes Player Value For Next Players Turn
Select Case PlayerMove
Case 0
BoardSquares(Vernum, Hornum) = IconTwo
PlayerMove = 1
Case Else
BoardSquares(Vernum, Hornum) = IconOne
PlayerMove = 2
End Select
Call WinCheck()
Console.WriteLine()
Call Showboard()
Console.WriteLine()
End If
Loop Until GameOver <> 1
End Sub
Sub WinCheck()
Dim Winner As String, WinPlayer As Integer
If (BoardSquares(1, 1) = BoardSquares(1, 2) And BoardSquares(1, 3) = BoardSquares(1, 2) And BoardSquares(1, 2) <> " ") Or _
(BoardSquares(2, 1) = BoardSquares(2, 2) And BoardSquares(2, 3) = BoardSquares(2, 2) And BoardSquares(2, 2) <> " ") Or _
(BoardSquares(3, 1) = BoardSquares(3, 2) And BoardSquares(3, 3) = BoardSquares(3, 2) And BoardSquares(3, 2) <> " ") Or _
(BoardSquares(1, 1) = BoardSquares(1, 2) And BoardSquares(1, 3) = BoardSquares(1, 2) And BoardSquares(1, 2) <> " ") Or _
(BoardSquares(1, 1) = BoardSquares(2, 1) And BoardSquares(3, 1) = BoardSquares(2, 1) And BoardSquares(2, 1) <> " ") Or _
(BoardSquares(1, 2) = BoardSquares(2, 2) And BoardSquares(3, 2) = BoardSquares(2, 2) And BoardSquares(2, 2) <> " ") Or _
(BoardSquares(1, 3) = BoardSquares(2, 3) And BoardSquares(3, 3) = BoardSquares(2, 3) And BoardSquares(2, 3) <> " ") Or _
(BoardSquares(1, 1) = BoardSquares(2, 2) And BoardSquares(3, 3) = BoardSquares(2, 2) And BoardSquares(2, 2) <> " ") Or _
(BoardSquares(3, 1) = BoardSquares(2, 2) And BoardSquares(1, 3) = BoardSquares(2, 2) And BoardSquares(2, 2) <> " ") Then
GameOver = 2
End If
If MoveCount = 9 Then
GameOver = 3
End If
If GameOver = 2 Then
WinPlayer = StartPlayer + (MoveCount - 1)
WinPlayer = WinPlayer Mod 2
Select Case WinPlayer
Case 0
Winner = 2
PlayerScore(2) = PlayerScore(2) + 1
Case Else
Winner = 1
PlayerScore(1) = PlayerScore(1) + 1
End Select
Console.WriteLine()
Console.WriteLine("Player " + Winner + " Wins.")
ElseIf GameOver = 3 Then
Console.WriteLine()
Console.WriteLine("The Game Is A Draw")
End If
MoveCount += 1
End Sub
Sub Showboard()
Console.WriteLine(" A B C")
Console.WriteLine(" -------")
Console.WriteLine("1 |" + Boardsquares(1, 1) + "|" + Boardsquares(1, 2) + "|" + Boardsquares(1, 3) + "|")
Console.WriteLine(" -------")
Console.WriteLine("2 |" + Boardsquares(2, 1) + "|" + Boardsquares(2, 2) + "|" + Boardsquares(2, 3) + "|")
Console.WriteLine(" -------")
Console.WriteLine("3 |" + Boardsquares(3, 1) + "|" + Boardsquares(3, 2) + "|" + Boardsquares(3, 3) + "|")
Console.WriteLine(" -------")
End Sub
Sub AssignArray()
For i As Integer = 1 To 3
For i2 As Integer = 1 To 3
Boardsquares(i, i2) = " "
Next
Next
End Sub
Sub Save()
Dim CurrentWriter As StreamWriter
Dim DefaultFilename As String = "Noughtscrossessave.txt", DefaultPath As String = "C:\Users\Daniel\Documents\Text\"
Dim FileName, ExportData As String
Console.Write("Enter File Name For Save (Blank For Default) : ") : FileName = Console.ReadLine
If FileName = "" Then
FileName = DefaultPath + DefaultFilename
Else
FileName = DefaultPath + FileName
End If
CurrentWriter = New StreamWriter(FileName)
For i As Integer = 1 To 3
For i2 As Integer = 1 To 3
ExportData = BoardSquares(i, i2)
CurrentWriter.WriteLine(ExportData)
Next
Next
For i As Integer = 1 To 2
ExportData = CStr(PlayerScore(i))
CurrentWriter.WriteLine(ExportData)
Next
ExportData = CStr(MoveCount)
CurrentWriter.WriteLine(ExportData)
ExportData = CStr(StartPlayer)
CurrentWriter.WriteLine(ExportData)
ExportData = IconOne
CurrentWriter.WriteLine(ExportData)
ExportData = IconTwo
CurrentWriter.WriteLine(ExportData)
CurrentWriter.Close()
End Sub 'Save
Sub Open()
Dim CurrentReader As StreamReader
Dim DefaultFilename As String = "Noughtscrossessave.txt", DefaultPath As String = "C:\Users\Daniel\Documents\Text\"
Dim FileName, ImportedData As String
Call AssignArray()
Console.Write("Enter File Name For Open (Blank For Default) : ") : FileName = Console.ReadLine
If FileName = "" Then
FileName = DefaultPath + DefaultFilename
Else
FileName = DefaultPath + FileName
End If
CurrentReader = New StreamReader(FileName)
For i As Integer = 1 To 3
For i2 As Integer = 1 To 3
ImportedData = CurrentReader.ReadLine()
BoardSquares(i, i2) = ImportedData
Next
Next
For i As Integer = 1 To 2
ImportedData = CurrentReader.ReadLine()
PlayerScore(i) = CInt(ImportedData)
Next
ImportedData = CurrentReader.ReadLine()
MoveCount = CInt(ImportedData)
ImportedData = CurrentReader.ReadLine()
StartPlayer = CInt(ImportedData)
ImportedData = CurrentReader.ReadLine()
IconOne = ImportedData
ImportedData = CurrentReader.ReadLine()
IconTwo = ImportedData
CurrentReader.Close()
Console.WriteLine("Player 1 Icon is : " + IconOne)
Console.WriteLine("Player 2 Icon is : " + IconTwo)
Console.WriteLine()
Showboard()
Console.WriteLine()
Move()
End Sub 'Open
Function CurrentPlayer()
Dim CPlayer, Temp1, Temp2 As Integer
Temp1 = StartPlayer + MoveCount
Temp2 = Temp1 Mod 2
Select Case Temp2
Case 0
CPlayer = 2
Case Else
CPlayer = 1
End Select
Return CPlayer
End Function
End Module