Arquivo em Pascal

Triran

Membro
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.
 
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.
 
Back
Topo