Baixe o app para aproveitar ainda mais
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
Compartilhar