Переменные не обновляются в функции c # - PullRequest
0 голосов
/ 06 июля 2018

Я новичок в языке C #, и мне жаль, если эту проблему легко решить, я проверил веб-сайт, и в настоящее время у меня возникает проблема, когда переменная изменилась, не вызывает каких-либо изменений в методе, это звучит довольно расплывчато, поэтому вот код ниже.

public string PlayerToIcon(int LocA, int LocB)
{
    PlayGame play = new PlayGame();
    int[,] Board = play.Board;
    int LocData = (Board[LocA, LocB]);
    if (LocData == 0) { return " "; }
    else if (LocData == 1) { return "X"; }
    else { return "O"; }
}

Плата показана ниже и представляет собой простой массив. - это в другом файле

public class PlayGame
{
    public int[,] Board = new int[3, 3]
    {          //A B C
                {0,0,0 }, // 1
                {0,0,0 }, // 2
                {0,0,0 }  // 3
    };
}

Я сделал функцию для изменения чисел в массиве, и, как видно, он работает при использовании прямых команд, но в PlayerToIcon цифры не меняются. Например, если это было 0, и я изменил его на 1, PlayerToIcon все еще читает это как 0

Спасибо Извините, если это простая проблема

Редактировать

Это то, что изменяет переменные в массиве. Return State гарантирует, что оно не изменится, если 1 или 2

public class PlayGame
{
    public bool SelectSquare(string Location, int Player)
    {
        List<int> ConvertedLocation = ConvertLoc(Location);
        Console.WriteLine(ReturnState(Location));
        Console.WriteLine(ConvertedLocation[0].ToString() + ConvertedLocation[1].ToString());
        if (ReturnState(Location) == 0) { Board[ConvertedLocation[0], ConvertedLocation[1]] = Player; return true;}
        else { return false; }
    }
 }

Код не распознается на дисплее

public class Interface
{
    PlayGame play = new PlayGame();
    public void GenMap()
    {
        string NewLine;
        Console.Clear();
        Console.WriteLine("    | A | B | C |");
        Console.WriteLine("-----------------");
        new PlayGame();
        NewLine = System.String.Format("| 1 | {0} | {1} | {2} |", (play.PlayerToIcon(play,0, 0)), (play.PlayerToIcon(play, 0, 1)), (play.PlayerToIcon(play, 0, 2)));
        Console.WriteLine((string)NewLine);
        Console.WriteLine("----------------");
        NewLine = System.String.Format("| 2 | {0} | {1} | {2} |", (play.PlayerToIcon(play, 1, 0)), (play.PlayerToIcon(play, 1, 1)), (play.PlayerToIcon(play, 1, 2)));
        Console.WriteLine((string)NewLine);
        Console.WriteLine("-----------------");
        NewLine = System.String.Format("| 3 | {0} | {1} | {2} |", (play.PlayerToIcon(play, 2, 0)), (play.PlayerToIcon(play, 2, 1)), (play.PlayerToIcon(play, 2, 2)));
        Console.WriteLine((string)NewLine);
        Console.WriteLine("-----------------");
    }
    public string PlayerToIcon(int LocA, int LocB)
    {
        int[,] Board = play.Board;
        int LocData = (Board[LocA, LocB]);
        if (LocData == 0) { return " "; }
        else if (LocData == 1) { return "X"; }
        else { return "O"; }
    }

}

Ответы [ 3 ]

0 голосов
/ 06 июля 2018

Сделайте вашу PlayGame переменной перед вызовом PlayerToIcon и передайте его ему как параметр, как показано ниже:

public string PlayerToIcon(PlayGame myGame, int LocA, int LocB)
{
    int[,] Board = myGame.Board;
    int LocData = (Board[LocA, LocB]);
    if (LocData == 0) { return " "; }
    else if (LocData == 1) { return "X"; }
    else { return "O"; }
}

Вы должны сделать это:

new PlayGame(); 

Только если вы хотите сбросить доску на «старт», а не каждый раз, когда вы хотите отредактировать ее.

чтобы уточнить, сделайте что-то подобное:

PlayGame myGame = new PlayGame(); 
PlayerToIcon(myGame, 1, 1);
PlayerToIcon(myGame, 1, 2);
PlayerToIcon(myGame, 0, 1);
[...]

без создания playgame evry time:)

0 голосов
/ 06 июля 2018
class Program
{
    static void Main()
    {
        string playerToIcon = new PlayGame().PlayerToIcon(new PlayGame(), 0, 1); 

    }

}
public class PlayGame
{
    public int[,] Board = new int[3, 3]
    {          //A  B C
            {0,0,0 }, // 1
            {0,0,0 }, // 2
            {0,0,0 }  // 3
    };
    public string PlayerToIcon(PlayGame play, int LocA, int LocB)
    {
        int[,] Board = play.Board;
        int LocData = (Board[LocA, LocB]);
        if (LocData == 0)
        {
            return "";
        }
        else if (LocData == 1)
        {
            return "X";
        }
        else
        {
            return "0";
        }

    }
}
0 голосов
/ 06 июля 2018
public string PlayerToIcon(int LocA, int LocB)
{
    PlayGame play = new PlayGame(); // creates a new PlayGame
    int[,] Board = play.Board;
    int LocData = (Board[LocA, LocB]);
    if (LocData == 0) { return " "; }
    else if (LocData == 1) { return "X"; }
    else { return "O"; }
}

должно быть изменено на что-то вроде этого:

// added as param ---------vvvvvvvvvvvvv
public string PlayerToIcon(PlayGame play, int LocA, int LocB)
{
    int[,] Board = play.Board;
    int LocData = (Board[LocA, LocB]);
    if (LocData == 0) { return " "; }
    else if (LocData == 1) { return "X"; }
    else { return "O"; }
}

И назвал так:

var icon = PlayerToIcon(myPlayer, 1, 1);

Вы даже можете добавить его как функцию в свой PlayGame класс:

public class PlayGame
{
    public int[,] Board = new int[3, 3]
    {          //A B C
                {0,0,0 }, // 1
                {0,0,0 }, // 2
                {0,0,0 }  // 3
    };

    public string PlayerToIcon(int LocA, int LocB)
    {
        //PlayGame play = new PlayGame();
        //int[,] Board = play.Board;
        int LocData = (Board[LocA, LocB]);
        if (LocData == 0) { return " "; }
        else if (LocData == 1) { return "X"; }
        else { return "O"; }
    }
}

и затем назовите это так:

var icon = myPlayer.PlayerToIcon(1, 1);

Из вашего отредактированного вопроса:

public class Interface
{
    PlayGame play = new PlayGame();
    public void GenMap()
    {
        string NewLine;
        Console.Clear();
        Console.WriteLine("    | A | B | C |");
        Console.WriteLine("-----------------");
        //new PlayGame(); (WHY??)
        for(int i=0;i<3;i++)
        {
            NewLine = System.String.Format("| {0} | {1} | {2} | {3} |",
                i+1, 
                /*play.*/PlayerToIcon(/*play, */i, 0), 
                /*play.*/PlayerToIcon(/*play, */i, 1), 
                /*play.*/PlayerToIcon(/*play, */i, 2));
            Console.WriteLine(NewLine);
            Console.WriteLine("-----------------");
        }
    }
    public string PlayerToIcon(int LocA, int LocB)
    {
        int[,] Board = play.Board;
        int LocData = (Board[LocA, LocB]);
        if (LocData == 0) { return " "; }
        else if (LocData == 1) { return "X"; }
        else { return "O"; }
    }
}

Это вывод, который я получаю в начале:

    | A | B | C |
-----------------
| 1 |   |   |   |
-----------------
| 2 |   |   |   |
-----------------
| 3 |   |   |   |
-----------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...