※ 引述《money1943 (小豬)》之銘言:
: 小弟要做一個 5*5的矩陣
: setLayout(new GridLayout(5, 5));
: 擺滿按鈕
: 已宣告好五個不重複的隨機變數int sum[5]
: 要做類似踩地雷的功能
: 如果想做到例如點是..
: 0 1 5 6 7(隨機)
後來終於看懂了,一開始沒把上面這串當成是位置。
雖然我看過很多人都習慣用一維陣列處理這種問題,
不過我覺得二維陣列比較容易理解 (也比較容易處理邊緣問題)
所以這裡就先轉成二維吧,因此上述五個座標就變成:
(0, 0) (0, 1)
(1, 0) (1, 1) (1, 2)
假設現在要找到 (x, y) 的八個 neighbors,
你可以直接宣告兩組陣列: (向量)
int[] dx = {0, -1, -1, -1, 0, 1, 1, 1};
int[] dy = {-1, -1, 0, 1, 1, 1, 0, -1};
// 依序分別是 上, 左上, 左, ..., 右上
把 (x, y) 分別和這些向量相加,你就可已達到八個 neighbors 的座標了。
通常在四相鄰的圖中我比較愛用上面的方式,
如果是八相鄰的話我通常會這樣用:
for(int dx=-1;dx<=1;dx++)
for(int dy=-1;dy<=1;dy++)
if(dx!=0 || dy!=0){
// do something ...
}
剩下來你唯一要注意的,就是如何處理超出邊界的問題了,good luck!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.50.250
※ 編輯: tkcn 來自: 61.230.50.250 (06/16 15:24)
推
06/16 17:57, , 1F
06/16 17:57, 1F
推
06/16 21:43, , 2F
06/16 21:43, 2F
→
06/16 23:05, , 3F
06/16 23:05, 3F
→
06/17 00:44, , 4F
06/17 00:44, 4F
→
06/17 01:08, , 5F
06/17 01:08, 5F
→
06/17 01:10, , 6F
06/17 01:10, 6F
推
06/17 04:48, , 7F
06/17 04:48, 7F