Jogo da Velha em Pascal

Padrão

Olá pessoal! Aqui estou eu de volta. E como prometido no final do último post, teremos uma “brincadeirinha”. Utilizando os conceitos que vocês já conhecem, elaborei um Jogo da Velha bem simples, mas bastante divertido, que roda em modo console. Com isso, vocês irão perceber que o que mais importa quando se vai programar é a IMAGINAÇÃO e a CRIATIVIDADE! 🙂

tela-jogo-velha

Bom, o link com o código-fonte está aqui. Escrevi e compilei ele na IDE do Free Pascal, mas acredito que vocês conseguirão compilá-lo sem problema nenhum tanto no Pascal Zim, quanto no Turbo Pascal. Pra compilar no Pascal Zim, é só retirar a área que contém as Uses crt; e no Turbo Pascal, se caso estiver utilizando a versão Windows, colocar wincrt em vez de crt.

Vou então explicar as partes principais do código (que também está com alguns comentários)

var
   campo : array[1..3, 1..3] of integer;
   i, j, vencedor, vez, jogada, numero_jogadas : integer;
   jogada_ok : boolean;

Na declaração de variáveis, temos uma matriz 3×3 chamada campo, que representará o nosso campo de jogo. Logo em seguida, temos i e j, que são os índices que utilizaremos em algumas partes para varrer a matriz. vez representa de quem é a vez de jogar (no caso, jogador 1 ou jogador 2) . Jogada, irá armazenar o número inteiro correspondente a uma jogada (número de 1 a 9). Numero_jogadas será um contador de jogadas, pois o jogo, invariavelmente, acaba após 9 jogadas, mesmo que não haja vencedores. Por último, temos a variável booleana jogada_ok, que será o indicador para a próxima jogada. Nela colocaremos um valor verdadeiro ou falso após conferir se o número digitado pelo jogador resulta em uma jogada válida (número de 1 a 9 e se o campo selecionado já não foi marcado em uma jogada anterior).

(* Inicializando o campo de jogo *)
for i := 1 to 3 do
begin
   for j := 1 to 3 do
   begin
      campo[i, j] := 0;
   end;
end;

No início do processamento, inicializamos o campo de jogo, com dois fors encadeados, setando todas as posições da matriz com o valor 0, que indicará ‘vazio’ em nosso jogo. Após isso são exibidas as instruções aos jogadores e espera-se que uma tecla seja pressionada para continuar, através da função readkey.

Logo em seguida, realizamos algumas inicializações de variáveis. Setamos o valor 0 para a variável vencedor. Esta variável irá armazenar o valor 1 ou 2 dependende de quem ganhar o jogo, ou ainda o valor 3 caso o jogo termine empatado. Inicializamos também a variável vez, definindo o jogador 1 como quem vai iniciar o jogo, e a variável numero_jogadas, que será o nosso contador de jogadas, com o valor 0.

Prosseguindo, entramos dentro do looping principal do jogo, controlado pela variável vencedor (enquanto igual a zero, ou seja, enquanto não houver vencedor). Dentro do looping, limpamos a tela com a função clrscr (clear screen), e mostramos o campo de jogo atual.

Em seguida, temos uma consistência. Consistência vem a ser um método de “forçar” o usuário em um programa a inserir uma entrada desejada. Com o uso de consistências, evita-se que o programa reaja de maneira indesejada, devido a entradas inesperadas. Neste caso do nosso jogo, obtemos a leitura de uma jogada e verificamos se ela é válida, conferindo se a célula selecionada está livre e se o valor digitado corresponde a uma célula válida. Dessa forma, enquanto não tivermos uma jogada válida, ficaremos em looping.

Caso a jogada seja válida, incrementamos o contador de jogadas e conferimos se existe algum ganhador. Passamos a vez para o outro jogador e voltamos ao início do looping principal, até que haja um vencedor, ou o número máximo de jogadas seja atingido. Ao final, exibimos na tela o campo de jogo novamente, e apresentamos o resultado final.

Bom, pessoal, o jogo foi feito de maneira bem simples (pode não ser a maneira mais eficiente de se fazer), mas fiz com o intuito de mostrar a vocês um exemplo do que já podem programar com o conhecimento que já sabem. Apesar de não ter nenhuma interface gráfica, ele já serve pra gastar uns minutinhos aí se divertindo e ainda mostrar pros seus amigos.

Fica aí, então, a dica: que tal fazer um RPG de opções? Com o conteúdo dos próximos posts, vocês verão que o principal para se desenvolver um jogo não é o conhecimento da linguagem (obviamente, é necessário um certo conhecimento…), mas a criatividade e a capacidade de abstração (transformar o pensamento humano em lógica de programação!).

Bom, então até o próximo post, com um conteúdo bastante útil para a programação: Registros (estruturas). Abraço a todos e até a próxima!

C:Músicas LitúrgicasLiturgia XI – Tempo Comum Ano Cvence

5 comentários sobre “Jogo da Velha em Pascal

    • Rafael

      No próprio post tem o link pra download do código-fonte. Ele está todo estruturado sem funções, então deve se encaixar pro que você quer.

  1. jade lessa

    Bom dia, poderia me ajudar? estou com dificuldade em adicionar opções no inicio do programa, como por exemplo dar opção ao usuário para jogar contra outro usuário ou contra o computador (que efetuará jogadas aleatórias no caso), ou simplesmente encerrar o programa.
    como incrementaria esse codigo com essas opções?
    grata desde já!

  2. Lucas Oliveira

    Olá, estou programando em DEV Pascal, creio que seja uma derivação do Pascal. Preciso fazer um código do Jogo da Velha, e gostaria de saber se esse código executaria normalmente no DEV, se não, o que preciso modificar para que dê certo? Obrigado!

  3. rosemiro

    código do jogo da velha

    program jogo_da_velha;

    uses crt;

    var
    campo : array[1..3, 1..3] of integer;
    i, j, vencedor, vez, jogada, numero_jogadas, velha: integer;
    jogada_ok : boolean;

    begin
    for i := 1 to 3 do
    begin
    for j := 1 to 3 do
    begin
    campo[i, j] := 0;
    end;
    end;
    textcolor(white);
    gotoxy(30,12);
    writeln(‘Pressione uma tecla para começar o jogo’);
    readkey;

    vencedor := 0;
    vez := 1;
    numero_jogadas := 0;

    while (vencedor = 0) do
    begin

    clrscr;

    writeln;
    writeln(‘ ‘, campo[1, 1], ‘ | ‘, campo[1, 2], ‘ | ‘, campo[1, 3]);
    writeln(‘ ___________’);
    writeln(‘ ‘, campo[2, 1], ‘ | ‘, campo[2, 2], ‘ | ‘, campo[2, 3]);
    writeln(‘ ___________’);
    writeln(‘ ‘, campo[3, 1], ‘ | ‘, campo[3, 2], ‘ | ‘, campo[3, 3]);
    writeln;

    repeat
    write(‘ Digite um número, jogador ‘, vez, ‘: ‘);
    readln(jogada);

    if (jogada = 1) then
    begin
    if (campo[3, 1] = 0) then
    begin
    campo[3, 1] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 2) then
    begin
    if (campo[3, 2] = 0) then
    begin
    campo[3, 2] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 3) then
    begin
    if (campo[3, 3] = 0) then
    begin
    campo[3, 3] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 4) then
    begin
    if (campo[2, 1] = 0) then
    begin
    campo[2, 1] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 5) then
    begin
    if (campo[2, 2] = 0) then
    begin
    campo[2, 2] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 6) then
    begin
    if (campo[2, 3] = 0) then
    begin
    campo[2, 3] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 7) then
    begin
    if (campo[1, 1] = 0) then
    begin
    campo[1, 1] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 8) then
    begin
    if (campo[1, 2] = 0) then
    begin
    campo[1, 2] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else if (jogada = 9) then
    begin
    if (campo[1, 3] = 0) then
    begin
    campo[1, 3] := vez;
    jogada_ok := true;
    end
    else
    begin
    jogada_ok := false;
    end;
    end
    else
    begin
    jogada_ok := false;
    end;
    until(jogada_ok = true);

    numero_jogadas := numero_jogadas + 1;

    if (campo[1, 1] = campo[1, 2]) and (campo[1, 2] = campo[1, 3]) and (campo[1, 3] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[2, 1] = campo[2, 2]) and (campo[2, 2] = campo[2, 3]) and (campo[2, 3] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[3, 1] = campo[3, 2]) and (campo[3, 2] = campo[3, 3]) and (campo[3, 3] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[1, 1] = campo[2, 1]) and (campo[2, 1] = campo[3, 1]) and (campo[3, 1] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[1, 2] = campo[2, 2]) and (campo[2, 2] = campo[3, 2]) and (campo[3, 2] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[1, 3] = campo[2, 3]) and (campo[2, 3] = campo[3, 3]) and (campo[3, 3] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[1, 1] = campo[2, 2]) and (campo[2, 2] = campo[3, 3]) and (campo[3, 3] 0) then
    begin
    vencedor := vez;
    end
    else if (campo[1, 3] = campo[2, 2]) and (campo[2, 2] = campo[3, 1]) and (campo[3, 1] 0) then
    begin
    vencedor := vez;
    end
    else if (numero_jogadas = 9) then
    begin
    vencedor := 3;
    end;

    if (vez = 2) then
    begin
    vez := 1;
    end
    else
    begin
    vez := 2;
    end;
    end;

    clrscr;
    writeln;
    writeln(‘ ‘, campo[1, 1], ‘ | ‘, campo[1, 2], ‘ | ‘, campo[1, 3]);
    writeln(‘ ___________’);
    writeln(‘ ‘, campo[2, 1], ‘ | ‘, campo[2, 2], ‘ | ‘, campo[2, 3]);
    writeln(‘ ___________’);
    writeln(‘ ‘, campo[3, 1], ‘ | ‘, campo[3, 2], ‘ | ‘, campo[3, 3]);
    writeln;

    if (vencedor = 1) then
    begin
    write(‘ Parabéns jogador 1! Você Ganhou!’);
    end
    else if(vencedor = 2) then
    begin
    write(‘ Parabéns jogador 2! Você Ganhou!’);
    end
    else if(velha = 4) then
    begin
    writeln(‘ Ninguém Ganhou! VELHA!’);
    end;

    readkey;
    end.

Deixe uma resposta