Buscar

BatalhaNaval PRONTO

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

!JOGO BATALHA NAVAL
 CHARACTER , ALLOCATABLE :: JOGO1(:,:),JOGO2(:,:)
 CHARACTER , ALLOCATABLE :: TABULEIRO1(:,:), TABULEIRO2(:,:)
 INTEGER ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2
 INTEGER M, N, OPCAO1
 CHARACTER PROXIMO, JOGAR
 INTEGER LINHA1,COLUNA1, LINHA2, COLUNA2 !DIMENSOES DOS TABULEIROS
 CHARACTER*50 NOMEARQUIVO
 REAL PERC1
 DO
 !MENU PRINCIPAL
 WRITE (*,'(10X,A)') '**********JOGO BATALHA NAVAL**********'
 PRINT *,''
 PRINT*, ' '
 WRITE (*,'(10X,A)') '[1] CARREGAR SEUS TABULEIROS'
 WRITE (*,'(10X,A)'),'[2] SAIR'
 !MANTEM O CURSOR NA MESMA POSIۂO
 WRITE (*,'(10X,A)',ADVANCE='NO')'INFORME A OPۂO:'
 READ *,OPCAO1
 SELECT CASE (OPCAO1)
 CASE (1) !CARREGAR TABULEIROS
 !BLOCO DE CARREGAR ARQUIVOS
 !LEITURA DO ARQUIVO 1
 CALL SYSTEM('CLS')
 WRITE (*,'(10X,A)',ADVANCE='NO')'INFORME ARQUIVO 1: '
 READ *, NOMEARQUIVO
 OPEN(10,FILE=NOMEARQUIVO)
 READ(10,*) LINHA1, COLUNA1
 IF (.NOT.ALLOCATED(JOGO1)) THEN
 ALLOCATE(JOGO1(LINHA1,COLUNA1))
 ENDIF
 DO I=1,LINHA1
 READ (10,*) (JOGO1(I,J),J=1,COLUNA1)
 ENDDO
 !LEITURA DO ARQUIVO 2
 CALL SYSTEM('CLS')
 WRITE (*,'(10X,A)',ADVANCE='NO')'INFORME ARQUIVO 2: '
 READ *, NOMEARQUIVO
 OPEN(20,FILE=NOMEARQUIVO)
 READ(20,*) LINHA2, COLUNA2
 IF (.NOT.ALLOCATED(JOGO2)) THEN
 ALLOCATE(JOGO2(LINHA2,COLUNA2))
 ENDIF
 DO I=1,LINHA2
 READ (20,*) (JOGO2(I,J),J=1,COLUNA2)
 ENDDO
 ARMAS1 = 0
 ARMAS2 = 0
 !BLOCO PARA INCREMENTAR QUANTIDADE DE ARMAS
 DO I=1,LINHA1
 DO J=1,COLUNA1
 IF (JOGO1(I,J)=='x' .OR. JOGO1(I,J)=='X')THEN
 ARMAS1 = ARMAS1 + 1
 ENDIF
 ENDDO
 ENDDO
 DO I=1,LINHA2
 DO J=1,COLUNA2
 IF (JOGO2(I,J)=='x' .OR. JOGO2(I,J)=='X')THEN
 ARMAS2 = ARMAS2 + 1
 ENDIF
 ENDDO
 ENDDO
 PRINT*, ' '
 PERC1 = 0.2*(LINHA1*COLUNA1)
 !BLOCO PARA VERIFICAR QUANTIDADE DE ARMAS
 IF ((ARMAS1 == ARMAS2).AND. (NINT(PERC1)==ARMAS1)
 * .AND. (NINT(PERC1)==ARMAS2)) THEN
 PRINT *, "QUANTIDADE DE ARMAS OK"
 ELSE
 PRINT *, "REDISTRIBUA SUAS ARMAS NO TABULEIRO"
 ENDIF
 !BLOCO PARA VERIFICAR TAMANHO DAS MATRIZES
 IF ((LINHA1 == LINHA2) .AND. (COLUNA1 == COLUNA2)) THEN
 PRINT *, "TAMANHO DOS TABULEIROS OK"
 ELSE
 PRINT *, "TAMANHO DOS TABULEIROS INCOMPATÖVEL"
 ENDIF
 !BLOCO PARA VERIFICAR O JOGO
 IF ((ARMAS1 == ARMAS2) .AND. (NINT(PERC1)==ARMAS1).AND.
 * (NINT(PERC1)==ARMAS2).AND.(LINHA1 == LINHA2).AND.
 * (COLUNA1 == COLUNA2)) THEN
 PRINT *, "!!!!!!!!!!BOM JOGO!!!!!!!!!!"
 PRINT*, ' '
 !INÖCIO DAS JOGADAS
 PRINT*, "INSIRA [1] PARA COME€AR A JOGAR"
 READ*, JOGAR
 IF (JOGAR == '1') THEN
 CALL SYSTEM('CLS')
 ELSE
 PRINT*, "ESSA JOGADA NÇO � PERMITIDA, TENTE NOVAMENTE!"
 EXIT
 ENDIF
 TOTAL_ARMAS1 = ARMAS1
 TOTAL_ARMAS2 = ARMAS2
 !BLOCO PARA INICIALIZAR TABUELIRO1 COM FORMATO #
 IF (.NOT.ALLOCATED(TABULEIRO1)) THEN
 ALLOCATE(TABULEIRO1(LINHA1,COLUNA1))
 ENDIF
 IF (.NOT.ALLOCATED(TABULEIRO2)) THEN
 ALLOCATE(TABULEIRO2(LINHA2,COLUNA2))
 ENDIF
 CALL PRINT_TABULEIRO(TABULEIRO1, LINHA1, COLUNA1)
 CALL PRINT_TABULEIRO(TABULEIRO2, LINHA1, COLUNA1)
 DO
 WRITE (*,'(10X,A)') 'JOGADOR 1 - 1¦ JOGADA'
 PRINT*, ' '
 WRITE (*,'(15X,A)'),'JOGO1'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO1,COLUNA1,JOGO2,M,N,ARMAS2)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 !BLOCO PARA INFORMAR A POSI€AO DO TIRO
 PRINT*, ' '
 CALL TIRO(M,N)
 !BLOCO JOGADOR 1 - 1¦ JOGADA
 WRITE (*,'(10X,A)') 'JOGADOR 1 - 1¦ JOGADA'
 PRINT*, ' '
 TABULEIRO1(M,N) = JOGO2 (M,N)
 WRITE (*,'(15X,A)'),'JOGO1'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO1,COLUNA1,JOGO2,M,N,ARMAS2)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 PRINT*, ' '
 IF ((ARMAS2 == 0) .OR. (ARMAS1 == 0)) THEN
 WRITE (*,'(10X,A)') 'PARAB�NS, VOCÒ VENCEU O JOGO!'
 EXIT
 ENDIF
 PRINT*, ' '
 WRITE (*,'(10X,A)') 'JOGADOR 1 - 2¦ JOGADA'
 PRINT*, ' '
 CALL TIRO(M,N)
 !BLOCO JOGADOR 1 - 2¦ JOGADA
 WRITE (*,'(10X,A)') 'JOGADOR 1 - 2¦ JOGADA'
 PRINT*, ' '
 TABULEIRO1(M,N) = JOGO2 (M,N)
 WRITE (*,'(15X,A)'),'JOGO1'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO1,COLUNA1,JOGO2,M,N,ARMAS2)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 PRINT*, ' '
 IF ((ARMAS2 == 0) .OR. (ARMAS1 == 0)) THEN
 WRITE (*,'(10X,A)') 'PARAB�NS, VOCÒ VENCEU O JOGO!'
 EXIT
 ENDIF
 PRINT*, ' '
 WRITE (*,'(10X,A)') 'JOGADOR 1 - 3¦ JOGADA'
 PRINT*, ' '
 CALL TIRO(M,N)
 !BLOCO JOGADOR 1 - 3¦ JOGADA
 WRITE (*,'(10X,A)') 'JOGADOR 1 - 3¦ JOGADA'
 PRINT*, ' '
 TABULEIRO1(M,N) = JOGO2 (M,N)
 WRITE (*,'(15X,A)'),'JOGO1'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO1,COLUNA1,JOGO2,M,N,ARMAS2)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 PRINT*, ' '
 IF ((ARMAS2 == 0) .OR. (ARMAS1 == 0)) THEN
 WRITE (*,'(10X,A)') 'PARAB�NS, VOCÒ VENCEU O JOGO!'
 EXIT
 ENDIF
 PRINT*, ' '
 PRINT*,
 * "SUA QUANT. DE TIROS TERMINOU, DIGITE [1] PARA O PRàXIMO JOGADOR"
 READ*, PROXIMO
 IF (PROXIMO == '1') THEN
 CALL SYSTEM('CLS')
 ELSE
 PRINT*, "ESSA JOGADA NÇO � PERMITIDA"
 EXIT
 ENDIF
 !BLOCO PARA IMPRIMIR TABUELIRO2 COM O FORMATO#
 WRITE (*,'(10X,A)') 'JOGADOR 2 - 1¦ JOGADA'
 PRINT*, ' '
 WRITE (*,'(15X,A)'),'JOGO2'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO2,COLUNA1,JOGO1,M,N,ARMAS1)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 CALL TIRO(M,N)
 !BLOCO JOGADOR 2 - 1¦ JOGADA
 WRITE (*,'(10X,A)') 'JOGADOR 2 - 1¦ JOGADA'
 PRINT*, ' '
 TABULEIRO2(M,N) = JOGO1 (M,N)
 WRITE (*,'(15X,A)'),'JOGO2'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO2,COLUNA1,JOGO1,M,N,ARMAS1)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 PRINT*, ' '
 IF ((ARMAS2 == 0) .OR. (ARMAS1 == 0)) THEN
 WRITE (*,'(10X,A)') 'PARAB�NS, VOCÒ VENCEU O JOGO!'
 EXIT
 ENDIF
 PRINT*, ' '
 WRITE (*,'(10X,A)') 'JOGADOR 2 - 2¦ JOGADA'
 PRINT*, ' '
 CALL TIRO(M,N)
 !BLOCO JOGADOR 2 - 2¦ JOGADA
 WRITE (*,'(10X,A)') 'JOGADOR 2 - 2¦ JOGADA'
 PRINT*, ' '
 TABULEIRO2(M,N) = JOGO1 (M,N)
 WRITE (*,'(15X,A)'),'JOGO2'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO2,COLUNA1,JOGO1,M,N,ARMAS1)
 PRINT*, '
'
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 PRINT*, ' '
 IF ((ARMAS2 == 0) .OR. (ARMAS1 == 0)) THEN
 WRITE (*,'(10X,A)') 'PARAB�NS, VOCÒ VENCEU O JOGO!'
 EXIT
 ENDIF
 PRINT*, ' '
 WRITE (*,'(10X,A)') 'JOGADOR 2 - 3¦ JOGADA'
 PRINT*, ' '
 CALL TIRO(M,N)
 !BLOCO JOGADOR 2 - 3¦ JOGADA
 WRITE (*,'(10X,A)') 'JOGADOR 2 - 3¦ JOGADA'
 PRINT*, ' '
 TABULEIRO2(M,N) = JOGO1 (M,N)
 WRITE (*,'(15X,A)'),'JOGO2'
 PRINT*, ' '
 CALL JOGADA(LINHA1,TABULEIRO2,COLUNA1,JOGO1,M,N,ARMAS1)
 PRINT*, ' '
 CALL ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2)
 PRINT*, ' '
 PRINT*, ' '
 
 IF ((ARMAS2 == 0) .OR. (ARMAS1 == 0)) THEN
 WRITE (*,'(10X,A)') 'PARAB�NS, VOCÒ VENCEU O JOGO!'
 EXIT
 ENDIF
 PRINT*, ' '
 PRINT*,
 * "SUA QUANT. DE TIROS TERMINOU, DIGITE [1] PARA O PRàXIMO JOGADOR"
 READ*, PROXIMO
 IF (PROXIMO == '1') THEN
 CALL SYSTEM('CLS')
 ELSE
 PRINT*, "ESSA JOGADA NÇO � PERMITIDA"
 ENDIF
 ENDDO
 ELSE
 PRINT*, "REORGANIZE SEU JOGO NO TABULEIRO"
 CALL MENU_PRINCIPAL(OPCAO1)
 ENDIF
 CLOSE(10)
 CLOSE(20)
 CASE (2) !SAIR DO MENU
 EXIT
 CASE DEFAULT
 PRINT*, ' '
 PRINT*, "ESSA JOGADA NÇO � PERMITIDA"
 EXIT
 END SELECT
 ENDDO
 PAUSE
 END
 
 !SUB-ROTINA PARA O MENU PRINCIPAL
 SUBROUTINE MENU_PRINCIPAL(OPCAO1)
 INTEGER OPCAO1
 WRITE (*,'(10X,A)') '**********JOGO BATALHA NAVAL**********'
 PRINT *,''
 WRITE (*,'(10X,A)') '[1] CARREGAR TABULEIROS'
 WRITE (*,'(10X,A)'),'[2] SAIR'
 !MANTEM O CURSOR NA MESMA POSIۂO
 WRITE (*,'(10X,A)',ADVANCE='NO')'INFORME A OPۂO '
 READ *,OPCAO1
 RETURN
 END
 !SUB-ROTINA PARA INICIALIZAR TABULEIRO COM O FORMATO #
 !IRµ PRINTAR PARA O USUµRIO A MATRIZ DO JOGO NO FORMATO DE #
 SUBROUTINE PRINT_TABULEIRO(M, LINHA, COLUNA)
 INTEGER LINHA, COLUNA
 CHARACTER M (LINHA, COLUNA)
 DO I = 1, LINHA
 DO J = 1, COLUNA
 M(I,J) = '#'
 ENDDO
 ENDDO
 RETURN
 END
 !SUB-ROTINA DE ONDE QUERO DAR O TIRO NO TABULEIRO ADVERSµRIO
 SUBROUTINE TIRO(M,N)
 INTEGER M,N
 WRITE (*,'(5X,A)',ADVANCE='NO')
 * "INSIRA A LINHA E COLUNA DE ONDE QUER ATIRAR: "
 READ*, M, N
 CALL SYSTEM('CLS')
 RETURN
 END
 
 !SUB-ROTINA PARA CALCULAR ARMAS RESTANTES
 ! QUAANDO AO PERCORER A MATRIZ E ACHAR UMA ARMA, IRµ DECREMENTAR
 !NO VALOR DE ARMAS TOTAIS DO JOGADOR
 SUBROUTINE ARMASR(ARMAS1, ARMAS2, TOTAL_ARMAS1,
 * TOTAL_ARMAS2)
 INTEGER ARMAS1, ARMAS2, TOTAL_ARMAS1, TOTAL_ARMAS2
 PRINT*, 'NéMERO DE ARMAS RESTANTES DO JOGADOR 1: ',
 * ARMAS1, '/','DE', TOTAL_ARMAS1
 PRINT*, 'NéMERO DE ARMAS RESTANTES DO JOGADOR 2: ',
 * ARMAS2, '/','DE', TOTAL_ARMAS2
 RETURN
 END
 !SUB-ROTINA PARA MOSTRAR A JOGADA
 SUBROUTINE JOGADA(LINHA1,TABULEIRO1,COLUNA1,JOGO2,M,N,ARMAS2)
 INTEGER LINHA1,COLUNA1,M,N,ARMAS2
 CHARACTER TABULEIRO1(LINHA1,COLUNA1),JOGO2(LINHA1,COLUNA1)
 DO I = 1, LINHA1
 PRINT*, ' ',(TABULEIRO1(I,J),J=1,COLUNA1)
 ENDDO
 IF (JOGO2(M,N) == 'X' .OR. JOGO2(M,N) == 'x') THEN
 ARMAS2 = ARMAS2 - 1
 !AO PERCORRER A MATRIZ, SE O MESMO ACHAR ARMAS, IRµ DECREMENTAR
 ENDIF
 RETURN
 END

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando