Galera eu tô com uma dificuldade imensa a implementar um servidor para rodar como multijogador(Servidor e 2 clientes) onde o servidor fica responsável pelo “monitoramento” de enviar para o outro cliente a jogada do primeiro e definir se alguém venceu, enviando a mensagem aos dois.
segue abaixo os códigos feitos até agora:
package jogo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
public class JogoDaVelha extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private final int jogador_1 = 1;
private final int jogador_2 = 2;
private int jogadorVez = jogador_1;
private int rodadas = 0;
JPanel pTela= new JPanel(new GridLayout(3, 3, 10, 10));
Bloco[] blocos = new Bloco[9];
//image
ImageIcon iconCirculo = new ImageIcon(getClass().getResource("CIRCLE.png"));
ImageIcon iconX = new ImageIcon(getClass().getResource("X.png"));
//
JLabel lInformacao = new JLabel("Jogador" + jogador_1);
public JogoDaVelha() {
configurarTela();
configurarJanela();
}
public void configurarTela() {
add(BorderLayout.CENTER,pTela);
add(BorderLayout.NORTH,lInformacao);
pTela.setBackground(Color.BLACK);
lInformacao.setFont(new Font("Arial",Font.BOLD,35));
lInformacao.setForeground(new Color(0, 0, 205));
lInformacao.setHorizontalAlignment(SwingConstants.CENTER);
for(int i=0; i<9; i++) {
Bloco bloco = new Bloco();
blocos[i] = bloco;
pTela.add(bloco);
}
}
public void mudarVez() {
if (jogadorVez == 1) {
jogadorVez = 2;
lInformacao.setText("Jogador 2");
lInformacao.setForeground(Color.RED);
} else {
jogadorVez = 1;
lInformacao.setText("Jogador 1");
lInformacao.setForeground(new Color(0, 0, 205));
}
}
public boolean testarVitoria(int player) {
if(blocos[0].quem == player && blocos[1].quem == player && blocos[2].quem == player) {
return true;
}
if(blocos[3].quem == player && blocos[4].quem == player && blocos[5].quem == player) {
return true;
}
if(blocos[6].quem == player && blocos[7].quem == player && blocos[8].quem == player) {
return true;
}
if(blocos[0].quem == player && blocos[3].quem == player && blocos[6].quem == player) {
return true;
}
if(blocos[1].quem == player && blocos[4].quem == player && blocos[7].quem == player) {
return true;
}
if(blocos[2].quem == player && blocos[5].quem == player && blocos[8].quem == player) {
return true;
}
if(blocos[0].quem == player && blocos[4].quem == player && blocos[8].quem == player) {
return true;
}
if(blocos[2].quem == player && blocos[4].quem == player && blocos[6].quem == player) {
return true;
}
return false;
}
public void BlockButton(int block) {
//desbloqueando botoes
if (block == 1) {
for (int i=0; i<9; i++) {
blocos[i].setEnabled(true);
}
}
//bloqueando botoes
if (block == 2) {
for (int i=0; i<9; i++) {
blocos[i].setEnabled(false);
}
}
}
public void configurarJanela() {
setTitle("Jogo da Velha");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(600, 600);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new JogoDaVelha();
}
public class Bloco extends JButton {
private static final long serialVersionUID = 1L;
int quem = 0;
public Bloco() {
setBackground(Color.WHITE);
addActionListener(e->{
if (quem==0) {
if(jogadorVez == jogador_1) {
setIcon(iconCirculo);
quem = jogador_1;
} else {
setIcon(iconX);
quem = jogador_2;
}
if(testarVitoria(quem)) {
JOptionPane.showMessageDialog(null,"Jogador "+quem+" Venceu!");
System.exit(0);
}
rodadas++;
if(rodadas == 9) {
JOptionPane.showMessageDialog(null,"Deu velha. Ninguém venceu!");
System.exit(0);
}
mudarVez();
}
});
}
}
}
o código de servidor:
package servidor;
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class Servidor {
public static void main(String[] args) throws IOException {
ServerSocket socketServidor = new ServerSocket(5555);
System.out.println("Servidor criado.");
Socket socket = socketServidor.accept();
System.out.println("Nova conexão com o cliente "
+ socket.getInetAddress().getHostAddress());
socket.close();
socketServidor.close();
}
}
o código de cliente:
package jogo;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Cliente {
private static JogoDaVelha jogo = new JogoDaVelha();
public static void main(String[] args) throws UnknownHostException, IOException {
System.out.println("Conectando com servidor...");
Socket socketCliente = new Socket("127.0.0.1", 5555);
System.out.println("Cliente conectado");
}
}
tô procurando entender como eu vou fazer para que quando um dos clientes clicar em botão a mesma ação vai ser enviada para o outro cliente pelo servidor fazendo assim parecer “Online”, já tenho os código feitos como de mudarVez e de blockButton pra bloquear botões para o jogador que não estiver na vez. (cada cliente terá seu próprio tabuleiro iniciado ao executar o código de Cliente.)
Ajuda ae