Kontakt

Fakturační údaje

IČ: 87189224, BÚ: 1958653063/0800

Contact info in QR code

Siege (Obkličovačka)

Informace

Stáhni a hraj!

  • Spustitelný soubor hry si stáhnou oba hráči
  • Zakladatel hry
    • V nabídce "Game > Create" vytvoří novou hru
    • Pošle protihráči svou IP adresu (zjistí ji v levém dolním rohu okna)
  • Protihráč
    • Jakmile obdrží IP adresu zakladatele hry, v nabídce "Game > Join" se připojí ke hře
  • Cílem je zabrat co nejvíce soupeřových polí.
  • Pozn.: Síťové spojení funguje na LAN (lokální) síťi a na počítačích s veřejnou IP adresou.

Zdrojové kódy (zip)

Zdrojové kódy (prohlížení)

  1: package siege.gui.views;
  2: 
  3: import java.awt.Color;
  4: import java.awt.Dimension;
  5: import java.awt.Font;
  6: import java.awt.event.ActionEvent;
  7: import java.awt.event.ActionListener;
  8: import java.util.Observable;
  9: import java.util.Observer;
 10: import javax.swing.BorderFactory;
 11: import javax.swing.Box;
 12: import javax.swing.BoxLayout;
 13: import javax.swing.JButton;
 14: import javax.swing.JPanel;
 15: import javax.swing.JScrollBar;
 16: import javax.swing.JScrollPane;
 17: import javax.swing.JTextArea;
 18: import javax.swing.JTextField;
 19: import javax.swing.border.EtchedBorder;
 20: import siege.core.Game;
 21: import siege.util.Log;
 22: 
 23: /**
 24:  * Chat view
 25:  * 
 26:  * @author Ondrej Macoszek, ondra@macoszek.cz
 27:  */
 28: public class ChatView extends JPanel implements Observer
 29: {
 30:     /**
 31:      * Component sizes
 32:      */
 33:     public static Dimension size = new Dimension(500, 150);
 34:     public static Dimension chatAreaSize = new Dimension(500, 110);
 35: 
 36:     /**
 37:      * Form fields
 38:      */
 39:     public JTextArea chatArea;
 40:     public JScrollPane chatAreaScrollPane;
 41:     public JTextField inputField;
 42:     public JButton sendButton;
 43: 
 44:     /**
 45:      * Constructor
 46:      */
 47:     public ChatView()
 48:     {
 49:         super();
 50: 
 51:         // panel settings
 52:         setPreferredSize(size);
 53:         setBackground(Color.white);
 54:         setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
 55:         setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
 56:         
 57:         // chat text area
 58:         chatArea = new JTextArea();
 59:         chatArea.setFont(new Font("SansSerif", Font.TRUETYPE_FONT, 14));
 60:         chatArea.setLineWrap(true);
 61:         chatArea.setWrapStyleWord(true);
 62:         chatArea.setEditable(false);
 63: 
 64:         // wrapper (scrolling ability) for chat 
 65:         chatAreaScrollPane = new JScrollPane(chatArea);
 66:         chatAreaScrollPane.setPreferredSize(chatAreaSize);
 67:         chatAreaScrollPane.setBackground(chatArea.getBackground());
 68:         chatAreaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
 69:         chatAreaScrollPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
 70: 
 71:         // input field
 72:         inputField = new JTextField();
 73:         inputField.setFont(new Font("SansSerif", Font.TRUETYPE_FONT, 14));
 74:         inputField.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
 75:         sendButton = new JButton("Odeslat");
 76:         sendButton.addActionListener(new ActionListener() {
 77:             public void actionPerformed(ActionEvent e) {
 78:                 if(isEnabled()) {
 79:                     handleSentMessage(inputField.getText());
 80:                 }
 81:             }
 82:         });
 83:         inputField.addActionListener(new ActionListener() {
 84:             public void actionPerformed(ActionEvent e) {
 85:                 if(isEnabled()) {
 86:                     handleSentMessage(inputField.getText());
 87:                 }
 88:             }
 89:         });
 90: 
 91:         // wrapper for input field
 92:         JPanel inputPane = new JPanel();
 93:         inputPane.setBackground(Color.white);
 94:         inputPane.setLayout(new BoxLayout(inputPane, BoxLayout.LINE_AXIS));
 95:         inputPane.add(inputField);
 96:         inputPane.add(Box.createRigidArea(new Dimension(5, 0)));
 97:         inputPane.add(sendButton);
 98: 
 99:         // add wrappers to layout
100:         add(chatAreaScrollPane);
101:         add(Box.createRigidArea(new Dimension(0, 5)));
102:         add(inputPane);
103:     }
104: 
105:     /**
106:      * Inititalize chat. Reset previous text.
107:      */
108:     public void initialize()
109:     {
110:         // reset chat
111:         setEnabled(false);
112:         chatArea.setText("");
113:         inputField.setText("");
114:         
115:         // add obsever
116:         Game.getInstance().addObserver(this);
117:         Log.message(this, "initialize");
118:     }
119: 
120: 
121:     public void handleSentMessage(String message)
122:     {
123:         Game game = Game.getInstance();
124:         game.sendMessage(message);
125:         inputField.setText("");
126:         chatArea.append("<"+game.getLocalPlayer().getName()+"> "+message+"\n");
127:         scrollToBottom();
128:     }
129: 
130:     public void handleReceivedMessage(String message)
131:     {
132:         Game game = Game.getInstance();
133:         chatArea.append("<"+game.getRemotePlayer().getName()+"> "+message+"\n");
134:         scrollToBottom();
135:     }
136: 
137:     public void scrollToBottom()
138:     {
139:         JScrollBar verticalScrollbar = chatAreaScrollPane.getVerticalScrollBar();
140:         verticalScrollbar.setValue(verticalScrollbar.getMaximum());
141:     }
142: 
143:     /**
144:      * Overriden setEnabled method. Now with ability to enable/disable send button also.
145:      */
146:     @Override
147:     public void setEnabled(boolean enabled) {
148:         super.setEnabled(enabled);
149:         if(enabled) {
150:             sendButton.setEnabled(true);
151:         } else {
152:             sendButton.setEnabled(false);
153:         }
154:     }
155: 
156:     /**
157:      * Update on game status change
158:      */
159:     public void update(Observable o, Object arg) {
160:         if(o instanceof Game) {
161:             Game game = (Game)o;
162:             switch(game.getStatus()) {
163:                 case CONNECTED:
164:                     setEnabled(true);
165:                     break;
166:                 case END:
167:                     setEnabled(false);
168:                     break;
169:             }
170:         }
171:     }
172: }
173: