Help with Sockets in Play [closed]

0

I have a game implemented in java, to roll a dice and to pass the points and if 1 points are left at zero and if the turn passes the points are saved and the one that reaches 100 wins now I have only two frames but what happens is that I do not know how to add client / server sockets to the code already done, someone could help me to add them I do not know how, my idea would be with a button that connects with the server and the client and then the server pass the shifts and so could you help me please?

package agalludo2;

import java.util.Random;
import javax.swing.JOptionPane;

/**
 *
 * @author Leidy
 */
public class jFrameAgalludo extends javax.swing.JFrame{

    /**
     * Creates new form FrameAgalludo
     */
    Random tiro=new Random();

//    int jugadores = Integer.parseInt(jlbCantidadJugadores.getText());
    int player1=0, player2=0, player3=0, player4=0, jugador=1;
    int dado, cantidadjugadores;

    public jFrameAgalludo() {
        initComponents();
        this.setLocationRelativeTo(null);//Inicia la ventana en la posicion del centro.
        CantidadJugadores();



    }

/**
 * Lanza los numeros a el jugar que le corresponde
 * @param evt 
 */
    private void jbtnLanzarActionPerformed(java.awt.event.ActionEvent evt) {                                           
        if(player1>=100 || player2>=100 || player3>=100 || player4>=100){
            JOptionPane.showMessageDialog(null, "La partida ya finalizo. \nHas ganado.", "Juego ha terminado", JOptionPane.ERROR_MESSAGE);
        }else{
            if(jlbCantidadJugadores.getText().equals("1")){
                do {                    
                    Jugarcon1Jugador();
                } while (jugador==2);

            }else{
               JugarconMasDe1Jugador(); 
            }
        }
    }                                          
//Pasa el turno a el siguiente jugador
    private void jbtPasarActionPerformed(java.awt.event.ActionEvent evt) {                                         
        int aux=jugador;
        jugador++;
            if(jugador>cantidadjugadores){
                jugador=1;
            }
            JOptionPane.showMessageDialog(null, "Jugador "+aux+" pasa.\n Turno para jugador: " +jugador, "Cambio de turno", JOptionPane.INFORMATION_MESSAGE);
            jlbPlayer.setText(String.valueOf(jugador));
            jlbDado.setText("");
    }                                        

    /**
     * Manda la cantidad de jugadores, a elotro frame y deja jugar a los jugadores que esten en la cantidad elegida
     */
    public void CantidadJugadores(){
        cantidadjugadores= Integer.parseInt(JFrameSeleccionarPlayer.jComboBoxcantidad.getSelectedItem().toString());
        jlbCantidadJugadores.setText(String.valueOf(cantidadjugadores));
        if(cantidadjugadores==1 || cantidadjugadores==2){
            cantidadjugadores=2;
            jlbPlayer3Nombre.setVisible(false);
            jlbPlayer3Puntos.setVisible(false);
            jlbPlayer4Nombre.setVisible(false);
            jlbPlayer4Puntos.setVisible(false);
        }else{
            if(cantidadjugadores==3){
                jlbPlayer4Nombre.setVisible(false);
                jlbPlayer4Puntos.setVisible(false);
            }
        }

    }
    /**
     * Medodo que cubre la cantidad de jugadores dependiendo los elegidos.Metodo para jugar con dos o mas jugadores
     */
    public void JugarconMasDe1Jugador(){
        dado=tiro.nextInt(6);
        int aux;
        jlbDado.setText(String.valueOf(dado));
        if(jugador==1){
            if(dado==1){
                player1=0;
                jlbPlayer1Puntos.setText(String.valueOf(player1));                
            }else{
                player1 +=dado;
                jlbPlayer1Puntos.setText(String.valueOf(player1));
                if(player1>=100){
                    JOptionPane.showMessageDialog(null, "Felicidades Jugador "+jugador+"\nAcaba de ganar la partida \nFin del juego", "Juego Terminado", JOptionPane.INFORMATION_MESSAGE);
                    jlbFinJuego.setText("jugador "+jugador+" ha ganado");
                }
            }
        }else{
            if(jugador==2){
                if(dado==1){
                    player2=0;
                    jlbPlayer2Puntos.setText(String.valueOf(player2));
                }else{
                    player2 +=dado;
                    jlbPlayer2Puntos.setText(String.valueOf(player2));
                    if(player2>=100){
                        JOptionPane.showMessageDialog(null, "Felicidades Jugador "+jugador+"\nAcaba de ganar la partida \nFin del juego", "Juego Terminado", JOptionPane.INFORMATION_MESSAGE);
                        jlbFinJuego.setText("jugador "+jugador+" ha ganado");
                    }
                }
            }else{
                if(jugador==3){
                    if(dado==1){
                        player3=0;
                        jlbPlayer3Puntos.setText(String.valueOf(player3));
                    }else{
                        player3 +=dado;
                        jlbPlayer3Puntos.setText(String.valueOf(player3));
                        if(player3>=100){
                            JOptionPane.showMessageDialog(null, "Felicidades Jugador "+jugador+"\nAcaba de ganar la partida \nFin del juego", "Juego Terminado", JOptionPane.INFORMATION_MESSAGE);
                            jlbFinJuego.setText("jugador "+jugador+" ha ganado");
                        }
                }
                }else{
                    if(jugador==4){
                        if(dado==1){
                            player4=0;
                            jlbPlayer4Puntos.setText(String.valueOf(player4));
                        }else{
                            player4 +=dado;
                            jlbPlayer4Puntos.setText(String.valueOf(player4));
                            if(player4>=100){
                                JOptionPane.showMessageDialog(null, "Felicidades Jugador "+jugador+"\nAcaba de ganar la partida \nFin del juego", "Juego Terminado", JOptionPane.INFORMATION_MESSAGE);
                                jlbFinJuego.setText("jugador "+jugador+" ha ganado");
                            }
                        }
                    }
                }
            }
        }

        if(dado==1){
            aux=jugador;
            jugador++;
            if(jugador>cantidadjugadores){
                jugador=1;
            }
            JOptionPane.showMessageDialog(null, "Jugador: " +aux +" Acaba de perder sus puntos \nTurno para Jugador "+jugador, "Cambio de turno", JOptionPane.INFORMATION_MESSAGE);
            jlbPlayer.setText(String.valueOf(jugador));
            jlbDado.setText("");
        }
    }
/**
 * Metodo para jugar con un jugador unicamente 
 */
    public void Jugarcon1Jugador(){
        dado=tiro.nextInt(6);
        int aux;
        jlbDado.setText(String.valueOf(dado));
        if(jugador==1){
            if(dado==1){
                player1=0;
                jlbPlayer1Puntos.setText(String.valueOf(player1));                
            }else{
                player1 +=dado;
                jlbPlayer1Puntos.setText(String.valueOf(player1));
                if(player1>=100){
                    JOptionPane.showMessageDialog(null, "Felicidades Jugador "+jugador+"\nAcaba de ganar la partida \nFin del juego", "Juego Terminado", JOptionPane.INFORMATION_MESSAGE);
                    jlbFinJuego.setText("jugador "+jugador+" ha ganado");
                }
            }
        }else{
            do {    

                dado=tiro.nextInt(6);
                player2 +=dado;
                jlbPlayer2Puntos.setText(String.valueOf(player2));
                JOptionPane.showMessageDialog(null, "Maquina continua jugando", "Turno Maquina", JOptionPane.INFORMATION_MESSAGE);
                if(player2>=100){
                    JOptionPane.showMessageDialog(null, "Felicidades Jugador "+jugador+"\nAcaba de ganar la partida \nFin del juego", "Juego Terminado", JOptionPane.INFORMATION_MESSAGE);
                    jlbFinJuego.setText("jugador "+jugador+" ha ganado");
                }

                if(dado==1){
                    player2=0;
                    jlbPlayer2Puntos.setText(String.valueOf(player2)); 
                }
            } while (dado!=1 || player2>=100);

        }

        if(dado==1){
            aux=jugador;
            jugador++;
            if(jugador>cantidadjugadores){
                jugador=1;
            }
            JOptionPane.showMessageDialog(null, "Jugador: " +aux +" Acaba de perder sus puntos \nTurno para Jugador "+jugador, "Cambio de turno", JOptionPane.INFORMATION_MESSAGE);
            jlbPlayer.setText(String.valueOf(jugador));
            jlbDado.setText("");
        }
    }

}

package agalludo2;

/**
 *
 * @author Leidy
 */
public class JFrameSeleccionarPlayer extends javax.swing.JFrame {

    /**
     * Creates new form JFrameAgalludo
     */


    public JFrameSeleccionarPlayer() {
        initComponents();
        this.setLocationRelativeTo(null);//Inicia la ventana en la posicion centrar del ordenador.
    }            

    private void jbtnSeleccionarActionPerformed(java.awt.event.ActionEvent evt) {                                                
        String cantidad= String.valueOf(jComboBoxcantidad.getSelectedItem());//capturo el valor de jComboBoxcantidad

        if(!cantidad.equals(""))//si jComboBoxcantidad no selecciona un numero saldra un mensaje en pantalla
        {   
            jFrameAgalludo agalludo = new jFrameAgalludo();
            agalludo.setVisible(true);//hago visible a jFrameAgalludo
            this.setVisible(false);//oculto esta ventana
        }else{
            jlbMensajes.setText("Favor de seleccionar una cantidad.");   //Imprimimos mensaje de seleccionar la cantidad         
        }
    }                                               
    }                   
}

    
asked by paola 03.11.2017 в 04:15
source

1 answer

1

Your SocketClient would be something like:

package Codigo;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SocketCliente{

    private int Puerto=5020;
    private String Host="localhost";
    private Socket So;
    private DataOutputStream Salida;
    //private DataInputStream Entrada;

    public SocketCliente(){}

    public boolean ConectarAServidor(){
        try {
            So = new Socket(Host,Puerto);
            Salida = new DataOutputStream(So.getOutputStream());
            return true;
        } catch (IOException ex) {
            return false;
        }
    }

    public String IPConectado(){
        return So.getInetAddress().toString();
    }

    public String PuertoConectado(){
        return String.valueOf(So.getPort());
    }

    public void EnviarDato(String Dato){
        try {
            Salida.writeUTF(Dato);
        } catch (IOException ex) {
            Logger.getLogger(SocketCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void CerrarConexion(){
        try {
            So.close();
        } catch (IOException ex) {
            Logger.getLogger(SocketCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

and your Server Socket something like

package Codigo;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SocketServidor{

    private int Puerto=5020;
    private Socket So;
    private ServerSocket Ss;
    private DataInputStream Entrada;
    private DataOutputStream Salida;

    public SocketServidor(){
        try {
            Ss = new ServerSocket(Puerto); //2 parametro el maximo de conexiones
        } catch (IOException ex) {
            Logger.getLogger(SocketServidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void EsperarConexion(){
        try {
            So = Ss.accept();
            Entrada = new DataInputStream(So.getInputStream());
            Salida = new DataOutputStream(So.getOutputStream());
        } catch (IOException ex) {
            Logger.getLogger(SocketServidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String IPConectado(){
        return So.getInetAddress().toString();
    }

    public String PuertoConectado(){
        return String.valueOf(So.getPort());
    }

    public String EsperarDato(){
        try {
            return Entrada.readUTF();
        } catch (IOException ex) {
            return "@CerrarConexion@";
        }
    }

    public void EnviarDato(String Dato){
        try {
            Salida.writeUTF(Dato);
        } catch (IOException ex) {
            Logger.getLogger(SocketServidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void CerrarConexion(){
        try {
            So.close();
        } catch (IOException ex) {
            Logger.getLogger(SocketServidor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

in Socket Server you would have to make a thread to wait and send and receive messages something like:

 private Thread ConexionCliente=new Thread()
{
    @Override
    public void run()
    {
        while(true){
            EsperarConexion();
            while(true){
                //recibir datos
            }
        }
    }
};

only the client needs to connect

SocketCliente SC = new SocketCliente();

public Principal()
{
    initComponents();
    if(!SC.ConectarAServidor()){
        JOptionPane.showMessageDialog(this,"Debe iniciar el servidor primero", "Aviso", 0);
        System.exit(0);
    }
}
    
answered by 03.11.2017 / 08:43
source