Как передать объект из моего основного в мой класс? - PullRequest
0 голосов
/ 22 октября 2011

Я учусь на внеклассном проекте, и мой профессор попросил меня создать программу для занятий.

Итак, я создал класс "Piece" со следующим кодом:

namespace GG
{
    class Piece
    {
        public int rank;
        public int player; 
    }
}

Я создал его в своей основной программе (форме), вот так:

namespace GG
{
    public partial class frmPGame : Form
    {
        public frmPGame()
        {
            InitializeComponent();
        }

        Piece[,] gameBoard = new Piece[9, 8];

        public void clearGameBoard()
        {
            for (int y = 0; y < 8; y++)
            {
                for (int x = 0; x < 9; x++)
                {
                    gameBoard[x, y] = new Piece();
                    gameBoard[x, y].rank = -1;
                    gameBoard[x, y].player = 0;
                }
            }
        }
    }
}

В любом случае, форма имеет изображения, и, в зависимости от того, что находится внутри созданного мной 2D-массива, изображение может измениться. Тем не менее, я также занимаюсь математикой в ​​своей основной программе, что делает ее загроможденной и длинной. Я хотел бы спросить, могу ли я как-то передать объект gameBoard другому классу вместе с его содержимым.

По сути, поток программы прямо сейчас:

  • Создать объект
  • Выполнить математику в Main используя Object
  • Изменить форму изображения

И я хотел бы, если возможно, изменить его на:

  • Создать объект
  • делать математику в классе математики
  • Возврат / Передача Объекта из математического класса в Main
  • Изменить форму изображения

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

Могу ли я дать совет по этому поводу, пожалуйста? Создаю ли я экземпляр класса "Piece" в моем "mathClass"?

Ответы [ 2 ]

1 голос
/ 22 октября 2011

Я предложу два варианта. Помните, что массивы являются ссылочными типами. Если вы передадите один из них методу, метод может изменить его напрямую.

Первый вариант : Здесь игровое поле не «описывается» как полноценный объект. Это массив с некоторыми (статическими) служебными методами, помещенными в класс GameBoardMath.

namespace GG
{
    public partial class frmPGame : Form
    {
        public frmPGame()
        {
            GameBoardMath.ClearGameBoard(gameBoard); // Clear the game board

            InitializeComponent();
        }

        Piece[,] gameBoard = new Piece[9, 8];    
    }

    public class GameBoardMath
    {
        public static void ClearGameBoard(Piece[,] gameBoard)
        {
            int lenX = gameBoard.GetLength(0);
            int lenY = gameBoard.GetLength(1);

            for (int y = 0; y < lenY; y++)
            {
                for (int x = 0; x < lenX; x++)
                {
                    gameBoard[x, y] = new Piece();
                    gameBoard[x, y].rank = -1;
                    gameBoard[x, y].player = 0;
                }
            }
        }
    }
}

Второй вариант: Здесь мы считаем GameBoard "полным" классом.

public class GameBoard
{
    public readonly Piece[,] Board;

    public GameBoard(int x, int y)
    {
        Board = new Piece[x, y];

        ClearGameBoard();
    }

    public void ClearGameBoard()
    {
        int lenX = Board.GetLength(0);
        int lenY = Board.GetLength(1);

        for (int y = 0; y < lenY; y++)
        {
            for (int x = 0; x < lenX; x++)
            {
                Board[x, y] = new Piece();
                Board[x, y].rank = -1;
                Board[x, y].player = 0;
            }
        }
    }
}

Чтобы использовать его, в вашем Form:

GameBoard gameBoard = new GameBoard(9, 8);
1 голос
/ 22 октября 2011

Создайте класс GameBoard, который создает Pieces в конструкторе или некотором методе Initialize.Затем вы можете перебирать фрагменты в своей основной форме и рисовать картинки.

См. Реализацию Dragger Game на CodePlex

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...