1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Arquivo em Pascal

Discussão em 'Programação' iniciada por Triran, 13 de Outubro de 2008. (Respostas: 1; Visualizações: 1321)

  1. Eu fiz um programa que simula um jogo da Forca, criando uma matriz que guardava dentro do programa mesmo as palavras que eu sortiava. Porém como é um trabalho da faculdade, descobri que o meu professor quer que façamos um (ou varios) arquivo(s) txt para que o usuario do jogo possa modificar as palavras do jogo. Porém eu não sei como fazer isso.

    O meu programa ficou meio grandinho, tá aí:

    Código:
    program Forca;{programa que simula um jogo da forca; Responsßvel: Igor Berqu¾ CanÛdo; Data:07/10/08}
    
    uses
    
       crt;
    
    var
    
       MatrizForca: array [1..10,1..3] of String;
       palavraCerta, palavraParcial : String;
       letrasUsadas : array [1..100] of String;
       tentativa : char;
       opcao, i, j, k, cont, aux, qtdTentativas, troca, teste, testeOficial, testeDeLeitura : integer;
    
    
    // inicio dos procedimentos
    
    procedure rot0Tentativas; {desenhos e rotinas da forca}
    
    begin
    
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|           0');
            writeln('|          /|\');
            writeln('|          / \');
            writeln('|            ');
            writeln('|            ');
            writeln;
            troca:=0;
            writeln (' Voce perdeu, tente novamente.');
            readkey;
    
    end;
    
    procedure rot6Tentativas;
    
    begin
        
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
    
        for cont:=1 to Length(palavraCerta) do
            write(palavraParcial[cont]);
    
            writeln;
            writeln (' Voce tem ',qtdTentativas,' tentativas restantes.');
            write (' Digite uma letra (letra minuscula) e aperte enter para confirmar: ');
            readln(tentativa);
            troca:=0;
        testeOficial:=0;
            for cont:= 1 to Length(palavraCerta) do
    
                    if (palavraCerta[cont] = tentativa) then
                
                begin
    
                            palavraParcial[cont] := tentativa;
                testeOficial:=10
    
                end
    
                    else
    
                            troca:=troca+1;
    
    
            if (troca > 0) and (testeOficial <> 10) then
    
                    begin
    
                            writeln('Esta palavra nao possui a(s) seguinte(s) letra(s):');
                letrasUsadas[aux]:=tentativa;
                aux:=aux+1;
                
                for k:= 1 to aux-1 do
    
                    write(' ',letrasUsadas[k],' ');
    
    
                            qtdTentativas := qtdTentativas - 1;
                writeln;
                writeln('Aperte enter para uma nova tentativa');
                readkey;
    
                    end;
    
    end;
    
    
    
    procedure rot5Tentativas;
    
    begin
        
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|           0');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
    
        for cont:=1 to Length(palavraCerta) do
            write(palavraParcial[cont]);
    
            writeln;
            writeln (' Voce tem ',qtdTentativas,' tentativas restantes.');
            write (' Digite uma letra (letra minuscula) e aperte enter para confirmar: ');
            readln(tentativa);
            troca:=0;
        testeOficial:=0;
            for cont:= 1 to Length(palavraCerta) do
    
                    if (palavraCerta[cont] = tentativa) then
                
                begin
    
                            palavraParcial[cont] := tentativa;
                testeOficial:=10
    
                end
    
                    else
    
                            troca:=troca+1;
    
    
            if (troca > 0) and (testeOficial <> 10) then
    
                    begin
    
                            writeln('Esta palavra nao possui a(s) seguinte(s) letra(s):');
                letrasUsadas[aux]:=tentativa;
                aux:=aux+1;
                
                for k:= 1 to aux-1 do
    
                    write(' ',letrasUsadas[k],' ');
    
    
                            qtdTentativas := qtdTentativas - 1;
                writeln;
                writeln('Aperte enter para uma nova tentativa');
                readkey;
    
                    end;
    
    end;
    
    
    
    procedure rot4Tentativas;
    
    begin
    
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|           0');
            writeln('|           |');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
    
            for cont:=1 to Length(palavraCerta) do
            write(palavraParcial[cont]);
    
            writeln;
            writeln (' Voce tem ',qtdTentativas,' tentativas restantes.');
            write (' Digite uma letra (letra minuscula) e aperte enter para confirmar: ');
            readln(tentativa);
            troca:=0;
        testeOficial:=0;
            for cont:= 1 to Length(palavraCerta) do
    
                    if (palavraCerta[cont] = tentativa) then
                
                begin
    
                            palavraParcial[cont] := tentativa;
                testeOficial:=10
    
                end
    
                    else
    
                            troca:=troca+1;
    
    
            if (troca > 0) and (testeOficial <> 10) then
    
                    begin
    
                            writeln('Esta palavra nao possui a(s) seguinte(s) letra(s):');
                letrasUsadas[aux]:=tentativa;
                aux:=aux+1;
                
                for k:= 1 to aux-1 do
    
                    write(' ',letrasUsadas[k],' ');
    
    
                            qtdTentativas := qtdTentativas - 1;
                writeln;
                writeln('Aperte enter para uma nova tentativa');
                readkey;
    
                    end;
    
    end;
    
    
    procedure rot3Tentativas;
    
    begin
    
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|           O');
            writeln('|          /|');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
    
        for cont:=1 to Length(palavraCerta) do
            write(palavraParcial[cont]);
    
            writeln;
            writeln (' Voce tem ',qtdTentativas,' tentativas restantes.');
            write (' Digite uma letra (letra minuscula) e aperte enter para confirmar: ');
            readln(tentativa);
            troca:=0;
        testeOficial:=0;
            for cont:= 1 to Length(palavraCerta) do
    
                    if (palavraCerta[cont] = tentativa) then
    
                begin
    
                            palavraParcial[cont] := tentativa;
                testeOficial:=10
    
                end
    
                    else
    
                            troca:=troca+1;
                
    
            if (troca > 0) and (testeOficial <> 10) then
    
                    begin
    
                            writeln('Esta palavra nao possui a(s) seguinte(s) letra(s):');
                letrasUsadas[aux]:=tentativa;
                aux:=aux+1;
    
                for k:= 1 to aux-1 do
    
                    write(' ',letrasUsadas[k],' ');
    
                    
                            qtdTentativas := qtdTentativas - 1;
                writeln;
                writeln('Aperte enter para uma nova tentativa');
                readkey;
    
                    end;
    
    end;
    
    
    procedure rot2Tentativas;
    
    begin
    
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|           0');
            writeln('|          /|\');
            writeln('|            ');
            writeln('|            ');
            writeln('|            ');
    
        for cont:=1 to Length(palavraCerta) do
            write(palavraParcial[cont]);
    
            writeln;
            writeln (' Voce tem ',qtdTentativas,' tentativas restantes.');
            write (' Digite uma letra (letra minuscula) e aperte enter para confirmar: ');
            readln(tentativa);
            troca:=0;
        testeOficial:=0;
            for cont:= 1 to Length(palavraCerta) do
    
                    if (palavraCerta[cont] = tentativa) then
                
                begin
    
                            palavraParcial[cont] := tentativa;
                testeOficial:=10
    
                end
    
                    else
    
                            troca:=troca+1;
    
    
            if (troca > 0) and (testeOficial <> 10) then
    
                    begin
    
                            writeln('Esta palavra nao possui a(s) seguinte(s) letra(s):');
                letrasUsadas[aux]:=tentativa;
                aux:=aux+1;
                
                for k:= 1 to aux-1 do
    
                    write(' ',letrasUsadas[k],' ');
    
    
                            qtdTentativas := qtdTentativas - 1;
                writeln;
                writeln('Aperte enter para uma nova tentativa');
                readkey;
    
                    end;
    
    end;
    
    
    procedure rot1Tentativas;
    
    begin
    
        clrscr;
            writeln('.___________.');
            writeln('|           $');
            writeln('|           0');
            writeln('|          /|\');
            writeln('|          / ');
            writeln('|            ');
            writeln('|            ');
    
        for cont:=1 to Length(palavraCerta) do
            write(palavraParcial[cont]);
    
            writeln;
            writeln (' Voce tem ',qtdTentativas,' tentativas restantes.');
            write (' Digite uma letra (letra minuscula) e aperte enter para confirmar: ');
            readln(tentativa);
            troca:=0;
        testeOficial:=0;
            for cont:= 1 to Length(palavraCerta) do
    
                    if (palavraCerta[cont] = tentativa) then
    
                begin
    
                            palavraParcial[cont] := tentativa;
                testeOficial:=10
    
                end
    
                    else
    
                            troca:=troca+1;
                
    
            if (troca > 0) and (testeOficial <> 10) then
    
                    begin
    
                            writeln('Esta palavra nao possui a(s) seguinte(s) letra(s):');
                letrasUsadas[aux]:=tentativa;
                aux:=aux+1;
    
                for k:= 1 to aux-1 do
    
                    write(' ',letrasUsadas[k],' ');
    
                    
                            qtdTentativas := qtdTentativas - 1;
                            rot0Tentativas;
    
                    end;
    
    end; {fim das rotinas de desenhos da forca}
    
    
    procedure rotPalavras;
    
    begin
            {Preenchimento das palavras}
    
            MatrizForca[1,1]:= 'brasil';
            MatrizForca[2,1]:= 'argentina';
            MatrizForca[3,1]:= 'italia';
            MatrizForca[4,1]:= 'franca';
            MatrizForca[5,1]:= 'alemanha';
            MatrizForca[6,1]:= 'australia';
            MatrizForca[7,1]:= 'japao';
            MatrizForca[8,1]:= 'holanda';
            MatrizForca[9,1]:= 'portugal';
            MatrizForca[10,1]:= 'jamaica';
    
            MatrizForca[1,2]:= 'flamengo';
            MatrizForca[2,2]:= 'vasco da gama';
            MatrizForca[3,2]:= 'palmeiras';
            MatrizForca[4,2]:= 'corinthians';
            MatrizForca[5,2]:= 'sport';
            MatrizForca[6,2]:= 'barcelona';
            MatrizForca[7,2]:= 'ajax';
            MatrizForca[8,2]:= 'manchester united';
            MatrizForca[9,2]:= 'milan';
            MatrizForca[10,2]:= 'lyon';
    
            MatrizForca[1,3]:= 'macaco';
            MatrizForca[2,3]:= 'mico-leao';
            MatrizForca[3,3]:= 'cachorro';
            MatrizForca[4,3]:= 'girafa';
            MatrizForca[5,3]:= 'leao';
            MatrizForca[6,3]:= 'hipopotamo';
            MatrizForca[7,3]:= 'avestruz';
            MatrizForca[8,3]:= 'jacare';
            MatrizForca[9,3]:= 'tartaruga';
            MatrizForca[10,3]:= 'jabuti';
    
    end;
    
    procedure rotTema; {rotina de escolha do tema}
    
    begin
        
        clrscr;
                writeln('Escolha um dos temas a seguir');
            writeln;
            writeln('1)Paises');
            writeln('2)Times de Futebol');
            writeln('3)Animais');
            readln(j);
    
    end;
    
    
    procedure rotJogar;
    
    begin
    
        aux:=1; {serß usado para controlar as letras erradas}
        rotPalavras; {buscando o "arquivo" com as palavras}
            i:=1+random(9); {randomizando a linha de cada coluna}
    
        if j = 0 then {caso o usuario nÒo tenha escolhido um tema, o programa vai escolher por ele na primeira vez}
            j:=1+random(2);
    
        palavraCerta := MatrizForca[i,j];
    
            for cont := 0 to Length(palavraCerta) do {jogando espaþos, hÝfens e o simbolo da palavra escondida}
    
                    begin
                            if (palavraCerta[cont] = ' ') then
    
                                    palavraParcial[cont] := ' '
                            else
    
                                    if (palavraCerta[cont] = '-') then
    
                                            palavraParcial[cont] := '-'
    
                                    else
    
                                            palavraParcial[cont] := '@';
    
                    end;
    
        teste:=1;
        qtdTentativas:=6;
            repeat
    
                ClrScr;
                writeln;
                writeln (' ',palavraParcial);
                writeln;
            testeDeLeitura:=1;
    
                     for cont := 1 to Length (palavraCerta) do {testando se ainda existem letras a serem preenchidas}
    
                if palavraParcial[cont] = '@' then
    
                    testeDeLeitura:=testeDeLeitura+1;
    
                if testeDeLeitura = 1 then
    
                        begin
    
                    clrscr;
                                   writeln (' Parabens, voce acertou a palavra.');
                                readkey;
                                teste:=0 {para forþar a saida do programa}
    
                        end
    
                else
    
                        case qtdTentativas of {buscando as rotinas das forcas}
    
                                6 : rot6Tentativas;
                                5 : rot5Tentativas;
                                4 : rot4Tentativas;
                                3 : rot3Tentativas;
                                2 : rot2Tentativas;
                                1 : rot1Tentativas;
    
                        end;
    
          until (qtdTentativas = 0) or (teste = 0);
    
    end;
    
    
    procedure rotSair; {rotina de saida do programa}
    
    begin
    
            writeln;
        writeln('Saindo do programa.');
            writeln('Pressione qualquer tecla para efetuar a finalizaþÒo.');
        readkey;
    
    end;
    
    // Fim dos Procedimentos
    
    begin {Inicio do Programa}
    
    repeat
        
        clrscr;
            writeln ('Jogo da Forca');
            writeln;
            writeln('Digite de 1 a 3 para escolher uma das opþ§es a seguir:');
            writeln;
            writeln('1)Escolha um tema');
            writeln('2)Jogar');
            writeln('3)Sair do Programa');
            writeln;
            readln (opcao);
    
            Case opcao of
    
                   1 : rotTema;
                   2 : rotJogar;
                   3 : rotSair;
    
    
        end;
    
    until (opcao = 3);
    
    end. //Fim do programa;
    .

    Se alguém puder me ensinar como modificar o programa inserindo a parte da rotina que criei de palavras para um arquivo, ficarei grato.
     
  2. m00s

    m00s Power Member

    para usar a tal "base de dados" com as várias palavras tens de trabalhar com leitura de ficheiros.

    há instruções próprias para lidar com ficheiros que deves ter aceso nos teus manuais da cadeira ou quanto muito pela bibliografia.

    ...pode sempre é procurar no google.

    tens de pedir ao utilizador qual o seu "username" a fim de abrir o respectivo ficheiro de palavras e só depois inicias o jogo...pelo que entendi.
     

Partilhar esta Página