簡體   English   中英

存儲積分的最佳方式

[英]Best way to store points

我正在創建一個類似戰艦的游戲。 我需要在電路板上存儲一個字段網格。 每個字段值都是其當前狀態 - 空/發貨。 我聲明了如下所示的二維數組:

//from createEmptyBoard() function in loop
playerBoard[x][y] = FIELD_EMPTY;

現在我想用類重寫代碼。 我定義了GameBoardField

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;
}

但現在我不知道如何通過坐標獲得一個字段。 尋找具有xy屬性的對象,我正在尋找循環不是最有效的方法。

如何存儲有可能通過坐標獲得一個字段的字段?

你可以在GameBoard上寫這樣的函數:

public getField(x, y) {
    return this.fields[x + this.verticalFields * y];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM