簡體   English   中英

檢查二維數組中的相鄰圖塊

[英]Checking adjacent tiles in 2-dimensional array

所以我試圖用 Java 制作一個連接四的游戲,而不是我連接 6 而不是 4。

我有一個二維數組和 X 數量的玩家。 我必須檢查連續 6 個塊(水平、垂直和對角線)是否由同一玩家標記。 如果是,程序應該打印誰贏了。

現在,我在檢查或確定誰獲勝方面沒有問題,盡管在我的一生中,我無法弄清楚如何防止程序在嘗試檢查數組外的塊時崩潰。

現在,我試圖避免使用 try-catch 或一個接一個地執行 8 個循環,而是對所有方向使用一種方法,只是參數有所變化,但我似乎無法使其工作:\\

有沒有人對這可能如何工作有任何建議?

我是編程的初學者,我可能錯過了一些東西,所以這就是我尋求幫助的原因:)

干杯

編輯:這是代碼。 它有點長,這就是為什么我想縮短它並使其以某種方式工作。 Terminal 類與 System.out.println 類相同。

void checkIfPlayerWins(Field field, Integer rowNumber, Integer colNumber) {
    Integer counter = 1;

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber, colNumber + i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber - i, colNumber + i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber - i, colNumber)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber - i, colNumber - i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber, colNumber - i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber + i, colNumber - i)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber + i, colNumber)) {
            counter++;
        } else {
            break;
        }
    }

    for (int i = 1; i <= 6; i++) {
        if (field.isOccupied(rowNumber + i, colNumber + i)) {
            counter++;
        } else {
            break;
        }
    }

    if (counter == 6) {
        Terminal.printLine("");
    }
}

這是 isOccupied 方法

boolean isOccupied(Integer x, Integer y) {
    return !this.field[x][y].equals("**");

}

您可以簡單地處理您嘗試在isOccupied方法中檢查Field是否在無效坐標處被占用的情況:

boolean isOccupied(Integer x, Integer y) {
    if(x < 0 || y < 0 || x >= numberOfColumns || y >= numberOfRows) {
        // Attempting to check outside the grid: it's non-occupied.
        return false;
    }

    return !this.field[x][y].equals("**");
}

暫無
暫無

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

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