
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??

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
execPelotaServer.java
execPelotaClient.java
primero hago el run del file execPelotaServer.java y luego del execPelotaClient.java
gracias anticipadas.
salu2
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??

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


0