작성하려는 작은 게임 프로그램에 문제가 있습니다. 여러 유형의 게임에 보드를 사용할 수 있도록 "T"유형의 2D 배열을 보유하는 템플릿 클래스 "Board"를 만들었습니다. 문제는 게임 도중 배열 (T 보드 [SIZE] [SIZE])을 수정해야한다는 점입니다. 또 다른 클래스 "Othello"에는 두 개의 변수를 포함하는 구조체 인 "Tile"유형의 "Board"가 있습니다. "Player"(다른 클래스에 의해 정의 됨)는 어떤 플레이어가 타일을 제어하고 있는지를 나타내며 두 개의 bool 변수 "black "및"white "는 두 플레이어가 이동할 수 있는지 여부를 나타냅니다. 따라서 이것은 기본적으로 다음과 같습니다.
판:
int SIZE = 8;
template<class T>
class Board {
public:
// class functions
private:
T board[SIZE][SIZE]
};
오델로 :
class Othello {
public:
// class functions
private:
// function helpers
struct Tile {
Player current; // current tile holder (BLACK, WHITE, NEUTRAL)
bool black; // can black capture?
bool white; // can white capture?
unsigned location; // number of the tile, counted from left to right
};
Board<Tile> othelloBoard; // board for the game
int bCounter; // counter for black units
int wCounter; // counter for white units
User playerOne; // information for first player
User playerTwo; // information for second player
};
문제는 "Othello"클래스를 통해 직접 "Board"를 수정할 수 없다는 것입니다 (Othello 클래스를 통해 보드에 액세스 할 수 없으므로 othelloBoard.board [x] [y] .current = WHITE; 예를 들어 작동하지 않음), 그러나 유형은 무엇이든 될 수 있기 때문에 "보드"내에서 수정 자 함수를 정의 할 수 없습니다. 나는 이것을 어떻게 할 것인지에 대해 머리를 감쌀 수 없습니다. 어쩌면 정말 간단한 것을 놓치고 있을지도 모릅니다. 이것은 학교 프로젝트가 아닙니다. 저는 첫 번째 C ++ 과정에서 이전 프로젝트를 다시 방문하고 직접 다시 빌드하려고합니다. 도움을 주셔서 감사합니다!
문제는 이사회가 무엇입니까? 그리고 어떤 추상화를 제공합니까 (있는 경우)? 여기에 클래스 기능을 표시하지 않았으므로 지금은 표시하지 않습니다. 당신이 그것을 사용하려고 할 때 그것은 꽤 쓸모없는 것 같습니다. 어쨌든 매우 얕은 캡슐화를 사용하면 Tiles에 대한 접근자를 제공 할 수 있습니다.
template<class T, int SIZE = 8>
class Board {
public:
T &tileAt(int x, int y) {
assert(x>=0 && x < SIZE && y>=0 && y<SIZE);
return board(x, y);
}
// class functions
private:
T board[SIZE][SIZE]
};
(내가 SIZE를 템플릿 매개 변수로 옮겼으므로 향후 Tic-Tac-Toe 게임에서 크기를 변경하는 다른 버전의 템플릿을 인스턴스화 할 수 있습니다.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다