私は最初のC#アプリを作成していますが、問題の分離に少し問題があります。コンセプトは理解していますが、正しくやっているのかわかりません。私の質問を説明する簡単な例としてこれを持っています。ゲームなどのアプリには、プログラムやゲームなどのメインループを実行するメインクラスがあります。私の質問は、このクラスのクラスのすべてのインスタンスへのすべての参照を維持し、それがそれらが相互作用する唯一の方法にすることですか?
たとえば、プレーヤー、カード、ボードを使用したカードゲームです。プレーヤーがカードをボードに置きたいが、PlayerクラスにはカードのList <>しかなく、ゲームボードについて何もわからないとしましょう。ただし、メインのGameクラスは、プレーヤー、カード、およびゲームボードについて知っています。ボードにカードを配置するのがゲームクラス次第なのか、それとも、プレーヤーのアクションであるため、それはプレーヤークラス内にあるべきであるということの方が理にかなっています。
例:
public class Game{
private GameBoard gameBoard;
private Player[] players;
public Game(){
gameBoard = new GameBoard(10,10);
Player player1 = new Player();
Player player2 = new Player();
players = {player1, player2};
}
// Create method here?
public void PlayerPlaceCard(int x, int y, int cardIndex){
gameBoard.grid[1,1] = player1.cards[cardIndex];
}
}
public class Player {
public List<Cards> cards = new List<Cards>();
public Player(){
}
// Or place method here?
public PlaceCard(Card card, int x, int y, GameBoard gameBoard){
}
}
public class GameBoard{
public Card[,] grid;
public GameBoard(int x, int y){
// Make the game board
}
}
public class Card{
public string name;
public string value;
}
Gameはすべてのことを知っているので、私にとっては、Gameにメソッドを持つ方が理にかなっています。しかし、コードを追加していくと、ゲームがかなり肥大化し、PlayerDoesThis()関数をたくさん書いています。
アドバイスをありがとう