Foros del Web » Programación para mayores de 30 ;) » Java »

problema disparo juego sencillo

Estas en el tema de problema disparo juego sencillo en el foro de Java en Foros del Web. Que tal.. Estoy comenzando a programar en JAVA y estoy tratando de hacer un juego sencillo Me surgio un problema al implementar el disparo de ...
  #1 (permalink)  
Antiguo 16/05/2011, 14:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Busqueda problema disparo juego sencillo

Que tal..
Estoy comenzando a programar en JAVA y estoy tratando de hacer un juego sencillo
Me surgio un problema al implementar el disparo de la nave ya he tratado de muchas formas al implemetarlo pero aun no me sale.
Ojala y me puedan ayudar.

Les dejo el codigo:


/**
Main *
*
*
*
*
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Armada extends JFrame implements ActionListener, KeyListener{

public final int NUM_MALOS = 5;
MiLienzo lienzo;
Guerrero asteroides[];
Guerrero naves[];
Todos pistola;
Timer timer;
Bala balas[];

public static void main(String args[]){
new Armada();
}

public Armada(){

setSize(Papague.FRAME_ANCHO+5,Papague.FRAME_LARGO+ 5);
setTitle("Armada");
JMenuBar barra = new JMenuBar();
JMenu ArmadaMenu = new JMenu("Armada");
JMenuItem inicio = new JMenuItem("Iniciar Juego");
inicio.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
inicio();
}
}
);
ArmadaMenu.add(inicio);
barra.add(ArmadaMenu);
setJMenuBar(barra);

Container container = getContentPane();

pistola = new Todos();
ponerAsteroides();
ponerNaves();
ponerBalas();

lienzo = new MiLienzo(this);
container.add(lienzo);
timer = new Timer(100,this);

addKeyListener(this);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

public void ponerBalas(){
try{
//int x,y;
balas = new Bala[100];
for (int i=0;i<90;i++){

balas[i] = new Bala(new Point(pistola.getPosicion()));
balas[i].setDireccion(Papague.ARRIBA);

}
}
catch(Exception e){
System.out.println(e.toString());
}
}

public void ponerAsteroides(){
try{
int x,y;
asteroides = new Guerrero[NUM_MALOS];
for (int i=0;i<NUM_MALOS;i++){

x = (int)(Math.random()*Papague.FRAME_ANCHO);
y = (Papague.FRAME_LARGO);
asteroides[i] = new Guerrero(Papague.ASTEROIDE,new Point(x,y));
asteroides[i].setDireccion(Papague.ARRIBA);
new Thread(asteroides[i]).start();
}
}
catch(Exception e){
System.out.println(e.toString());
}
}
public void inicio(){
timer.start();
}


public void ponerNaves(){
try{
int x,y;
naves = new Guerrero[NUM_MALOS];
for (int i=0;i<NUM_MALOS;i++){
//if(naves[i].ABAJO)

x = (int)(Math.random()*Papague.FRAME_ANCHO);
y = (Papague.FRAME_LARGO);
naves[i] = new Guerrero(Papague.NAVE,new Point(x,y));
naves[i].setDireccion(Papague.ARRIBA);
new Thread(naves[i]).start();
}
}
catch(Exception e){
System.out.println(e.toString());
}
}

public void actionPerformed(ActionEvent e){
for (int i=0;i<NUM_MALOS;i++){

if (pistola.colision(asteroides[i])){
//contador++;
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}

for (int f=0;f<NUM_MALOS;f++){
asteroides[f].setPosicion_y(0);
asteroides[f].setPosicion_x((int)(Math.random()*Papague.FRAME_A NCHO));
naves[f].setPosicion_y(0);
naves[f].setPosicion_x((int)(Math.random()*Papague.FRAME_A NCHO));

}
}
if (pistola.colision(naves[i])){
//contador++;
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
for ( int j=0;j<NUM_MALOS;j++){
naves[j].setPosicion_y(0);
naves[j].setPosicion_x((int)(Math.random()*Papague.FRAME_A NCHO));
asteroides[j].setPosicion_y(0);
asteroides[j].setPosicion_x((int)(Math.random()*Papague.FRAME_A NCHO));
}
}

if (balas[i].colision(naves[i])){
{
naves[i].setPosicion_y(0);
naves[i].setPosicion_x((int)(Math.random()*Papague.FRAME_A NCHO));

}

if (balas[i].colision(asteroides[i])){

asteroides[i].setPosicion_y(0);
asteroides[i].setPosicion_x((int)(Math.random()*Papague.FRAME_A NCHO));
}
}
lienzo.repaint();
}

public void keyPressed(KeyEvent e){
if (e.getKeyCode()==KeyEvent.VK_UP){
pistola.mover(Papague.ARRIBA);

}
else if (e.getKeyCode()==KeyEvent.VK_DOWN){
pistola.mover(Papague.ABAJO);
}
else if (e.getKeyCode()==KeyEvent.VK_LEFT){
pistola.mover(Papague.IZQUIERDA);
}
else if (e.getKeyCode()==KeyEvent.VK_RIGHT){
pistola.mover(Papague.DERECHA);
}
else if (e.getKeyCode()==KeyEvent.VK_SPACE){
//int i=0;
for( int i=0; i<90;i++){

ponerBalas();
balas[i] = new Bala(new Point(pistola.getPosicion()));
balas[i].setDireccion(Papague.ARRIBA);
i++;

balas[i].mover1();

new Thread( balas[i]).start();

}
}

lienzo.repaint();
}
public void keyReleased(KeyEvent e){
}

public void keyTyped(KeyEvent e){
}
}

class MiLienzo extends JComponent{
Armada r;

public MiLienzo(Armada r){
this.r = r;
}

public void paintComponent(Graphics g) {
g.drawRect(0,0,Papague.FRAME_ANCHO,Papague.FRAME_L ARGO);
g.setColor(Color.BLACK);
g.fillRect(0, 0, Papague.FRAME_ANCHO, Papague.FRAME_LARGO);
for (int i = 0; i< r.NUM_MALOS;i++)
{
r.asteroides[i].paintComponent(g);
r.naves[i].paintComponent(g);
}
for (int i = 0; i< 90;i++)
{
r.balas[i].paintComponent(g);
//i++;
}
r.pistola.paintComponent(g); }
}


/*

Clase bala*
*/

import java.awt.*;

import javax.swing.*;

public class Bala extends Papague implements Runnable {


private int velocidad;
private int direccion;


public Bala(Point p){
posicion = p;
largo = (int) (FRAME_LARGO * 0.03);
ancho = (int) (FRAME_ANCHO * 0.03);
velocidad = (int) (Math.random()*90+1);
direccion = (int) (Math.random()*100%4);
//color = Color.red;
imagen = new ImageIcon("misil.GIF").getImage().getScaledInstanc e(largo, ancho,imagen.SCALE_DEFAULT);
}
public void setVelocidad(int v){
velocidad = v;
}

public void setDireccion(int d){
if (d>=-100 && d<400){
direccion = d;
}
else{
System.err.println("Direccion no valida");
direccion = (int)(Math.random()*100%2);
}
}

public int getVelocidad(){
return velocidad;
}

public int getDireccion(){
return direccion;
}

public void mover1(){
if (direccion == ARRIBA){
int nueva_y = posicion.y - velocidad;
if (nueva_y<0){
nueva_y=0;
direccion = Papague.ARRIBA;
}
posicion.y = nueva_y;
}
else if (direccion == ABAJO){
int nueva_y = posicion.y + velocidad;
if (nueva_y>(FRAME_LARGO-largo)){
nueva_y=FRAME_LARGO-largo;
direccion = Papague.ARRIBA;
}
posicion.y = nueva_y;
}
}

public void run(){
try{
boolean b = true;
while(b){
mover1();
Thread.sleep(150);
}
}
catch(Exception e){
System.err.println(e.toString());
}
}

public void finalize(){
System.out.println("Se destruyo el objeto");
}

public String toString(){
return new String("ERROR");
}



public void paintComponent(Graphics g){
//g.setColor(color);
//g.fillRect(posicion.x,posicion.y,largo,ancho);
g.drawImage(imagen, posicion.x, posicion.y,this);
}

public boolean colision(Guerrero m){
Point p = m.getPosicion();
int ancho_malo = m.getAncho();
int largo_malo = m.getLargo();
boolean choque = false;

if ((posicion.x+ancho >= p.x) && (posicion.x <= (p.x+ancho_malo)) && (posicion.y+largo >= p.y) && (posicion.y <= (p.y+largo_malo)) )
{

choque = true;

}
return choque;
}

}
  #2 (permalink)  
Antiguo 17/05/2011, 05:37
 
Fecha de Ingreso: enero-2008
Mensajes: 201
Antigüedad: 16 años, 3 meses
Puntos: 39
Respuesta: problema disparo juego sencillo

No he mirado con mucho detalle el código, pero lo recomendable es usar un timer, puedes hacerlo de 2 formas:
1. En la clase Bala, de modo que tendrías tantos timer activos como balas disparadas en ese momento.
2. Usar un único timer que mueva todas las balas, en tu caso creo que sería en la clase Armada y tendrías que recorrer el array de balas que tienes.

Sobre cual usar... la que te resulte más fácil de implementar, ambas tienen cosas buenas y malas.
  #3 (permalink)  
Antiguo 17/05/2011, 10:33
 
Fecha de Ingreso: mayo-2011
Mensajes: 5
Antigüedad: 13 años
Puntos: 0
Respuesta: problema disparo juego sencillo

Hola que tal Ruben, de antemano te agradesco que hayas tomado tu tiempo en apoyarme :)

Checare las formas que me recomiendas.
Espero que pueda implementarlo.
sino seguire recurriendo de tu ayuda.

Gracias

Etiquetas: juego, sencillo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.