我正在用Java編寫一個基本的tic tac腳趾遊戲。 在我的Board類中,我有一個揮杆窗口,它確定按下哪個按鈕。 TttGame是具有Board對象的類。如何簡單地使用Java發送事件?
該董事會的目標不是作爲一個功能齊全的井字棋板,而是作爲TttGame類控制所有邏輯的框架。因此,我需要董事會發送某種事件,當按鈕被按下時,按鈕被按下到TttGame類。
這樣做的最簡單方法是什麼?
編輯:我發現了一種叫做觀察者模式 - 這是最簡單的這樣做的方法嗎?
我正在用Java編寫一個基本的tic tac腳趾遊戲。 在我的Board類中,我有一個揮杆窗口,它確定按下哪個按鈕。 TttGame是具有Board對象的類。如何簡單地使用Java發送事件?
該董事會的目標不是作爲一個功能齊全的井字棋板,而是作爲TttGame類控制所有邏輯的框架。因此,我需要董事會發送某種事件,當按鈕被按下時,按鈕被按下到TttGame類。
這樣做的最簡單方法是什麼?
編輯:我發現了一種叫做觀察者模式 - 這是最簡單的這樣做的方法嗎?
是的,觀察者模式是你想在這裏應用。創建一個監聽器接口(BoardListener
)也許是這樣的:
public interface BoardListener {
public void squareSelected(int x, int y);
}
然後通過他們保持聽衆的Set
或List
在Board
類和週期,呼籲squareSelected每個,選擇一個正方形的時候。
但是我會查看模型 - 視圖 - 控制器模式,其中視圖監聽模型的更改,並且控制器檢測用戶操作並相應地更改模型。
我已經在我的理事會課上做過 - 我需要讓理事會班級通知遊戲類 – 2010-06-04 14:48:37
啊,誤解了。答案已更新。 – 2010-06-04 14:51:32
警告詞:對於Board類中的監聽器列表,請使用CopyOnWriteArrayList。這可以防止在電路板通過偵聽器循環的情況下發生ConcurrentModificationException,並且在迭代過程中偵聽器嘗試刪除自身。 – Adamski 2010-06-04 14:53:22
我會建議改變你的設計了一下。掌握遊戲邏輯和跟蹤棋盤上的棋子位置都可以在「引擎」(或一系列沒有視覺顯示的類)中完成。
然後,您將擁有一箇中間班級,用於將所有片段位置傳送到可互換的顯示類。它也可以處理從顯示類到引擎的任何通信(例如點擊以放置X或O)
P.S.我正在考慮跳棋,而不是打字時打字,但設計仍然適用
在另一個筆記...不打字「TttGame」只是讓你瘋了嗎? – Timothy 2010-06-04 14:49:03