diff --git a/app/src/main/java/com/helldivers/app/ActivityGame.java b/app/src/main/java/com/helldivers/app/ActivityGame.java
index 004705e..4629247 100644
--- a/app/src/main/java/com/helldivers/app/ActivityGame.java
+++ b/app/src/main/java/com/helldivers/app/ActivityGame.java
@@ -82,7 +82,7 @@ private static final int[][] STRATAGEMS = {
new int[]{UP, DOWN, RIGHT, LEFT, UP}, // Reinforce
new int[]{DOWN, DOWN, UP, RIGHT}, // Resupply
new int[]{UP, DOWN, RIGHT, UP}, // SOS Beacon
- new int[]{DOWN, UP, LEFT, DOWN, UP, RIGHT, DOWN, UP}, // NUX-223 Hellbomb
+ new int[]{DOWN, UP, LEFT, DOWN, UP, RIGHT, DOWN}, // NUX-223 Hellbomb
new int[]{DOWN, DOWN, DOWN, UP, UP}, // SSSD Delivery
new int[]{UP, UP, LEFT, RIGHT, DOWN, DOWN}, // Seismic Probe
new int[]{UP, UP, LEFT, UP, RIGHT}, // Eagle Rearm
@@ -190,7 +190,7 @@ private static final String[] NAMES = {
private SoundManager soundManager;
private Handler handler = new Handler();
- private TextView tvCounter;
+ private TextView tvCounter, tvFailuresCounter;
private ImageView ivStratagemIcon;
private LinearLayout sequenceContainer;
private ImageButton btnUp, btnDown, btnLeft, btnRight, btnVolver;
@@ -200,6 +200,7 @@ private static final String[] NAMES = {
private int[] sequence;
private int playerIndex = 0;
private int completadas = 0;
+ private int fallos = 0;
private boolean esperando = false;
private boolean juegoActivo = true;
private int currentStratagemIndex = 0;
@@ -214,6 +215,7 @@ private static final String[] NAMES = {
catch (Exception e) { soundManager = null; }
tvCounter = findViewById(R.id.tv_counter);
+ tvFailuresCounter = findViewById(R.id.tv_failures_counter);
ivStratagemIcon = findViewById(R.id.iv_stratagem_icon);
sequenceContainer = findViewById(R.id.sequence_container);
btnUp = findViewById(R.id.btn_up);
@@ -226,14 +228,32 @@ private static final String[] NAMES = {
btnVolver.setOnClickListener(v -> finish());
- if (btnUp != null) btnUp.setOnClickListener(v -> onInputWithSound(UP));
- if (btnDown != null) btnDown.setOnClickListener(v -> onInputWithSound(DOWN));
- if (btnLeft != null) btnLeft.setOnClickListener(v -> onInputWithSound(LEFT));
- if (btnRight != null) btnRight.setOnClickListener(v -> onInputWithSound(RIGHT));
+ if (btnUp != null) btnUp.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(UP); });
+ if (btnDown != null) btnDown.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(DOWN); });
+ if (btnLeft != null) btnLeft.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(LEFT); });
+ if (btnRight != null) btnRight.setOnClickListener(v -> { animateButtonClick(v); onInputWithSound(RIGHT); });
nuevaRonda();
}
+ private void animateButtonClick(View v) {
+ // Feedback háptico (vibración corta)
+ v.performHapticFeedback(android.view.HapticFeedbackConstants.VIRTUAL_KEY);
+
+ // Animación de escala más agresiva y rápida
+ v.animate()
+ .scaleX(0.7f)
+ .scaleY(0.7f)
+ .setDuration(40)
+ .withEndAction(() -> v.animate()
+ .scaleX(1.0f)
+ .scaleY(1.0f)
+ .setDuration(150)
+ .setInterpolator(new android.view.animation.OvershootInterpolator(4.0f)) // Rebote más fuerte
+ .start())
+ .start();
+ }
+
private int getArrowRotation(int dir) {
switch(dir) {
case UP: return 0;
@@ -277,18 +297,20 @@ private static final String[] NAMES = {
sequenceContainer.removeAllViews();
for (int i = 0; i < sequence.length; i++) {
- TextView arrowView = new TextView(this);
- int size = (int)(56 * getResources().getDisplayMetrics().density);
- int margin = (int)(4 * getResources().getDisplayMetrics().density);
+ ImageView arrowView = new ImageView(this);
+ int size = (int) (45 * getResources().getDisplayMetrics().density);
+ int margin = (int) (2 * getResources().getDisplayMetrics().density);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(size, size);
params.setMargins(margin, margin, margin, margin);
arrowView.setLayoutParams(params);
-
- arrowView.setText(String.valueOf(ARROW_CHARS.charAt(sequence[i])));
- arrowView.setTextColor(Color.parseColor("#FFFFFF"));
- arrowView.setGravity(Gravity.CENTER);
- arrowView.setBackgroundResource(R.drawable.arrow_white);
-
+
+ arrowView.setImageResource(R.drawable.ic_dpad_button);
+ arrowView.setBackgroundResource(R.drawable.btn_direction);
+ arrowView.setRotation(getArrowRotation(sequence[i]));
+ arrowView.setColorFilter(Color.WHITE);
+ int padding = (int) (8 * getResources().getDisplayMetrics().density);
+ arrowView.setPadding(padding, padding, padding, padding);
+
sequenceContainer.addView(arrowView);
}
}
@@ -309,9 +331,9 @@ private static final String[] NAMES = {
if (sequenceContainer != null && playerIndex <= sequence.length) {
View child = sequenceContainer.getChildAt(playerIndex - 1);
- if (child instanceof TextView) {
- TextView arrowView = (TextView) child;
- arrowView.setTextColor(Color.parseColor("#00FF00"));
+ if (child instanceof ImageView) {
+ ImageView arrowView = (ImageView) child;
+ arrowView.setColorFilter(Color.parseColor("#fde902"));
}
}
@@ -337,8 +359,11 @@ private static final String[] NAMES = {
try { soundManager.playFailure(); } catch (Exception e) {}
}
juegoActivo = false;
- if (ivFailure != null) ivFailure.setVisibility(View.VISIBLE);
- handler.postDelayed(this::nuevaRonda, 1500);
+ fallos++;
+ if (tvFailuresCounter != null) tvFailuresCounter.setText(String.valueOf(fallos));
+
+ // Delay de medio segundo antes de reiniciar
+ handler.postDelayed(this::nuevaRonda, 500);
}
}
diff --git a/app/src/main/java/com/helldivers/app/ActivityQR.java b/app/src/main/java/com/helldivers/app/ActivityQR.java
index 7061d37..25bd378 100644
--- a/app/src/main/java/com/helldivers/app/ActivityQR.java
+++ b/app/src/main/java/com/helldivers/app/ActivityQR.java
@@ -54,14 +54,14 @@ public class ActivityQR extends AppCompatActivity {
int width = bitMatrix.getWidth();
int height = bitMatrix.getHeight();
- Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
+ Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
- int black = 0xFF000000;
- int white = 0xFFFFFFFF;
+ int qrColor = 0xFFFFFFFF; // Blanco para los módulos del QR
+ int transparent = 0x00000000; // Transparente para el fondo
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
- bmp.setPixel(x, y, bitMatrix.get(x, y) ? black : white);
+ bmp.setPixel(x, y, bitMatrix.get(x, y) ? qrColor : transparent);
}
}
diff --git a/app/src/main/java/com/helldivers/app/MainActivity.java b/app/src/main/java/com/helldivers/app/MainActivity.java
index cfb3af3..58a5299 100644
--- a/app/src/main/java/com/helldivers/app/MainActivity.java
+++ b/app/src/main/java/com/helldivers/app/MainActivity.java
@@ -1,6 +1,7 @@
package com.helldivers.app;
import android.content.Intent;
+import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
@@ -13,7 +14,9 @@ public class MainActivity extends AppCompatActivity {
private SoundManager soundManager;
private Button btnQrInstagram;
private Button btnMinijuego;
+ private Button btnMusic;
private ImageButton btnUp, btnDown, btnLeft, btnRight;
+ private MediaPlayer mediaPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -32,6 +35,7 @@ public class MainActivity extends AppCompatActivity {
btnDown = findViewById(R.id.btn_down);
btnLeft = findViewById(R.id.btn_left);
btnRight = findViewById(R.id.btn_right);
+ btnMusic = findViewById(R.id.btn_music);
if (btnQrInstagram != null) {
btnQrInstagram.setOnClickListener(v -> {
@@ -45,6 +49,10 @@ public class MainActivity extends AppCompatActivity {
});
}
+ if (btnMusic != null) {
+ btnMusic.setOnClickListener(v -> toggleMusic());
+ }
+
View.OnClickListener arrowSoundListener = v -> {
if (soundManager != null) {
try { soundManager.playButtonClick(); } catch (Exception e) {}
@@ -57,6 +65,31 @@ public class MainActivity extends AppCompatActivity {
if (btnRight != null) btnRight.setOnClickListener(arrowSoundListener);
}
+ private void toggleMusic() {
+ if (mediaPlayer == null) {
+ mediaPlayer = MediaPlayer.create(this, R.raw.ost);
+ mediaPlayer.setOnCompletionListener(mp -> {
+ stopMusic();
+ });
+ }
+
+ if (mediaPlayer.isPlaying()) {
+ stopMusic();
+ } else {
+ mediaPlayer.start();
+ btnMusic.setAlpha(0.5f); // Efecto visual de activado
+ }
+ }
+
+ private void stopMusic() {
+ if (mediaPlayer != null) {
+ mediaPlayer.stop();
+ mediaPlayer.release();
+ mediaPlayer = null;
+ btnMusic.setAlpha(1.0f); // Restaurar opacidad
+ }
+ }
+
@Override
protected void onResume() {
super.onResume();
@@ -72,6 +105,7 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onDestroy() {
super.onDestroy();
+ stopMusic();
if (soundManager != null) soundManager.release();
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_game.xml b/app/src/main/res/layout/activity_game.xml
index d82c6a8..cd1858e 100644
--- a/app/src/main/res/layout/activity_game.xml
+++ b/app/src/main/res/layout/activity_game.xml
@@ -9,20 +9,35 @@
-
+ android:layout_marginBottom="180dp"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index bb1d670..abb574e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -60,6 +60,7 @@
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="40dp"
+ android:translationY="30dp"
android:rowCount="3"
android:columnCount="3"
android:padding="8dp">
@@ -128,4 +129,19 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_qr.xml b/app/src/main/res/layout/activity_qr.xml
index 81bb398..4148c3c 100644
--- a/app/src/main/res/layout/activity_qr.xml
+++ b/app/src/main/res/layout/activity_qr.xml
@@ -22,12 +22,10 @@
\ No newline at end of file
diff --git a/app/src/main/res/raw/ost.mp3 b/app/src/main/res/raw/ost.mp3
new file mode 100644
index 0000000..d3cbc1e
Binary files /dev/null and b/app/src/main/res/raw/ost.mp3 differ