2017-07-18 45 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. 
    } 
相关问题