diff --git a/.idea/misc.xml b/.idea/misc.xml
index 74dd639e4ea4800753c1dbdb333093410e843492..a4f09e258122edff410c9635941aefba73ff6e87 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_21" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
   <component name="ProjectType">
diff --git a/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt b/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt
index 57a7ba14ba5ba75377f144bc88bb0af796d50e2f..de0b825015e7fe02e9116824db1170dee9cc3600 100644
--- a/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt
+++ b/app/src/main/java/com/example/ellegadodepintia/Minijuego2.kt
@@ -1,11 +1,262 @@
 package com.example.ellegadodepintia
 
+import android.annotation.SuppressLint
 import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.MotionEvent
+import android.view.View
+import android.widget.Button
+import android.widget.ImageView
+import android.widget.RelativeLayout
+import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
+import kotlin.random.Random
 
 class Minijuego2 : AppCompatActivity() {
+
+    private lateinit var botonIniciar: Button
+    private lateinit var protagonista: ImageView
+    private lateinit var layout: RelativeLayout
+    private lateinit var titulo: TextView
+    private lateinit var descripcion: TextView
+    private lateinit var puntuacionTextView: TextView // TextView para mostrar la puntuación
+    private lateinit var botonReinicio: Button
+    private lateinit var fondo1: ImageView
+    private lateinit var fondo2: ImageView
+
+
+    private var puntuacion = 0 // Puntuación del jugador
+    private var gravedad = 1f                 // Gravedad más suave
+    private var aceleracionSubida = -1f         // Aceleración gradual de subida
+    private var velocidadMaximaCaida = 20f      // Velocidad máxima de caída
+    private var velocidadMaximaSubida = -20f    // Velocidad máxima de subida
+    private var velocidad = 0f                  // Velocidad actual del protagonista
+    private var jugando = false
+    private var pulsacion =
+        false                // Bandera para saber si se está tocando la pantalla
+    private val obstaculos = mutableListOf<ImageView>() // Lista de tuberías
+    private val handler = Handler(Looper.getMainLooper())
+    private var obstacleTimer: Runnable? = null
+    private var fondoTimer: Runnable? = null
+    private var velocidadFondo = 5f // Velocidad de desplazamiento del fondo
+
+    @SuppressLint("ClickableViewAccessibility")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_minijuego2)
+
+
+        // Inicializar componentes del layout
+        botonIniciar = findViewById(R.id.boton_iniciar)
+        protagonista = findViewById(R.id.protagonista)
+        layout = findViewById(R.id.layout)
+        titulo = findViewById(R.id.titulo)
+        descripcion = findViewById(R.id.descripcion)
+        puntuacionTextView = findViewById(R.id.puntuacion)
+        botonReinicio = findViewById(R.id.boton_reinicio)
+        // Inicializar el fondo
+        fondo1 = findViewById(R.id.fondo1)
+        fondo2 = findViewById(R.id.fondo2)
+
+        // Configurar la acción del botón de inicio
+        botonIniciar.setOnClickListener {
+            iniciarJuego()
+            fondo2.x = fondo1.x + fondo1.width * 4
+        }
+
+        // Configurar el listener para detectar toques en la pantalla
+        findViewById<View>(android.R.id.content).setOnTouchListener { _, event ->
+            when (event.action) {
+                MotionEvent.ACTION_DOWN -> {
+                    pulsacion = true // Activa el "jetpack" al tocar
+                }
+
+                MotionEvent.ACTION_UP -> {
+                    pulsacion = false // Desactiva el "jetpack" al soltar
+                }
+            }
+            true
+        }
+    }
+
+    private fun iniciarJuego() {
+        // Ocultar los elementos de inicio y mostrar al protagonista
+        titulo.visibility = View.GONE
+        descripcion.visibility = View.GONE
+        botonIniciar.visibility = View.GONE
+        protagonista.visibility = View.VISIBLE
+
+        jugando = true
+        velocidad = 0f // Inicializar la velocidad en 0 al inicio
+        obstaculos.clear() // Limpiar obstáculos anteriores
+
+        // Iniciar el bucle de actualización para aplicar gravedad
+        handler.post(object : Runnable {
+            override fun run() {
+                if (jugando) {
+                    actualizarPosicionProtagonista()
+                    moverObstaculos()
+                    verificarColisiones()
+                    handler.postDelayed(this, 10)
+                }
+            }
+        })
+
+        // Iniciar el temporizador para generar obstáculos
+        obstacleTimer = object : Runnable {
+            override fun run() {
+                if (jugando) {
+                    generarObstaculo()
+                    handler.postDelayed(this, 2000) // Generar un nuevo obstáculo cada 2 segundos
+                }
+            }
+        }
+        handler.post(obstacleTimer!!)
+
+        // Iniciar el bucle para mover el fondo de manera independiente
+        fondoTimer = object : Runnable {
+            override fun run() {
+                if (jugando) {
+                    moverFondo()  // Mover el fondo
+                    handler.postDelayed(this, 10) // Actualización a 16 ms (60 fps)
+                }
+            }
+        }
+        handler.post(fondoTimer!!)
+    }
+
+    private fun actualizarPosicionProtagonista() {
+        val altitud = protagonista.y
+
+        /// Si se está tocando, se aplica la aceleración hacia arriba, limitando la velocidad máxima de subida
+        velocidad = if (pulsacion) {
+            (velocidad + aceleracionSubida).coerceAtLeast(velocidadMaximaSubida)
+        } else {
+            // Si no se toca, se aplica la gravedad, limitando la velocidad máxima de caída
+            (velocidad + gravedad).coerceAtMost(velocidadMaximaCaida)
+        }
+
+        val nuevaPosicionY = altitud + velocidad
+
+        // Obtener la altura de la pantalla de forma dinámica
+        val techoPantalla = findViewById<View>(android.R.id.content).height
+
+        // Limitar la posición del protagonista en los bordes de la pantalla
+        if (nuevaPosicionY < 0) {
+            protagonista.y = 0f
+            velocidad = 0f
+        } else if (nuevaPosicionY + protagonista.height < techoPantalla) {
+            protagonista.y = nuevaPosicionY
+        }
+    }
+
+    private fun generarObstaculo() {
+        val tuberiaInferior = ImageView(this)
+        tuberiaInferior.setBackgroundResource(R.drawable.log) // Asegúrate de que el recurso de tubería esté disponible
+        val screenHeight = findViewById<View>(android.R.id.content).height
+        val alturaTuberia = Random.nextInt(500, 1500) // Altura aleatoria de la tubería inferior
+
+        // Configurar posición y tamaño de la tubería inferior
+        val layoutParams = RelativeLayout.LayoutParams(300, alturaTuberia)
+        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
+        tuberiaInferior.layoutParams = layoutParams
+        tuberiaInferior.x = layout.width.toFloat()
+        tuberiaInferior.y = (screenHeight - alturaTuberia).toFloat()
+
+        layout.addView(tuberiaInferior)
+        obstaculos.add(tuberiaInferior)
+
+        // Generar la tubería superior
+        val tuberiaSuperior = ImageView(this)
+        tuberiaSuperior.setBackgroundResource(R.drawable.log) // Asegúrate de que el recurso de tubería esté disponible
+        val alturaTuberiaSuperior = screenHeight - alturaTuberia - 500 // Espacio entre tuberías
+
+        // Configurar posición y tamaño de la tubería superior
+        val layoutParamsSuperior = RelativeLayout.LayoutParams(300, alturaTuberiaSuperior)
+        layoutParamsSuperior.addRule(RelativeLayout.ALIGN_PARENT_RIGHT)
+        tuberiaSuperior.layoutParams = layoutParamsSuperior
+        tuberiaSuperior.x = layout.width.toFloat()
+        tuberiaSuperior.y = 0f // Colocar en la parte superior
+
+        layout.addView(tuberiaSuperior)
+        obstaculos.add(tuberiaSuperior)
+    }
+
+    private fun moverObstaculos() {
+        val obstaculosAEliminar =
+            mutableListOf<ImageView>() // Lista temporal para los obstáculos a eliminar
+
+        for (obstaculo in obstaculos) {
+            obstaculo.x -= 10f + (puntuacion / 10)// Mover obstáculo a la izquierda
+
+            // Verificar si el protagonista pasa el obstáculo
+            if (obstaculo.x + obstaculo.width < protagonista.x && obstaculo.y < protagonista.y) {
+                puntuacion++
+                puntuacionTextView.text = "Puntuación: $puntuacion"
+            }
+
+            // Verificar si el obstáculo sale de la pantalla
+            if (obstaculo.x + obstaculo.width < 0) {
+                obstaculosAEliminar.add(obstaculo) // Agregar a la lista de eliminación
+            }
+        }
+
+        // Eliminar obstáculos que salieron de la pantalla
+        for (obstaculo in obstaculosAEliminar) {
+            layout.removeView(obstaculo)
+            obstaculos.remove(obstaculo)
+        }
+    }
+
+
+    private fun verificarColisiones() {
+        for (obstaculo in obstaculos) {
+            if (obstaculo.x < protagonista.x + protagonista.width - 50 &&
+                obstaculo.x + obstaculo.width > protagonista.x &&
+                obstaculo.y < protagonista.y + protagonista.height - 20 &&
+                obstaculo.y + obstaculo.height > protagonista.y
+            ) {
+                // Colisión detectada
+                detenerJuego()
+                break
+            }
+        }
+    }
+
+    private fun detenerJuego() {
+        jugando = false
+        obstacleTimer?.let { handler.removeCallbacks(it) } // Detener el temporizador de obstáculos
+        botonReinicio.visibility = View.VISIBLE // Mostrar botón de reinicio
+
+        botonReinicio.setOnClickListener {
+            reiniciarJuego()
+        }
+    }
+
+    private fun reiniciarJuego() {
+        // Reiniciar variables del juego
+        puntuacion = 0
+        puntuacionTextView.text = "Puntuación: $puntuacion"
+        protagonista.y = (layout.height / 2).toFloat() // Reiniciar posición del protagonista
+        for (obstaculo in obstaculos) {
+            layout.removeView(obstaculo) // Eliminar cada obstáculo del layout
+        }
+        botonReinicio.visibility = View.GONE // Ocultar botón de reinicio
+        iniciarJuego() // Reiniciar el juego
+    }
+
+    private fun moverFondo() {
+        // Mueve ambos fondos hacia la izquierda
+        fondo1.x -= velocidadFondo
+        fondo2.x -= velocidadFondo
+
+        // Reinicia la posición cuando un fondo sale de la pantalla
+        if (fondo1.x + fondo1.width * 4 < 0) {
+            fondo1.x = fondo2.x + fondo2.width * 4
+        }
+        if (fondo2.x + fondo2.width * 4 < 0) {
+            fondo2.x = fondo1.x + fondo1.width * 4
+        }
     }
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/drawable/boton_triangular.xml b/app/src/main/res/drawable/boton_triangular.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1fd06e7c24017c553ebca06b533d862fad28adda
--- /dev/null
+++ b/app/src/main/res/drawable/boton_triangular.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="100dp"
+    android:height="100dp"
+    android:viewportWidth="100"
+    android:viewportHeight="100">
+    <path
+        android:fillColor="#4CAF51"
+        android:pathData="M 0,0 L 100,50 L 0,100 Z" />
+</vector>
diff --git a/app/src/main/res/drawable/log.png b/app/src/main/res/drawable/log.png
new file mode 100644
index 0000000000000000000000000000000000000000..bebd40e78efe1249a3a5db10a7bb4d829659cf9b
Binary files /dev/null and b/app/src/main/res/drawable/log.png differ
diff --git a/app/src/main/res/drawable/mini2bg.png b/app/src/main/res/drawable/mini2bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce1bb1dfce39f96a7e7d3ea0345a6a18e1b30664
Binary files /dev/null and b/app/src/main/res/drawable/mini2bg.png differ
diff --git a/app/src/main/res/drawable/restart.png b/app/src/main/res/drawable/restart.png
new file mode 100644
index 0000000000000000000000000000000000000000..7621cfc6f34e01b048be735ac5f5f54378696ac1
Binary files /dev/null and b/app/src/main/res/drawable/restart.png differ
diff --git a/app/src/main/res/drawable/roca.png b/app/src/main/res/drawable/roca.png
new file mode 100644
index 0000000000000000000000000000000000000000..9062d2cc834805047acfe1a3641c64191fc25d56
Binary files /dev/null and b/app/src/main/res/drawable/roca.png differ
diff --git a/app/src/main/res/drawable/tuberia.xml b/app/src/main/res/drawable/tuberia.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd1636d941eea72f5858c31004fd639931d01bb9
--- /dev/null
+++ b/app/src/main/res/drawable/tuberia.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="@android:color/holo_green_dark" /> <!-- Color de la tubería -->
+    <corners android:radius="0dp"/> <!-- Bordes rectos -->
+    <size
+        android:width="100dp"
+        android:height="300dp"/> <!-- Dimensiones de la tubería -->
+</shape>
diff --git a/app/src/main/res/drawable/vacceo.png b/app/src/main/res/drawable/vacceo.png
new file mode 100644
index 0000000000000000000000000000000000000000..42ddaf18633e5f0fdc3b57dd15fb189f21f08fdf
Binary files /dev/null and b/app/src/main/res/drawable/vacceo.png differ
diff --git a/app/src/main/res/layout/activity_minijuego2.xml b/app/src/main/res/layout/activity_minijuego2.xml
index 42abbe502cb2481659547d839364a4edd4d3423f..fefaab7298d625820a136add6b57f16ab9b6d846 100644
--- a/app/src/main/res/layout/activity_minijuego2.xml
+++ b/app/src/main/res/layout/activity_minijuego2.xml
@@ -1,23 +1,81 @@
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:gravity="center"
+    android:background="@color/white">
 
-    android:background="@color/pintiaBackground"
-    android:padding="16dp">
+    <ImageView
+        android:id="@+id/fondo1"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:src="@drawable/mini2bg"
+        android:scaleY="4"
+        android:scaleX="4"/>
+    <ImageView
+        android:id="@+id/fondo2"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:src="@drawable/mini2bg"
+        android:scaleY="4"
+        android:scaleX="4"/>
 
     <TextView
-        android:id="@+id/titleTextView"
+        android:id="@+id/titulo"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:text="Pintia Flying Machine"
+        android:textSize="30sp"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="100dp"
+        android:textColor="@color/black"/>
+
+    <TextView
+        android:id="@+id/descripcion"
+        android:layout_width="335dp"
+        android:layout_height="wrap_content"
+        android:layout_below="@id/titulo"
+        android:layout_centerHorizontal="true"
         android:layout_marginTop="20dp"
-        android:text="Minijuego 2"
-        android:textColor="@color/pintiaTitleText"
+        android:text="Ayuda a Vacceo a volar lo más lejos posible esquivando obstáculos."
+        android:textColor="@color/black"
+        android:textSize="16sp" />
+
+    <Button
+        android:id="@+id/boton_iniciar"
+        android:layout_width="100dp"
+        android:layout_height="100dp"
+        android:background="@drawable/boton_triangular"
+        android:text="Iniciar"
+        android:textColor="@android:color/white"
+        android:layout_below="@id/descripcion"
+        android:layout_centerHorizontal="true"
+        android:layout_marginTop="50dp"/>
+
+    <ImageView
+        android:id="@+id/protagonista"
+        android:layout_width="80dp"
+        android:layout_height="80dp"
+        android:src="@drawable/vacceo"
+        android:visibility="gone" />
+    <TextView
+        android:id="@+id/puntuacion"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Puntuación: 0"
         android:textSize="24sp"
-        android:textStyle="bold"
-        tools:ignore="HardcodedText" />
+        android:textColor="@android:color/black"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true"
+        android:layout_margin="16dp" />
+    <Button
+        android:id="@+id/boton_reinicio"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="Reiniciar"
+        android:layout_centerInParent="true"
+        android:visibility="gone" />
+
+
 
-</LinearLayout>
+</RelativeLayout>