1. Con una cuenta podrás:

    • Publicar preguntas y pedir ayuda
    • Crear tutoriales
    • Acceder a contenido privado
    • Convertirte en un Héroe de la web
    Cerrar notificación
  2. Eres nuevo en la comunidad y necesitas ayuda?
    Sigue estos pasos y recomendaciones antes de publicar tu duda:
    Cerrar notificación

java error - pelota que rebota - client server

Tema en 'Java' comenzado por italo_pm, 28 de Mayo de 2016.

  1. italo_pm

    italo_pm Nuevo Miembro

    Se incorporó:
    19 de Septiembre de 2015
    Mensajes:
    16
    Me gusta recibidos:
    0
    Puntos de trofeos:
    1
    Género:
    Hombre
    hola a todos, estoy tratando de hacer un ejercicio en java, se trata de una animacion de una pelota que pasa de una ventana server a una ventana client y va rebotando segun el lado de la ventana que toca, el problema es que inicia bien desde la ventana del server, respeta el rebote en los angulos que toca (izquierda,arriba,abajo) en la ventana del server nose usa el lado derecho, luego cuando pasa a la ventana del client respeta los rebotes en los angulos de arriba y abajo pero cuando llega al lado derecho (del client) la pelota desaparece y loq me sirve es que retorne con el rebote al server y siga rebotando.

    dejo una imagen, en este ejemplo por el momento funciona los puntos 1,2,3,4 y la pelota luego desaparece (tendria que hacer 5,6,7,8)

    (en otro ejemplo funcionarian los puntos 8,7,6,5 y la pelota luego desaparece, tendria que hacer 4,3,2,1)

    en ambos casos nunca regresa al server.....

    alguna idea o sugerencia??


    [​IMG]

    aqui esta el codigo del client, el codigo del server esta en pastebin porque supera el limite de caracteres del post

    PelotaNetServer.java
    http://pastebin.com/EUiw9XTV


    PelotaNetClient.java
    Código (Text):
    package pelotaCS;

    // creo class y su constructor
    import pelotaCS.PelotaNetServer;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import java.net.*;
    import javax.swing.*;

    public class PelotaNetClient extends JFrame {
        private Socket conexion = null;
        private DataOutputStream out = null;
        private DataInputStream input = null;
        public PelotaNetClient(){
            super("Pelota - Client");
            this.setSize(500,400);
         
           // this.setLocationRelativeTo(null);
            this.setLocation(600,40);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            conectar();  // me conecto al server
            this.setVisible(true);
        }//fin constructor
     
    // METODO para la conexion y inicio de la animacion.  
        public void conectar(){
            try{ // me conecto al server
                conexion = new Socket("localhost",6789);
                //obtengo el stream del input del server y doy un output al server
                out = new DataOutputStream(conexion.getOutputStream());
                input = new DataInputStream(conexion.getInputStream());
            }catch(Exception e){
                JOptionPane.showMessageDialog(null,e.toString());
                System.exit(-1);
            }
            Container contenedor = this.getContentPane();
            PanelAnimacionClient pan = new PanelAnimacionClient(this,contenedor.getSize());
            contenedor.add(pan);
            }
    class PanelAnimacionClient extends JPanel implements ActionListener{
        private PelotaNetClient ventana ;
        private Dimension dimension;
        private Image bufferVirtuale;
        private Graphics offScreen;
        private Timer tim = null;
        private int xPelota = 0;
        private int yPelota = 0;
        private int diametroPelota = 40;
        private int movimiento = 3;
        private int timerDelay = 10;
        private boolean derecha,abajo,pelotaPresente,llegadaComunicada ;

        public PanelAnimacionClient(PelotaNetClient ventana,Dimension dimension){  
            super();
            this.ventana = ventana;
            this.setSize(dimension);
            derecha = true;
            abajo = true;
            pelotaPresente = false;
            llegadaComunicada = false;
            tim = new Timer(timerDelay,this);
            tim.start();
        }
        public void update(Graphics g){
            paint(g);
        }
        public void paint(Graphics g){
            super.paint(g);
            bufferVirtuale = createImage(getWidth(),getHeight());
            offScreen = bufferVirtuale.getGraphics();
            Graphics2D screen =(Graphics2D)g;
            offScreen.setColor(new Color(254,18,22));
            if (pelotaPresente){
                offScreen.fillOval(xPelota,yPelota,diametroPelota,diametroPelota);
            }
            screen.drawImage(bufferVirtuale,0,0,this);
            offScreen.dispose();
        }
        public void actionPerformed(ActionEvent e){
            if (pelotaPresente){
                if (abajo){
                 
                    if (yPelota > (this.getHeight()-diametroPelota)){
                        abajo = false;
                        yPelota -= movimiento;// borde alto
                    }else{
                        yPelota += movimiento;
                    }
                }else{      
                    if (yPelota <=0){ // borde abajo
                        abajo = true;
                        yPelota += movimiento;  
                    }else{
                        yPelota -= movimiento;// borde abajo
                    }
                }
                if (derecha){
                    if((!llegadaComunicada)&&(xPelota <=(this.getWidth()-diametroPelota))){
                        try{
                            ventana.getOutput().writeBoolean(abajo);
                            ventana.getOutput().writeInt(yPelota);
                            llegadaComunicada = true;
                        }catch( Exception ecc){
                        JOptionPane.showMessageDialog(null,ecc.toString());
                        System.exit(-1);
                    }
                }else{
                    xPelota += movimiento;
                        if (xPelota < this.getWidth()){
                        pelotaPresente = false;
                        llegadaComunicada = false;
                        }
                    }
                }else{                          // la pelota esta llendo a la izquierda
                    if (xPelota < 0){           // fin ventana izquierda
                        derecha = true;          // cambio direccion pasa de derecha a izquierda
                        xPelota -= movimiento;
                    }else{
                        xPelota += movimiento;
                    }
                }
            }else{
                boolean direccion = true;
                int y=0;
                try{
                    direccion = ventana.getInput().readBoolean();
                    y = ventana.getInput().readInt();// espero que llegue la pelota
                    abajo = direccion; //direccion de ingreso
                    derecha = false; // se mueve hacia la izquierda
                    yPelota = y;  // coordinadas iniciales de la pelota
                    xPelota = 0;
                    pelotaPresente = true;
                    }
                catch( Exception ecc){
                    JOptionPane.showMessageDialog(null,ecc.toString());
                        System.exit(-1);
                    }
                }
            repaint();
            }
        }

        public DataInputStream getInput(){
            return input;
        }
        public DataOutputStream getOutput(){
            return out;
        }
    }
        //fin de la class palota net client
     
    execPelotaServer.java
    Código (Text):
    package pelotaCS;

    public class execPelotaServer {
        public static void main(String[] args) {
            PelotaNetServer server = new PelotaNetServer();
        }
    }
     
    execPelotaClient.java
    Código (Text):
    package pelotaCS;

    public class execPelotaClient {
        public static void main(String[] args) {
            PelotaNetClient client = new PelotaNetClient();
        }
    }
     
    primero hago el run del file execPelotaServer.java y luego del execPelotaClient.java

    gracias anticipadas.
    salu2
     

Comparte esta página