2014-04-06 56 views
1

我正在爲我的Visual Basic類開發一個程序,該程序應該創建一個由人類和計算機玩的井字遊戲。在Visual Basic中的圖形井字遊戲

這裏有操作的指令:

  1. 創建兩個視圖(一個作爲GUI視圖和其他作爲使用控制檯文本視圖)。
  2. 使用兩個控制器(即一個用戶點擊在GUI上,並且其中用戶使用數字1-9鍵盤上的其他。
  3. 使用一個模型。
  4. 使用的模塊保持的狀態遊戲中的所有邏輯應用於模型中(例如,只允許模塊更改2D陣列)
  5. 網格將以圖形方式繪製(不使用標籤,按鈕,等等)

以下是我到目前爲止的一些問題:

  1. 我知道如何創建一個GUI視圖,但不知道如何使用控制檯來創建文本視圖?
  2. 不太確定2D陣列應該如何在這種情況下工作(我已經聲明如下,但不知道從那裏去哪裏)。

    Module Module1 
        Dim game(2, 2) As String 
    End Module 
    
  3. 我已經繪製了網格的一部分,但在接下來的工作中遇到了麻煩。我需要再多一條垂直線和一條水平線,並且需要正確劃分。下面是我對繪畫至今:

    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 
    

回答

1

我給你一半的解決方案,但在C#中:d

它不應該是很難爲你將其轉換爲VB,它是完全一樣的框架。

希望你能理解機制,而不是簡單地轉儲我的代碼,事實上它確實很簡單。

(拖放一個PictureBox到窗體第一)

網格:

這裏我畫正方形但應該是很容易畫線來代替。

enter image description here

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或拋出一個異常,我只是默默的在我的示例更新遊戲。

還剩什麼?

  • 查找是否有人贏了,這是需要技巧來實現:d 真的
  • 繪製在控制檯模式

我給你的控制檯一些僞代碼:

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#示例中的每一個文檔的頁面。

祝你好運!

+0

感謝您的幫助,應該很有趣,因爲我從來沒有使用C#之前哈哈,但我會嘗試。 –

+0

我寧願幫助你一點,但給你的整個解決方案將不會對你有幫助國際海事組織。我會喜歡使用VB,但它已經很多年了,我已經停止使用它:D – Aybe

+0

哦,是的,我完全同意,感謝您的幫助! –