Skip to content

Commit

Permalink
Merge pull request #1 from k3ssdev/v0.2
Browse files Browse the repository at this point in the history
V0.2
  • Loading branch information
k3ssdev committed Jan 4, 2024
2 parents 229356a + f502d74 commit 31b97cd
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 68 deletions.
17 changes: 0 additions & 17 deletions .idea/deploymentTargetDropDown.xml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,41 @@

import android.graphics.RectF;

// Clase para representar los disparos realizados por la nave del jugador
public class Disparo {

private float x;
private final float y;
private static final int VELOCIDAD = 20; // Ajusta la velocidad del disparo según sea necesario
private final RectF rect;

// Constructor que inicializa la posición del disparo y el rectángulo asociado
public Disparo(float x, float y) {
this.x = x;
this.y = y;
this.rect = new RectF(x, y, x + 10, y + 10); // Ajusta el tamaño del rectángulo según sea necesario
}

// Método para obtener la coordenada x del disparo
public float getX() {
return x;
}

// Método para obtener la coordenada y del disparo
public float getY() {
return y;
}

// Método para obtener el rectángulo asociado al disparo
public RectF getRect() {
return rect;
}

// Método para mover el disparo en el eje x
public void mover() {
x += VELOCIDAD; // Cambia el eje de movimiento a la derecha
// Actualiza la posición del rectángulo después de mover el disparo
rect.left = x;
rect.right = x + 30; // Ajusta el tamaño del rectángulo según sea necesario
rect.right = x + 30; // Ajusta el tamaño del rectángulo del laser
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,34 +11,40 @@ public class Estrella {
private float x2;
private final float y2;

// Constructor que inicializa las coordenadas de la estrella
public Estrella(float x1, float y1, float x2, float y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}

// Método para obtener la coordenada x1 de la estrella
public float getX1() {
return x1;
}

// Método para obtener la coordenada y1 de la estrella
public float getY1() {
return y1;
}

// Método para obtener la coordenada x2 de la estrella
public float getX2() {
return x2;
}

// Método para obtener la coordenada y2 de la estrella
public float getY2() {
return y2;
}

// Método para mover la estrella en el eje x
public void mover() {
x1 -= 2; // Ajusta la velocidad de las estrellas
x2 -= 2;

// Asegúrate de que las estrellas vuelvan a aparecer cuando se salgan de la pantalla
// Las estrellas vuelvan a aparecer cuando se salgan de la pantalla
if (x1 < 0) {
x1 = Juego.ancho;
x2 = x1 + random.nextInt(5) - 2;
Expand Down
83 changes: 47 additions & 36 deletions app/src/main/java/io/github/k3ssdev/starshipsandroidgame/Juego.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,8 @@
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
Expand Down Expand Up @@ -89,7 +87,6 @@ public Juego(Context context, AttributeSet attrs, int defStyle) {
}

private void init() {

// Carga las imágenes de jugador y enemigo
bitmapNaveJugador = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.player);
bitmapNaveEnemiga = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.enemy);
Expand All @@ -100,7 +97,6 @@ private void init() {
} else {
// Inicializa el juego solo si no está en pausa
iniciarJuego();

}
}

Expand Down Expand Up @@ -133,8 +129,12 @@ private void mostrarDialogoNombreYDificultad() {
dificultad = dificultadSpinner.getSelectedItem().toString();

// Mostramos un mensaje de bienvenida
if (nombreJugador == null || nombreJugador.trim().isEmpty()) {
nombreJugador = "Jugador";
}
Toast.makeText(getContext(), "¡Bienvenido, " + nombreJugador + "!", Toast.LENGTH_SHORT).show();


// Inicializamos el juego después de hacer clic en Aceptar
juegoEnPausa = false;
iniciarJuego();
Expand All @@ -161,9 +161,6 @@ private void iniciarJuego() {
puntos.setTextSize(100);
puntos.setColor(Color.WHITE);




// Temporizador para disparos
timerDisparo = new Timer();

Expand Down Expand Up @@ -227,7 +224,6 @@ public void run() {
}, 0, 1000); // Ajusta la frecuencia de generación de estrellas (1000 milisegundos en este ejemplo)
}


// Método para dibujar la nave del jugador
private void dibujarNaveJugador(Canvas canvas) {
float left = 450 - RADIO_JUGADOR;
Expand All @@ -239,10 +235,6 @@ private void dibujarNaveJugador(Canvas canvas) {
canvas.drawBitmap(bitmapNaveJugador, null, rectNaveJugador, null);
}





// Método para dibujar las naves enemigas
private void dibujarNavesEnemigas(Canvas canvas) {
for (NaveEnemiga nave : navesEnemigas) {
Expand All @@ -251,7 +243,6 @@ private void dibujarNavesEnemigas(Canvas canvas) {
}
}


private void generarNaveEnemiga() {
NaveEnemiga nuevaNave = new NaveEnemiga(ancho, alto, dificultad);
navesEnemigas.add(nuevaNave);
Expand All @@ -265,7 +256,6 @@ private void generarEstrella() {
estrellas.add(new Estrella(x1, y1, x2, y2));
}


@Override
protected void onDraw(@NonNull Canvas canvas) {
super.onDraw(canvas);
Expand All @@ -286,7 +276,6 @@ protected void onDraw(@NonNull Canvas canvas) {
canvas.drawLine(s.getX1(), s.getY1(), s.getX2(), s.getY2(), estrella);
}


// Pinta la nave del jugador
dibujarNaveJugador(canvas);

Expand All @@ -305,7 +294,6 @@ protected void onDraw(@NonNull Canvas canvas) {
}
}


// Método para disparar
private void disparar() {
// Reproducir sonido de disparo
Expand Down Expand Up @@ -352,7 +340,6 @@ public boolean onTouchEvent(MotionEvent event) {
return true;
}


// Método para actualizar la posición de la nave del jugador suavemente
private void actualizarPosicionNaveSuavemente(int nuevaPosY) {
float left = 450 - RADIO_JUGADOR;
Expand All @@ -376,7 +363,6 @@ private void actualizarPosicionNaveSuavemente(int nuevaPosY) {
invalidate();
}


public void actualizarJuego() {
moverNavesEnemigas();
moverEstrellas();
Expand All @@ -392,25 +378,13 @@ private void moverDisparos() {
disparo.mover();

// Eliminar disparos que salen de la pantalla
// Eliminar disparos que salen de la pantalla
if (disparo.getX() > ancho) {
iterator.remove();
}
}
}


private void moverNavesEnemigas() {
for (NaveEnemiga nave : navesEnemigas) {
nave.mover();
}
}

private void moverEstrellas() {
for (Estrella estrella : estrellas) {
estrella.mover();
}
}

private void detectarColision() {
List<NaveEnemiga> navesEliminadas = new ArrayList<>();

Expand Down Expand Up @@ -456,7 +430,8 @@ private void mostrarGameOver() {

// Muestra un cuadro de diálogo para reiniciar o cerrar el juego
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("¿Desea reiniciar el juego?");
builder.setTitle("GAME OVER");
builder.setMessage("¿Desea reiniciar el juego?");
builder.setPositiveButton("Sí", (dialog, which) -> reiniciarJuego());

// Agrega botón negativo para cerrar la aplicación
Expand All @@ -474,7 +449,6 @@ private void mostrarGameOver() {
}



private void pausarJuego() {
// Pausa el juego y realiza otras acciones según sea necesario
juegoEnPausa = true;
Expand All @@ -487,11 +461,24 @@ private void pausarJuego() {
disparos.clear();
}


private void reiniciarJuego() {
init(); // Reinicia el juego llamando al método init
// Detener la música de fondo y sonidos
detenerMusicaFondo();
detenerSonidoDisparo();

// Restablece las variables del juego
juegoEnPausa = true;
navesEnemigasDelay = 4000; // Restaura el retraso inicial
puntuacion = 0;
navesEnemigas.clear();
estrellas.clear();
disparos.clear();

// Muestra un cuadro de diálogo solo si el juego está en pausa
mostrarDialogoNombreYDificultad();
}


private void detenerMusicaFondo() {
if (musicaFondo != null) {
musicaFondo.pause();
Expand All @@ -506,5 +493,29 @@ private void detenerMusicaFondo() {
}
}

}

private void moverNavesEnemigas() {
Iterator<NaveEnemiga> iterator = navesEnemigas.iterator();
while (iterator.hasNext()) {
NaveEnemiga naveEnemiga = iterator.next();
naveEnemiga.mover();
if (naveEnemiga.getX() < 0) {
// Elimina la nave enemiga si sale de la pantalla
iterator.remove();
}
}
}

private void moverEstrellas() {
Iterator<Estrella> iterator = estrellas.iterator();
while (iterator.hasNext()) {
Estrella estrella = iterator.next();
estrella.mover();
if (estrella.getY1() > alto || estrella.getY2() > alto) {
// Elimina la estrella si sale de la pantalla
iterator.remove();
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,13 @@
import android.os.Handler;
import android.view.ViewTreeObserver;
import android.view.WindowManager;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;

import java.util.Timer;
import java.util.TimerTask;


public class MainActivity extends AppCompatActivity {

private Juego juego;
private final Handler handler = new Handler();

Expand All @@ -29,14 +27,14 @@ protected void onCreate(Bundle savedInstanceState) {
// Oculta la barra de estado (barra superior)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);


setContentView(R.layout.activity_main);

// Obtiene la referencia al componente de juego en el layout
juego = findViewById(R.id.Pantalla);

// Calcula el ancho y alto una vez que se ha pintado el layout
ViewTreeObserver obs = juego.getViewTreeObserver();
obs.addOnGlobalLayoutListener(() -> {
// Se calcula el ancho y alto una vez ya se ha pintado el layout
Juego.ancho = juego.getWidth();
Juego.alto = juego.getHeight();
juego.posX = 250; // Establece la posición inicial de la nave del jugador
Expand All @@ -45,7 +43,7 @@ protected void onCreate(Bundle savedInstanceState) {
juego.posNaveEnemigaY = 50;
});

// Ejecutamos la actualización del juego cada 20 milisegundos
// Ejecuta la actualización del juego cada 30 milisegundos
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
Expand Down
Loading

0 comments on commit 31b97cd

Please sign in to comment.