mvc design で gui を使ってチェス ゲームを書いています。
ステップ 1: メイン メニューが表示され、ゲーム MOD を選択します。
ステップ 2: 選択すると、メイン メニューが閉じて新しいウィンドウが開き、ボードとピースが表示されます。次に、マウスでプレイします。
ステップ 1 の場合。actionEvent を使用して、クリックしたボタンの文字列を確認します。たとえば、標準ゲームのボタンがあり、モデルが dataBoard を設定し、observer(=view) に通知します。
ステップ 2 の場合。私は mouseEvent を使用し、相対座標 x/y をチェックします。モデルはその動作を実行し、ピースを移動できるかどうかを判断します。
2 つの更新メソッドを表示したいと考えています。1 つは 用step 1
、もう 1 つは 用step 2
です。現在、常に最初の更新に移動します。
// this is in the model, initializing once you chose a game mod,
// this is for the first step.
public void initializeGame(String givenString){
abstractGame = factoryGame.createGame(givenString);
abstractGame.startPlaying(boardTest);
setChanged();
notifyObservers(5);
}
// this is in the model, doing stuff, this is for the second step.
public boolean checkGivenCoordinates(int sourceRow, int sourceColumn, int destinationRow, int destinationColumn) throws IncorrectCoordinatesException, IncorrectColorException, InvalidMoveException
{
if(abstractGame.checkCorrectCoordinates(sourceRow, sourceColumn, destinationRow, destinationColumn) == true)
{
abstractGame.checkMove(sourceRow, sourceColumn, destinationRow, destinationColumn);
int [] changeView = {sourceRow, sourceColumn, destinationRow, destinationColumn};
System.out.println("Model : in the move ");
setChanged();
notifyObservers(changeView);
return true;
}
else
throw new IncorrectCoordinatesException();
}
// Called from the Model
public void update(Observable obs, Object obj) { // this is the one it always goes to now.
//who called us and what did they send?
System.out.println ("First update View : Observable is " + obs.getClass() + ", object passed is " + obj.getClass());
} //update()
// Called from the Model
/* this is for step 2, but is not invoked.
The array I send holds 4 ints, source row/column and destination row/column.
this is what I do in model just prior to notifying,
supposed to go to step 2's update method,
but as stated, it doesnt.
*/
public void update(Observable obs, int[] obj) {
//who called us and what did they send?
System.out.println ("Second update View : Observable is " + obs.getClass() + ", object passed is " + obj.getClass());
graphBoardView.setMove(obj[0], obj[1], obj[2], obj[3]);
} //update()
それで、
1) 1 つのクラスで複数のアップデートを行うことはできますか?
2)もしそうなら、どうすれば正しい更新方法に通知することができますか?
3) q1 が不可能な場合、どうすればこれを回避できますか?
4) オブジェクト obj が原因で、常に最初のオブジェクトに移動する可能性がありますか?
前もってありがとう、アリエル。