我正在为我的Visual Basic类开发一个程序,该程序应该创建一个由人和计算机播放的Tic-Tac-Toe游戏。
以下是说明:
以下是我目前遇到的一些问题:
不太确定2D阵列在这种情况下应该如何工作(我已经声明如下,但不确定从那里开始)。
Module Module1
Dim game(2, 2) As String
End Module
我已经绘制了网格的一部分,但在完成其余工作时遇到了麻烦。我还需要一条垂直线和一条水平线,需要正确划分。这是我到目前为止绘制的内容:
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
Dim blackBrush As New Drawing.SolidBrush(Color.Black)
Dim xBase As Integer = 50
Dim yBase As Integer = 10
Dim width As Integer = 200
e.Graphics.DrawRectangle(Pens.Green, xBase, 10, 200, 200)
Dim third As Integer = yBase + width / 3
e.Graphics.DrawLine(Pens.Black, xBase, third, xBase + width, third)
e.Graphics.DrawLine(Pens.Black, 100, 5, 100, 220)
End Sub
答案 0 :(得分:1)
我给你一半的解决方案,但在C#:D
将它转换为VB应该不是很难,它是完全相同的框架。
希望你能理解这些机制,而不是简单地转储我的代码,事实上它真的很简单。
(首先将PictureBox放到您的表单上)
网格:
这里我正在绘制正方形,但这应该很容易画线。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
pictureBox1.Paint += pictureBox1_Paint;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
int columns = 3;
int rows = 3;
Graphics graphics = e.Graphics;
graphics.Clear(Color.White);
RectangleF bounds = graphics.VisibleClipBounds;
var cellWidth = (int)((bounds.Width - 1) / columns);
var cellHeight = (int)((bounds.Height - 1) / rows);
for (int x = 0; x < columns; x++)
{
for (int y = 0; y < rows; y++)
{
graphics.DrawRectangle(Pens.Black, new Rectangle(x * cellWidth, y * cellHeight, cellWidth, cellHeight));
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
pictureBox1.Invalidate();
}
}
这是一个非常简单的主板:
internal class TicTacToe
{
public TicTacToe()
{
Grid = new Piece[3, 3];
}
public Piece[,] Grid { get; private set; }
public void SetPiece(int x, int y, Piece value)
{
if (x < 0 || x > 2) throw new ArgumentOutOfRangeException("x");
if (y < 0 || y > 2) throw new ArgumentOutOfRangeException("y");
Piece piece = Grid[y, x];
if (piece == Piece.None)
{
Grid[y, x] = value;
}
}
public Piece GetPiece(int x, int y)
{
if (x < 0 || x > 2) throw new ArgumentOutOfRangeException("x");
if (y < 0 || y > 2) throw new ArgumentOutOfRangeException("y");
return Grid[y, x];
}
}
internal enum Piece
{
None = 0,
Cross = 1,
Circle = 2
}
您可以返回boolean
或抛出异常,我只是默默地在我的示例中更新游戏。
剩下什么?
我会给你一些控制台的伪代码:
Do
Get user input
Update the grid
Check if someone wins
Clear console
Draw current game or game over screen
Loop until ESC (quit) is pressed
为了在控制台中绘制网格基本上是上面的代码,只是尺寸要小得多,而像素则是字符。
http://msdn.microsoft.com/en-us/library/System.Console(v=vs.110).aspx
正如我所说,转换它应该是微不足道的,因为MSDN文档确实在每个文档页面中都提供了VB和C#示例。
祝你好运!