/** * $RCSfile: ,v $ * $Revision: $ * $Date: $ * * Copyright (C) 2004-2011 Jive Software. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package battleship.gui; import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import org.jivesoftware.smack.PacketListener; import org.jivesoftware.smack.XMPPConnection; import org.jivesoftware.smack.filter.PacketExtensionFilter; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; import battleship.listener.ShipPlacementListener; import battleship.logic.GameBoard; import battleship.observer.Observeable; import battleship.observer.Observer; import battleship.packets.MoveAnswerPacket; import battleship.packets.MovePacket; public class GUI extends JPanel implements Observer{ private static final long serialVersionUID = -7538765009749015196L; private Display _display; private GameboardGUI _myfield; private GameboardGUI _theirfield; private JFrame _owner; private XMPPConnection _connection; private int _gameID; private GameBoard _gameboard; private ShipPlacementListener _splistener; public GUI(boolean imStarting, JFrame owner, XMPPConnection connection, int gameID) { setLayout(new BorderLayout()); _owner = owner; _connection = connection; _gameID = gameID; _gameboard = new GameBoard(imStarting); _display = new Display(); _myfield = new GameboardGUI(); _theirfield = new GameboardGUI(); JPanel West = new JPanel(new BorderLayout(0, 5)); JPanel wnorth = new JPanel(new BorderLayout()); wnorth.add(new JLabel("Their Board"), BorderLayout.NORTH); wnorth.add(_theirfield, BorderLayout.SOUTH); JPanel wsouth = new JPanel(new BorderLayout()); wsouth.add(new JLabel("My Board"), BorderLayout.NORTH); wsouth.add(_myfield); JPanel East = new JPanel(); West.add(wsouth, BorderLayout.SOUTH); West.add(wnorth, BorderLayout.NORTH); East.add(_display); add(East, BorderLayout.EAST); add(West, BorderLayout.WEST); _connection.addPacketListener(new PacketListener() { @Override public void processPacket(Packet packet) { MovePacket move = (MovePacket) packet.getExtension( MovePacket.ELEMENT_NAME, MovePacket.NAMESPACE); if (move.getGameID() == _gameID) { boolean opponentMadeHit = _gameboard.placeBomb(move.getPositionX(), move.getPositionY()); if(opponentMadeHit) { Message m = createAnswer(move, packet.getFrom()); _connection.sendPacket(m); } } } }, new PacketExtensionFilter(MovePacket.ELEMENT_NAME, MovePacket.NAMESPACE)); // Start placing of the Ships _splistener = new ShipPlacementListener(_display, _gameboard, _myfield); _splistener.addObserver(this); _myfield.initiateShipPlacement(_splistener); } private Message createAnswer(MovePacket incoming, String from) { Message answer = new Message(); answer.setTo(from); MoveAnswerPacket map = new MoveAnswerPacket(); map.setGameID(incoming.getGameID()); map.setPositionX(incoming.getPositionX()); map.setPositionY(incoming.getPositionY()); return answer; } @Override public void update(Observeable obs) { //TODO Initial ship placement is done // Start with normal moves obs.removeObserver(this); } }