trabajo tanque avion

10
Trabajo 7: Elaborar un juego de video del tanque y el avion. El Juego consiste en que hay dos jugadores los cuales manejan un tanque y un avion respectivamente mediante teclado. El avion se encuentra en la parte superior de la pantalla, mientras el tanque en la parte inferior. El objetivo consiste en destruir al vehiculo oponente. AVIONTANQUE: package aviontanque; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javafx.application.Application; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.Region; import javafx.scene.media.AudioClip; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Line; import javafx.scene.shape.Rectangle; import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; import javax.sound.midi.InvalidMidiDataException; import javax.sound.midi.MidiUnavailableException; public class AvionTanque extends Application {

Upload: paromarye1

Post on 11-Dec-2015

214 views

Category:

Documents


2 download

DESCRIPTION

Trabajo

TRANSCRIPT

Page 1: Trabajo Tanque Avion

Trabajo 7:Elaborar un juego de video del tanque y el avion. El Juego consiste en que hay dos jugadores los cuales manejan un tanque y un avion respectivamente mediante teclado.El avion se encuentra en la parte superior de la pantalla, mientras el tanque en la parte inferior. El objetivo consiste en destruir al vehiculo oponente.

AVIONTANQUE:package aviontanque;

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.logging.Level;import java.util.logging.Logger;import javafx.application.Application;import javafx.application.Platform;import javafx.event.EventHandler;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.image.Image;import javafx.scene.image.ImageView;import javafx.scene.input.KeyEvent;import javafx.scene.input.MouseEvent;import javafx.scene.layout.Region;import javafx.scene.media.AudioClip;import javafx.scene.paint.Color;import javafx.scene.shape.Circle;import javafx.scene.shape.Line;import javafx.scene.shape.Rectangle;import javafx.scene.text.Font;import javafx.scene.text.Text;import javafx.stage.Stage;import javax.sound.midi.InvalidMidiDataException;import javax.sound.midi.MidiUnavailableException;

public class AvionTanque extends Application {

AudioClip disparoAVION = new AudioClip(AvionTanque.class.getResource("LASER.WAV").toString()); AudioClip disparoTanque = new AudioClip(AvionTanque.class.getResource("DISPARO.WAV").toString()); AudioClip musica = new AudioClip(AvionTanque.class.getResource("musica.mp3").toString()); Image image = new Image(getClass().getResourceAsStream("avion.jpg")); Image image1 = new Image(getClass().getResourceAsStream("tanke.jpg")); private ImageView avion = new ImageView(); private ImageView tanque = new ImageView(); private AvionTanque.LettersPane lettersPane; static final int ancho = 500;

Page 2: Trabajo Tanque Avion

static final int alto = 400; int puntosAvion = 500; int puntosTanque = 500; Group root; Scene scene; Circle[] balaAvion; int[] ubicacionBalaAvion = new int[5]; boolean[] estadosBalasAvion = new boolean[5]; Circle[] balaTanque; int[] ubicacionBalaTanque = new int[5]; boolean[] estadosBalasTanque = new boolean[5]; Rectangle fondo; Rectangle FINAL; Line arriba; Line izquierda; Line abajo; Line abajo1; Line derecha; Text[] estrellas; Text mensage; Text score; boolean swt = false, swa = false; AvionTanque.Mover mover; String vencedor;

class Mover extends Thread {

private boolean continuar = true;

public void detenElHilo() { continuar = false; disparoAVION = null; disparoTanque = null; avion.setVisible(false); for (int i = 0; i < balaAvion.length; i++) { balaAvion[i].setVisible(false); balaTanque[i].setVisible(false); } tanque.setVisible(false); FINAL.setVisible(true); mensage.setVisible(true); mensage.setLayoutX(0); mensage.setLayoutY(alto / 2); mensage.setText("JUEGO TERMINADO \n GANADOR : " + vencedor); }

public int colorBala() { return (int) (255 * Math.random()); }

Page 3: Trabajo Tanque Avion

@Override public void run() {

int ca = 0; int ct = alto; while (continuar) { lettersPane.requestFocus(); try { score.setText("Tanque : " + (500 - puntosAvion) + " \n Avion:" + (500 - puntosTanque)); if (puntosAvion <= 0) { vencedor = "Tanque"; detenElHilo(); } if (puntosTanque <= 0) { vencedor = "Avion"; detenElHilo(); } for (int i = 0; i < estrellas.length; i++) { estrellas[i].setLayoutX(ancho * Math.random()); estrellas[i].setLayoutY(alto * Math.random()); } Thread.currentThread().sleep(10);

for (int i = 0; i < balaAvion.length; i++) {

balaAvion[i].setVisible(estadosBalasAvion[i]); balaAvion[i].setLayoutY(ubicacionBalaAvion[i]+25); balaTanque[i].setVisible(estadosBalasTanque[i]); balaTanque[i].setLayoutY(ubicacionBalaTanque[i]);

if (balaAvion[i].getLayoutY() >= alto) { estadosBalasAvion[i] = false; } if (balaTanque[i].getLayoutY() <= 0) { estadosBalasTanque[i] = false; } if (Math.abs(ubicacionBalaAvion[i] - tanque.getLayoutY()) < 25 && Math.abs(balaAvion[i].getLayoutX() + 10 - tanque.getLayoutX()) < 25) { puntosTanque--; estadosBalasAvion[i] = false; } if (Math.abs(ubicacionBalaTanque[i] - avion.getLayoutY()) < 25 && Math.abs(balaTanque[i].getLayoutX() - avion.getLayoutX()) < 25) { puntosAvion--; estadosBalasTanque[i] = false; }

Page 4: Trabajo Tanque Avion

if (estadosBalasAvion[i] == false) { ubicacionBalaAvion[i] = (int) avion.getLayoutY(); balaAvion[i].setLayoutX((int) avion.getLayoutX()); } if (estadosBalasTanque[i] == false) { ubicacionBalaTanque[i] = (int) tanque.getLayoutY(); balaTanque[i].setLayoutX((int) tanque.getLayoutX()); } if (estadosBalasAvion[i] == true) { ubicacionBalaAvion[i] += 10; } if (estadosBalasTanque[i] == true) { ubicacionBalaTanque[i] -= 10; } }

} catch (InterruptedException ex) { Logger.getLogger(AvionTanque.class.getName()).log(Level.SEVERE, null, ex); } }

} }

private void init(Stage primaryStage) throws InvalidMidiDataException, IOException, MidiUnavailableException {

root = new Group(); lettersPane = new AvionTanque.LettersPane(); scene = new Scene(root, ancho, 500); mover = new AvionTanque.Mover(); avion.setImage(image); tanque.setImage(image1);

balaAvion = new Circle[5]; for (int i = 0; i < balaAvion.length; i++) { balaAvion[i] = new Circle(10, -10, 4, Color.GREEN); balaAvion[i].setVisible(false); ubicacionBalaAvion[i] = 0; } balaTanque = new Circle[5]; for (int i = 0; i < balaTanque.length; i++) { balaTanque[i] = new Circle(10, -10, 4, Color.WHITE); balaTanque[i].setVisible(false); ubicacionBalaTanque[i] = alto; }

Page 5: Trabajo Tanque Avion

fondo = new Rectangle(ancho - 1, alto - 2, Color.BLACK); FINAL = new Rectangle(ancho - 1, alto - 2, Color.BLACK); FINAL.setVisible(false); estrellas = new Text[2]; score = new Text(""); score.setFont(new Font("ARIAL", 15)); score.setLayoutY(alto + 50); score.setLayoutX(50); mensage = new Text(""); mensage.setFont(new Font("ARIAL", 50)); mensage.fillProperty().set(Color.WHITE); for (int i = 0; i < estrellas.length; i++) { estrellas[i] = new Text("*"); estrellas[i].fillProperty().set(Color.WHITE); } abajo = new Line(0, 500, ancho, 500); arriba = new Line(0, 1, ancho, 1); izquierda = new Line(1, 0, 1, 500); derecha = new Line(ancho - 1, 0, ancho - 1, 500); abajo1 = new Line(0, alto, ancho, alto); avion.setLayoutX(ancho / 2); avion.setLayoutY(0); tanque.setLayoutX(ancho / 2); tanque.setLayoutY(alto - 25); root.getChildren().add(lettersPane); root.getChildren().add(fondo); for (int i = 0; i < balaAvion.length; i++) { root.getChildren().add(balaAvion[i]); root.getChildren().add(balaTanque[i]); }

root.getChildren().add(avion); root.getChildren().add(tanque); root.getChildren().add(arriba); root.getChildren().add(abajo); root.getChildren().add(derecha); root.getChildren().add(izquierda); root.getChildren().add(abajo1); musica.play(); for (int i = 0; i < estrellas.length; i++) { root.getChildren().add(estrellas[i]); } root.getChildren().add(FINAL); root.getChildren().add(mensage); root.getChildren().add(score); mover.start(); //File midi = new File(getClass().getResource("music.mid").toString());

primaryStage.setResizable(false);

Page 6: Trabajo Tanque Avion

primaryStage.setScene(scene); primaryStage.setTitle("Hello World"); primaryStage.show();

}

public void play() { Platform.runLater(new Runnable() {

@Override public void run() { lettersPane.requestFocus(); } }); } int aaa = -1; int ttt = -1;

public class LettersPane extends Region {

public LettersPane() { setId("LettersPane"); setPrefSize(ancho, alto); setFocusTraversable(true); setOnMousePressed(new EventHandler<MouseEvent>() {

public void handle(MouseEvent me) { requestFocus(); } }); this.setOnKeyPressed(new EventHandler<KeyEvent>() {

public void handle(KeyEvent k) { lettersPane.requestFocus(); String cadena = k.getCode().toString(); if (cadena == "NUMPAD0") { aaa++; estadosBalasAvion[aaa] = true; if (aaa == 4) { aaa = -1; } if (disparoAVION != null) { disparoAVION.play(); } } else if (cadena == "SPACE") { ttt++; estadosBalasTanque[ttt] = true; if (ttt == 4) { ttt = -1; }

Page 7: Trabajo Tanque Avion

if (disparoTanque != null) { disparoTanque.play(); } } else if (cadena == "A" && tanque.getLayoutX() > 0) { movimientos(tanque, 0); } else if (cadena == "D" && tanque.getLayoutX() < (ancho - 50)) { movimientos(tanque, 2); } else if (cadena == "S" && tanque.getLayoutY() < alto - 25) { movimientos(tanque, 3); } else if (cadena == "LEFT" && avion.getLayoutX() > 0) { movimientos(avion, 0); } else if (cadena == "UP" && avion.getLayoutY() > 0) { movimientos(avion, 1); } else if (cadena == "RIGHT" && avion.getLayoutX() < (ancho - 50)) { movimientos(avion, 2); } else if (cadena == "DOWN" && avion.getLayoutY() < alto - 150) { movimientos(avion, 3); } } });

}

void movimientos(ImageView x, int c) { switch (c) { case 0: x.setLayoutX(x.getLayoutX() - 10); break; case 1: x.setLayoutY(x.getLayoutY() - 10); break; case 2: x.setLayoutX(x.getLayoutX() + 10); break; case 3: x.setLayoutY(x.getLayoutY() + 10); break; } } } @Override public void start(Stage primaryStage) throws Exception { init(primaryStage); primaryStage.show(); play(); }public static void main(String[] args) { launch(args); }}