-1
我創建一個命令行遊戲,其包括10×10陣列char
,表示這樣的:如何在C++數組中連續「佔用」元素?
0 1 2 3 4 5 6 7 8 9
0 . . . . . . . . . .
1 . . . . . . . . . .
2 . . . . . . . . . .
3 . . . . . . . b . .
4 . . A B C . 1 2 3 .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . C c 3 . .
8 . . . . . . . . . .
9 . . . . . . . . . .
.
每個表示在板的未佔用點與字母和數字是其上已經件播放。上邊緣和左邊緣的數字僅供參考。
爲了計算點數並確保棋子在正確的位置播放,我想創建與剛剛播放的棋子相鄰的連續棋子的「子陣列」。從上面的示例中,如果B
剛剛播放完畢,那麼該數組將包含A
,B
和C
。
我很難找到這個連續的子陣列的「開始」(最左邊)和「結束」(最右邊)部分。一旦我有了這些,很容易解決。很明顯,我可以從棋盤的一端開始,然後將任何不是.
的棋子添加到陣列中,但是最後我會看到該行中的所有棋子,而不僅僅是剛剛播放的棋子的旁邊的棋子。
我試過以下,但它仍然(由一個兩面關)打印輸出錯誤:
void Board::createHorizontalRun(int row, int column) {
int i = column;
int j = column;
while (array[row][i] != '.' && i >= 0 && i <= 9) {
i--;
}
while (array[row][j] != '.' && j >= 0 && j <= 9) {
j++;
}
cout << "run begins at " << i << endl;
cout << "run ends at " << j << endl;
}
我如何才能找到起點和相鄰的連續片的結束位置剛剛播放過的作品?
這聽起來像你要找的顏色填充:https://en.wikipedia.org/wiki/Flood_fill。也就是說,除非你只是尋找水平或垂直運行一個網格單元格寬度,在這種情況下,問題更簡單。 – NPE
拿出一張紙和一支筆。寫下來,用簡單的英語,簡而言之,邏輯句子,逐步實現你的算法的過程。 [在與你的橡皮鴨討論你提出的邏輯之後](https://en.wikipedia.org/wiki/Rubber_duck_debugging),只要你的橡皮鴨認同你的邏輯是正確的,只要把你寫下來的和直接的將其翻譯成代碼。任務完成。 –
請注意您的代碼如何成功標識「第一個」。靠近你的跑步「,並且你知道開始位置從來不是''。 – Caleth