From 03925e1ea8ebea0c0398dc497e8f397f8237dfc3 Mon Sep 17 00:00:00 2001
From: Kevin Alonso <77780140+KevinAlonso5@users.noreply.github.com>
Date: Sat, 16 May 2026 00:18:51 +0200
Subject: [PATCH] modificado el qr y mejorada la kinestetika de los botones
---
.../java/com/helldivers/app/ActivityGame.java | 65 +++++++++++++------
.../java/com/helldivers/app/ActivityQR.java | 8 +--
app/src/main/res/layout/activity_game.xml | 33 +++++++---
app/src/main/res/layout/activity_qr.xml | 6 +-
4 files changed, 75 insertions(+), 37 deletions(-)
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/res/layout/activity_game.xml b/app/src/main/res/layout/activity_game.xml
index d82c6a8..88be895 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">
+
+
+
+
+
\ No newline at end of file