2017-07-18 69 views
0

我正在學習C#並且正在製作Naughts and Crosses遊戲。 我已經達到了一個點,我有一個決定玩家轉向的布爾變量,一個玩家想要輪到的輸入以及真正的棋盤在它自己的類中。我可以在Main方法中更改類方法中的變量嗎?

這裏是我卡住的地方。我想要玩家輸入並用它來改變棋盤,但不知道如何從Main方法訪問它。

以下是我的代碼。 playerinput是指板上1-9的位置,打印機是Board對象。

class Program 
{ 
    static void Main(string[] args) 
    { 
     --- 
     --- 
     --- 

     int playerinput = printer.GetNumber(); 

     if (!currentPlayer) 
     { 
     // I want to add code here that takes playerinput 
     // and changes the corresponding place on the board. 
     } 

這裏是實際的板子。

public class Board 
{ ---- 
public void PrintBoard() 
    { 
     var a = 1; 
     var b = 2; 
     var c = 3; 
     var d = 4; 
     var e = 5; 
     var f = 6; 
     var g = 7; 
     var h = 8; 
     var i = 9; 

     System.Console.Writeline(string.Format(@" {0} | {1} | {2} 
----------- 
{3} | {4} | {5} 
----------- 
{6} | {7} | {8} ", a, b, c, d, e, f, g, h, i)); 

所以我需要帶上玩家輸入並在PrintBoard方法中更改相應的字母。只要我可以改變這些變量,我應該沒問題。

尋找答案時遇到的困難之一是知道如何恰當地說出來,所以任何意見或額外閱讀這個問題將不勝感激。

+0

這個問題到底在哪裏?你沒有顯示你如何使用'Board'。 – user3185569

+0

對不起,在'if(!currentPlayer)'之後,我想添加一些代碼,其中包含playerinput並在PrintBoard方法中更改相應的變量。我不知道如何做到這一點。 – Iain

回答

0

PrintBoard的變量不是持久的 - 他們最後頂多只要方法。當您再次撥打PrintBoard時,任何更改都將丟失。

您需要在持續時間足夠長的範圍內聲明電路板。例如,Main方法本身。你已經有了一個Board對象的實例,所以這將是顯而易見的地方 - 只需將這些變量聲明爲字段,而不是方法中的本地變量。

您的Board對象中的一種方法可能是處理播放器輸入;這只是一種將玩家輸入作爲參數的方法,並相應地更新棋盤。

作爲另一個建議,考慮閱讀數組 - 它們是一種管理結構化數據的便捷方式,例如您在此處使用的網格。你可以這樣做:

public class Board 
{ 
    private char[,] data = new char[3, 3]; // A 2D array of ' ', 'X' or 'O' 

    // Returns false for invalid input 
    public bool HandleInput(int playerInput, char player) 
    { 
    if (player != 'X' && player != 'O') return false; // Bad player 

    // Get coördinates from the 1-9 input 
    var x = (playerInput - 1) % 3; 
    var y = (playerInput - 1)/3; 

    if (x < 0 || x > 2 || y < 0 || y > 2) return false; // Out-of-board-exception 

    if (data[x, y] != ' ') return false; // Non-empty cell 

    data[x, y] = player; // Set the new cell contents 

    return true; 
    } 

    public void Print() 
    { 
    for (var y = 0; y < 2; y++) 
    { 
     for (var x = 0; x < 2; x++) 
     { 
     Console.Write(data[x, y]); 
     Console.Write(" | "); 
     } 

     Console.WriteLine(); 
     Console.WriteLine("---------"); 
    } 
    } 
} 
0

您可以將一個參數添加到您的PrintBoard方法中。可能看起來像這樣

public void PrintBoard(int playerInput) 
{ 
    .... 

當您從Main方法調用PrintBoard方法,你可以給用戶輸入到你的方法,並在其中使用它。

看起來是這樣的(假設board是你Board類的一個實例。

int playerinput = printer.GetNumber(); 
board.PrintBoard(playerInput); 

你可以看看Method Parameters以獲取更多信息。

0

您可以添加參數方法PrintBoard( )並且可以像PrintBoard(1,2)那樣傳遞Main方法中的參數:

public void PrintBoard(int a, int b) 

然後您可以分配在PrintBoard方法,如號碼:

 public void PrintBoard(int a, int b) 
    { 
    //Can print the numbers directly. 
    } 
相關問題