Package com.barrybecker4.game.multiplayer.set.ui

Source Code of com.barrybecker4.game.multiplayer.set.ui.SetViewerMouseListener

/** Copyright by Barry G. Becker, 2000-2011. Licensed under MIT License: http://www.opensource.org/licenses/MIT  */
package com.barrybecker4.game.multiplayer.set.ui;

import com.barrybecker4.game.common.ui.viewer.GameBoardViewer;
import com.barrybecker4.game.common.ui.viewer.ViewerMouseListener;
import com.barrybecker4.game.multiplayer.set.Card;
import com.barrybecker4.game.multiplayer.set.SetController;
import com.barrybecker4.game.multiplayer.set.SetPlayer;
import com.barrybecker4.game.multiplayer.set.ui.render.SetGameRenderer;

import javax.swing.*;
import java.awt.event.MouseEvent;
import java.util.List;

/**
*  Mouse handling for set game.
*
@author Barry Becker
*/
public class SetViewerMouseListener extends ViewerMouseListener {

    private Card currentlyHighlightedCard_ = null;

    /**
     * Constructor.
     */
    public SetViewerMouseListener(GameBoardViewer viewer) {
        super(viewer);
    }


    /**
     * make the human move and show it on the screen,
     * then depending on the options, the computer may move.
     */
    @Override
    public void mouseClicked(MouseEvent e) {

        SetGameViewer viewer = (SetGameViewer)viewer_;

        if (playerSelected()) {

            SetGameRenderer renderer = (SetGameRenderer)viewer.getBoardRenderer();
            Card card = renderer.findCardOver(viewer_.getBoard(), e.getX(), e.getY(),
                                              viewer.getWidth(), viewer.getHeight());
            if (card != null) {
               card.toggleSelect();
               viewer_.repaint();
            }
            notifyIfSetSelected();
        }
    }


    @Override
    public void mouseMoved(MouseEvent e) {

        SetGameViewer viewer = (SetGameViewer)viewer_;
        SetGameRenderer renderer = (SetGameRenderer)viewer.getBoardRenderer();
        Card card =
             renderer.findCardOver(viewer.getBoard(), e.getX(), e.getY(),
                                   viewer.getWidth(), viewer.getHeight());

        boolean changed = card != currentlyHighlightedCard_;

        if (changed) {

            if (currentlyHighlightedCard_ != null) {
                currentlyHighlightedCard_.setHighlighted(false);
            }
            if (card != null) {
                currentlyHighlightedCard_ = card;
                currentlyHighlightedCard_.setHighlighted(true);
            } else {
                currentlyHighlightedCard_ = null;
            }

            viewer.repaint();
        }
    }


    /**
     * A player must be selected before you can try to select a set.
     * @return true if a player is currently selected.
     */
    private boolean playerSelected() {
        if (viewer_.getController().getCurrentPlayer() == null) {
            JOptionPane.showMessageDialog(viewer_,
                    "Before you can select a set, you must specify a player on the right.");
            return false;
        }
        return true;
    }


    /**
     * if there are 3 cards selected. Check to see if it constitutes a set.
     * if it does, show a message to that effect, unselect them, delete them and add 3 more from the deck.
     * if not, then show a message, and deselect them.
     */
    private void notifyIfSetSelected() {

        SetGameViewer viewer = (SetGameViewer)viewer_;
        SetController c = (SetController)viewer.getController();

        List<Card> selectedCards = viewer.getSelectedCards();
        if (selectedCards.size() == 3) {

            SetPlayer p = ((SetPlayer)c.getCurrentPlayer());
            if (Card.isSet(selectedCards)) {
                JOptionPane.showMessageDialog(viewer_, "Congratulations, you found a set!");

                p.incrementNumSetsFound();
                c.removeCards(selectedCards);
                c.addCards(3);

            } else {
                JOptionPane.showMessageDialog(viewer_, "NO! that is not a set.");
                p.decrementNumSetsFound();
                c.gameChanged();
            }
            deselectCards(selectedCards);
            c.setCurrentPlayer(null);
            viewer_.repaint();
        }
    }

    private void deselectCards(List<Card> cards) {

        for (Card card : cards) {
            card.setSelected(false);
        }
    }

}
TOP

Related Classes of com.barrybecker4.game.multiplayer.set.ui.SetViewerMouseListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.