Está en la página 1de 3

PROGRAM JUEGOS_GABRIEL

IMPLICIT NONE
INTEGER :: OPCION_JUEGOS, REPETIR_MENU
INTEGER :: ELECCION_USUARIO, RESULTADO, ELECCION_PROGRAMA_INT,
NUMERO_ALEATORIO, INTENTO
INTEGER, PARAMETER :: TAM = 5
INTEGER, PARAMETER :: TAM_BARCO = 3
CHARACTER(1) :: tablero(TAM, TAM)
CHARACTER(1) :: tablero_pc(TAM, TAM)
INTEGER :: FILA, COLUMNA, HOV, I, JUGADOR_DISPARO_X, JUGADOR_DISPARO_Y,
DISPAROX, DISPAROY
REAL :: RANDOM_NUMBER_RESULTADO, U
LOGICAL :: JUGADOR_GANA, PC_GANA

!Inicia el menú de juegos


REPETIR_MENU = 1
DO WHILE (REPETIR_MENU == 1)
WRITE(*,*) 'Selecciona el juego.'
WRITE(*,*) '1.-Piedra, papel o tijeras.'
WRITE(*,*) '2.-Batalla naval.'
WRITE(*,*) '3.-Adivina el número.'
WRITE(*,*) '4.-Salir.'
READ(*,*) OPCION_JUEGOS
SELECT CASE (OPCION_JUEGOS)
CASE (1) !Inicia Piedra, papel o tijeras
WRITE(*,*) 'Elige una opción:'
WRITE(*,*) '1. Piedra'
WRITE(*,*) '2. Papel'
WRITE(*,*) '3. Tijera'
READ(*, *) ELECCION_USUARIO
! Genera una elección aleatoria para el programa
CALL RANDOM_NUMBER(RANDOM_NUMBER_RESULTADO)
ELECCION_PROGRAMA_INT = CEILING(RANDOM_NUMBER_RESULTADO * 3)
! Determina el resultado
RESULTADO = MOD(ELECCION_USUARIO - ELECCION_PROGRAMA_INT + 3, 3)
! Imprime las elecciones y el resultado
WRITE(*, *) 'Tu elección:', ELECCION_USUARIO
WRITE(*, *) 'Elección del programa:', ELECCION_PROGRAMA_INT
SELECT CASE(RESULTADO)
CASE (0)
WRITE(*, *) '¡Empate!'
CASE (1)
WRITE(*, *) '¡Ganaste!'
CASE (2)
WRITE(*, *) '¡El programa gana!'
END SELECT
CASE (2) !Inicia Batalla Naval
TABLERO = ' '
TABLERO_PC = ' '
WRITE(*,*) 'Batalla Naval'
WRITE(*,*) 'Elige la posicion de tu barco'
WRITE(*,*) 'Coordenada X (1-5):'
READ(*,*) FILA
WRITE(*,*) 'Coordenada Y (1-5):'
READ(*,*) COLUMNA
DO
CALL RANDOM_NUMBER(U)
HOV = 1 + FLOOR(U*((2-1)+1))
IF (HOV == 1) THEN ! Horizontal
IF (FILA + TAM_BARCO - 1 <= TAM) THEN
TABLERO(FILA:FILA+TAM_BARCO-1, COLUMNA) = 'B'
EXIT
END IF
ELSE ! Vertical
IF (COLUMNA + TAM_BARCO - 1 <= TAM) THEN
TABLERO(FILA, COLUMNA:COLUMNA+TAM_BARCO-1) = 'B'
EXIT
END IF
END IF
END DO
DO
CALL RANDOM_NUMBER(U)
FILA = 1 + FLOOR(U*((TAM-1)+1))
CALL RANDOM_NUMBER(U)
COLUMNA = 1 + FLOOR(U*((TAM-1)+1))
CALL RANDOM_NUMBER(U)
HOV = 1 + FLOOR(U*((2-1)+1))
IF (HOV == 1) THEN ! Horizontal
IF (FILA + TAM_BARCO - 1 <= TAM) THEN
TABLERO_PC(FILA:FILA+TAM_BARCO-1, COLUMNA) = 'B'
EXIT
END IF
ELSE ! Vertical
IF (COLUMNA + TAM_BARCO - 1 <= TAM) THEN
TABLERO_PC(FILA, COLUMNA:COLUMNA+TAM_BARCO-1) = 'B'
EXIT
END IF
END IF
END DO
!inicializar las variables de victoria
JUGADOR_GANA = .FALSE.
PC_GANA = .FALSE.
!comienza el juego
DO WHILE(.NOT. JUGADOR_GANA .AND. .NOT. PC_GANA)
!turno del jugador
WRITE(*,*) 'Tablero:'
DO I = 1, TAM
WRITE(*,*) TABLERO(I, :)
END DO
WRITE(*,*) 'Elige la coordenada X (1-5):'
READ(*,*) JUGADOR_DISPARO_X
WRITE(*,*) 'Elige la coordenada Y (1-5):'
READ(*,*) JUGADOR_DISPARO_Y
IF(TABLERO_PC(JUGADOR_DISPARO_X, JUGADOR_DISPARO_Y) == 'B')
THEN
WRITE(*,*) '¡Barco eliminado!'
JUGADOR_GANA = .TRUE.
ELSE
WRITE(*,*) 'Agua'
TABLERO(JUGADOR_DISPARO_X, JUGADOR_DISPARO_Y) = 'X'
END IF
!turno de la computadora
CALL RANDOM_NUMBER(U)
DISPAROX = 1 + FLOOR(U * ((TAM-1)+1))
CALL RANDOM_NUMBER(U)
DISPAROY = 1 + FLOOR(U * ((TAM-1)+1))
IF(TABLERO(DISPAROX, DISPAROY) == 'B') THEN
WRITE(*,*) 'La pc ha eliminado tu barco'
PC_GANA= .TRUE.
ELSE
WRITE(*,*) 'La pc tiro al agua'
TABLERO_PC(DISPAROX, DISPAROY) = 'X'
END IF
END DO
!anunciar al ganador
IF(JUGADOR_GANA) THEN
WRITE(*,*) 'Ganaste'
ELSE
WRITE(*,*) 'La pc ganó'
END IF
TABLERO = ' '
TABLERO_PC = ' '
CASE (3) ! Adivina el número
CALL RANDOM_NUMBER(RANDOM_NUMBER_RESULTADO)
NUMERO_ALEATORIO = INT(100 * RANDOM_NUMBER_RESULTADO) + 1
INTENTO = 0
DO WHILE (ELECCION_USUARIO /= NUMERO_ALEATORIO)
WRITE(*,*) 'Escriba el posible número:'
READ(*,*) ELECCION_USUARIO
IF (ELECCION_USUARIO < NUMERO_ALEATORIO) THEN
WRITE(*,*) 'Número bajo.'
ELSE IF (ELECCION_USUARIO > NUMERO_ALEATORIO) THEN
WRITE(*,*) 'Número alto.'
ELSE IF (ELECCION_USUARIO == NUMERO_ALEATORIO) THEN
WRITE(*,*) 'CORRECTO.'
END IF
END DO
CASE (4)
WRITE(*,*) 'Saliendo del programa.'
EXIT
CASE DEFAULT
WRITE(*,*) 'Opción inválida.'
END SELECT

IF (OPCION_JUEGOS /= 4) THEN
WRITE(*,*) '¿Volver al menú? (1.-Si 2.-No)'
READ(*,*) REPETIR_MENU
END IF
END DO
END PROGRAM JUEGOS_GABRIEL

También podría gustarte