【发布时间】:2015-04-15 01:51:07
【问题描述】:
我正在编写一个 Visual Basic 程序来模拟井字游戏。据我所知,我有一种方法应该正确地绘制电路板并用 Xs 和 Os 适当地填充它。但是,当我测试它时,它只会将它们绘制在同一行中。
“子板”绘制一切,测试“x”和“o”的现有值并分别调用“drawX”或“drawO”,传递坐标进行绘制。
Sub Main()
Dim start As String = String.Empty
Dim x As ArrayList = New ArrayList
Dim o As ArrayList = New ArrayList
Dim choice As String = String.Empty
o.Add("1")
o.Add("5")
o.Add("9")
While True
board(x, o)
pause()
End While
End Sub
Sub pause()
Console.WriteLine("Press enter to continue...")
Console.ReadLine()
End Sub
Sub board(x As ArrayList, o As ArrayList)
Console.ForegroundColor = 8
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine("**********************************************************")
Console.WriteLine("**********************************************************")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine("**********************************************************")
Console.WriteLine("**********************************************************")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Console.WriteLine(" ** ** ")
Dim ver As Integer = 1
Dim hor As Integer = 4
Dim vSpace As Integer = 11
Dim hSpace As Integer = 20
Dim vPos As Integer = 0
Dim hPos As Integer = 0
For i As Integer = 1 To 9
If 1 <= i <= 3 Then
vPos = ver
Select Case i
Case 1
hPos = hor
Case 2
hPos = hor + hSpace
Case 3
hPos = hor + (hSpace * 2)
Case Else
End Select
End If
If 4 <= i <= 6 Then
vPos = ver + vSpace
Select Case i
Case 4
hPos = hor
Case 5
hPos = hor + hSpace
Case 6
hPos = hor + (hSpace * 2)
Case Else
End Select
End If
If 7 <= i <= 9 Then
vPos = ver + (vSpace * 2)
Select Case i
Case 7
hPos = hor
Case 8
hPos = hor + hSpace
Case 9
hPos = hor + (hSpace * 2)
Case Else
End Select
End If
Select Case True
Case x.Contains(CStr(i))
drawX(hPos, vPos)
Case o.Contains(CStr(i))
drawO(hPos, vPos)
End Select
Next i
End Sub
Sub drawX(hPos As Integer, vPos As Integer)
Console.ForegroundColor = 6
Console.SetCursorPosition(hPos, vPos)
Console.Write("** **")
Console.SetCursorPosition(hPos, vPos + 1)
Console.Write(" ** **")
Console.SetCursorPosition(hPos, vPos + 2)
Console.Write(" ** **")
Console.SetCursorPosition(hPos, vPos + 3)
Console.Write(" ****")
Console.SetCursorPosition(hPos, vPos + 4)
Console.Write(" ** **")
Console.SetCursorPosition(hPos, vPos + 5)
Console.Write(" ** **")
Console.SetCursorPosition(hPos, vPos + 6)
Console.Write("** **")
End Sub
Sub drawO(hPos As Integer, vPos As Integer)
Console.ForegroundColor = 3
Console.SetCursorPosition(hPos, vPos)
Console.Write(" ******")
Console.SetCursorPosition(hPos, vPos + 1)
Console.Write(" ********")
Console.SetCursorPosition(hPos, vPos + 2)
Console.Write("** **")
Console.SetCursorPosition(hPos, vPos + 3)
Console.Write("** **")
Console.SetCursorPosition(hPos, vPos + 4)
Console.Write("** **")
Console.SetCursorPosition(hPos, vPos + 5)
Console.Write(" ********")
Console.SetCursorPosition(hPos, vPos + 6)
Console.Write(" ******")
End Sub
【问题讨论】: