C#戦艦クラス/構造
-
19-09-2019 - |
質問
挨拶、im am新しいプログラミングおよび現在開発のクローンのゲーム戦艦.iを実装する必要があるとの艦隊5ます。これは何でしょうがないか
クラス細胞の状態のテーブルセル:
public class Cell
{
// class for holding cell status information
public enum cellState
{
WATER,
SCAN,
SHIPUNIT,
SHOT,
HIT
}
public Cell()
{
currentCell = cellState.WATER;
}
public Cell(cellState CellState)
{
currentCell = CellState;
}
public cellState currentCell { get; set; }
}
クラスGridUnit有テーブルセルの情報:
public class GridUnit
{
public GridUnit()
{
Column = 0;
Row = 0;
}
public GridUnit(int column, int row)
{
Column = column;
Row = row;
}
public int Column { get; set; }
public int Row { get; set; }
}
最後にクラスShipunitますので、上記のクラスとしてラッパーのための状態情報では、個々の細胞:
public class ShipUnit
{
public GridUnit gridUnit = new GridUnit();
public Cell cell = new Cell(Cell.cellState.SHIPUNIT);
}
現在私の考えを実施艦情報にギザギザにな配列のようになります:
ShipUnit[][] Fleet = new ShipUnit[][]
{
new ShipUnit[] {ShipUnit,ShipUnit,ShipUnit,ShipUnit,ShipUnit},
new ShipUnit[] {ShipUnit,ShipUnit,ShipUnit,ShipUnit},
new ShipUnit[] {ShipUnit,ShipUnit,ShipUnit}
new ShipUnit[] {ShipUnit,ShipUnit,ShipUnit}
new ShipUnit[] {ShipUnit,ShipUnit}
};
このアリーナ、日産スタジアムのコードは動作しません。で、アイデアです。
そこで問題になってい分野の国がどのような船舶の各ラインのギザギザ配列表やろではこの情報のすべての細胞情報です。
思考の実施にあたりの問題からです。
お願い致します。
解決
class Ship
{
ShipUnit[] shipUnits;
string type;
public Ship(int length, string type)
{
shipUnits = new ShipUnit[length];
this.type = type;
}
}
Ship[] fleet = new Ship[5];
fleet[0] = new Ship(5, "Carrier");
fleet[1] = new Ship(4, "Battleship");
fleet[2] = new Ship(3, "Submarine");
fleet[3] = new Ship(3, "Something else");
fleet[4] = new Ship(2, "Destroyer");
他のヒント
私はGridUnitsのすべてを保持し、私が所有しているグリッド・クラスを定義すると思います。そして、このグリッドはまた、リストを保持します。船はちょうどサイズ、向き、BowCellのような性質を持っているでしょう。グリッドに船を追加する場合、グリッドは、それに応じて装置の状態を設定することができます。
この方法は、あなたが)IsSunk(のような船のレベルに便利なメソッドを持つことができ、OccupiesUnit()、等...
なぜあなたはこのようなものを作成しないでください。
class Ship { public ShipUnits[] _SUParts; public String _strType; public Ship(String styType, int NbPart) { _SUParts = new ShipUnit[length]; _strType = strType; } }
言われていることを、私はすべてのメンバーがパブリック入れないでしょう。 I'deは値を変更するためにゲッター/セッターを使用する
私はあなたにも、船の名前を意味するタイプが想定している(駆逐艦などを。)
どのように多くの種類があります。実行時に固定または可変のことですか?
それはあまりにも多くを固定していない場合は、、あなたはおそらく、それぞれに別々の配列を使用する必要があります。彼らは可変である、あなたはタイプごとに一つだけの配列を持っている場合は、(enumShipUnitType、ShipUnit []の)一般的な辞書を使用することができます。
あなたはそのようにようにそれからKeyValuePairを取得することにより、辞書を反復処理することができます。
For Each kvp As KeyValuePair(Of enumShipUnitType, ShipUnit[]) In m_dictShipUnits
For each oShipUnit as Shipunit in kvp.Value
'Do whatever
Next
Next
class Ship {
public Size Size { get; set; }
public Orientation Orientation { get; set; }
public Point Position { get; set; }
public Boolean Sunk { get; set; }
public String Name { get; set; }
[...]
}
継承からの船を作成授業のような戦艦、巡洋艦などの異なる。追加"IsHit(ポーズ)"法との比較サイズ、方向、位置、撮影位置(矩形のクラスには多くの素敵な機能です。
class Grid {
private Size size = new Size(10, 10);
private List<Ship> ships = new List<Ship>();
private List<Point> shots;
[...]
}
を二つのグリッド(各プレイヤー)を追加して、撮影の方法と通話IsHitべての船舶を追加し、ショットになります。後に移動する場合毎の船はたはシュート)の設定を行船が撃沈されます。