Java - error - pelota que rebota - client/server

 
Vista:
Imágen de perfil de italo

error - pelota que rebota - client/server

Publicado por italo (1 intervención) el 29/05/2016 06:43:39
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??


pelota_error

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

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

PelotaNetClient.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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

1
2
3
4
5
6
7
package pelotaCS;
 
public class execPelotaServer {
    public static void main(String[] args) {
        PelotaNetServer server = new PelotaNetServer();
    }
}

execPelotaClient.java

1
2
3
4
5
6
7
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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder