Domanda

Sto sviluppando un gioco basato sim griglia in Java, e mi chiedevo se esiste un modo standard di fare quanto segue. Ho un pannello che è il pannello di gioco, e ci sono molte cose diverse, che potrebbero accadere quando il pannello viene cliccato. Ad esempio, quando la costruzione di una stanza, ci sono diverse fasi, in cui si trascina il mouse e cliccando sinistra avrà diverse azioni. In questo momento, il modo in cui l'ho fatto, è quello di utilizzare booleani per verificare ciò che è in fase di costruzione, e quindi a che punto è a.

C'è un modo di gestire qualcosa come questo meglio o standard? Ho avuto una rapida di Google, ma come ho detto prima, la gente su Stack Overflow dare sempre un migliore, più rilevante, fino ad oggi risposta.

Mi considero ancora piuttosto nuovo a Java.

Grazie in anticipo.

È stato utile?

Soluzione

Si potrebbe provare a guardare in qualcosa di simile al modello di strategia.

In sostanza, si inizia facendo clic sul pulsante stanza sulla barra degli strumenti. La barra degli strumenti attraversa e racconta la griglia di utilizzare l'ActionListener 'posto stanza'. Presumibilmente la rimozione di qualsiasi precedente ascoltatore azione che stava ascoltando

Il luogo stanza ActionListener avrebbe a sua volta implementare tutte la cosa interessante della logica per clic sinistro / destro, trascinamento, ecc

Se si dispone di più fasi per la costruzione di un ambiente (per esempio, mettendo porte, Windows, poi porte trappola); gli ascoltatori azione sarebbe responsabile per consegnare il controllo fuori alla fase successiva: un po 'di una macchina a stati finiti.

Quindi, iniziare facendo clic su 'stanza' pulsante, viene aggiunto 'posto stanza' ascoltatore. Trascinare fuori l'area che si desidera che la camera di essere, 'luogo stanza' modifica lo stato del gioco, poi cambia l'ActionListener per chi ascolta 'Place finestre'. All'infinito ... fino al completamento.

Uno molto semplice (non compilabile) esempio:

class GridPanel extends JPanel
{
    void SetMouseListener(MouseListener newListener)
    {
        for(MouseListener ml : getMouseListeners())
            removeMouseListener(ml);
        addMouseListener(newListener);
    }
}

class ControlPanel extends JPanel
{
    GridPanel gameGrid;

    void OnRectangleButtonClicked(some stuff)
    {
        gameGrid.SetMouseListener(new PlaceRoomListener(gameGrid));
    }
}

class PlaceRoomListener extends MouseAdapter
{
    GridPanel gameGrid;

    //constructor, etc

    void OnClick(mouse event)
    {
        gameGrid.doCoolStuff();
        gameGrid.SetMouseListener(new PlaceTrapDoorListener());
    }
}

//etc

Ora, che ad esempio non compilabile da parte, Pyrolistical ha ancora un punto: in genere non si vuole combinare il tuo modello di gioco e l'interfaccia grafica in un unico glob di classi. Si desidera che il modello di separato dalla GUI, e di manipolare attraverso un'interfaccia ben definita.

(Inoltre, ci sono probabilmente i metodi migliori per andare sulla rimozione del listener del mouse poi basta rimuovere in modo casuale a tutti gli ascoltatori ... Ero in un po 'di fretta, mi spiace)

Altri suggerimenti

Sembra che è necessario definire il modello di gioco / Stato e tenerlo separato dal tuo azioni del mouse.

Stai usando MVC?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top