[英]Best way to store points
我正在創建一個類似戰艦的游戲。 我需要在電路板上存儲一個字段網格。 每個字段值都是其當前狀態 - 空/發貨。 我聲明了如下所示的二維數組:
//from createEmptyBoard() function in loop
playerBoard[x][y] = FIELD_EMPTY;
現在我想用類重寫代碼。 我定義了GameBoard和Field類
類GameBoard (TypeScript):
class GameBoard {
private verticalFields: number;
private horizontalFields: number;
private fields = Array<Field>();
constructor(verticalFields: number, horizontalFields: number) {
this.verticalFields = verticalFields;
this.horizontalFields = horizontalFields;
}
private initializeEmptyFields() {
for (let x = 0; x < this.verticalFields; x++) {
for (let y = 0; y < this.horizontalFields; y++) {
this.addField(x, y);
}
}
}
private addField(x, y) {
this.fields.push(new Field(x, y));
}
//...
類字段 (TypeScript):
class Field {
private x: number;
private y: number;
private status: number;
private static readonly FIELD_EMPTY = 0;
private static readonly FIELD_SHIP = 1;
private static readonly FIELD_MISS = 2;
private static readonly FIELD_HIT = 3;
constructor(x, y) {
this.x = x;
this.y = y;
this.status = Field.FIELD_EMPTY;
}
public setAsEmpty() {
this.status = Field.FIELD_EMPTY;
}
public setAsShip() {
this.status = Field.FIELD_SHIP;
}
在另一種方法中,我檢查用戶點擊的字段是空的還是有船。 在舊代碼中我以這種方式做到了:
function fieldIsEmpty(x,y) {
return playerBoard[x][y] == FIELD_FIELD_EMPTY;
}
但現在我不知道如何通過坐標獲得一個字段。 尋找具有x和y屬性的對象,我正在尋找循環不是最有效的方法。
如何存儲有可能通過坐標獲得一個字段的字段?
你可以在GameBoard
上寫這樣的函數:
public getField(x, y) {
return this.fields[x + this.verticalFields * y];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.