Um gerador de palavras cruzadas. A maioria das pessoas já tentou resolver um jogo de palavras cruzadas pelo menos uma vez, mas poucas tentaram criar um. A criação de um diagrama de palavras cruzadas é um problema difícil. Ele é sugerido aqui como um projeto de

manipulação de string que exige sofisticação e esforço substanciais. Existem muitos problemas que você precisa resolver para fazer funcionar até mesmo o mais simples programa gerador de palavras cruzadas. Por exemplo, como se representa a grade de um diagrama de palavras

cruzadas dentro do computador? Deve-se usar uma série de strings, ou arrays de subscrito duplo? Você precisa de uma fonte de palavras (ou seja, um dicionário computadorizado)

que possa ser referenciado diretamente por um programa. Em que forma essas palavras devem ser armazenadas para facilitar as manipulações complexas exigidas pelo programa? O leitor realmente ambicioso desejará gerar a parte das ‘dicas’ das palavras cruzadas em que

as informações breves para cada palavra na ‘horizontal’ e cada palavra na ‘vertical’ sejam impressas para o usuário do diagrama. A mera impressão de uma versão do próprio diagrama em branco não é um problema simples.

Passo 1

Beleza pessoal, no projeto de hoje temos uma atividade SUPER MEGA HIPER difícil e complicada, irei apenas realizar uma demonstração do que seria um jogo de palavras cruzadas que o exercício pede pois realizar TUDO o que está sendo pedido daria um livro.

Vamos ser humildes e plantar a ideia por trás do código, e realizar uma palavra cruzada na horizontal apenas, mas a ideia pode ser modificada e utilizada para vertical e para ambos também.

Primeiro iremos começar com o cabeçalho, algo obrigatório em C. Após o include, temos a nossa primeira função, a função de dicas(), que é onde tem as dicas sobre o as palavras que o usuário deve advinhas, ela será chamada em momentos oportunos seguindo a vontade do usuário.

#include

void dicas(){

printf("\n--------------DICAS----------------");

printf("\n(1) 4 Letras e termina em A");

printf("\n(2) 5 Letras e a primeira letra é igual a da (1)");

printf("\n(3) 9 Letras e a terceira letra é a mesma da primeira letra de (1) e (2)");

printf("\n(4) 5 Letras e a quarta letra é a mesma da terceira letra de (2)");

}

int main() {

//aqui é onde iremos guardar as palavras, elas não serão mudadas apenas guardadas

char casa[4] = "casa";

char carro[5] = "carro";

char bicicleta[9] = "bicicleta";

char livro[5] = "livro";

//aqui é onde ficarão as palavras corretamente preenchidas pelo jogador

char ucasa[4] = "****";

char ucarro[5] = "*****";

char ubicicleta[9] = "*********";

char ulivro[5] = "*****";

//aqui temos onde temporariamente as palavras irão ficar preenchidas, afim de comparar se o jogador acertou ou nao

char tcasa[4] = "****";

char tcarro[5] = "*****";

char tbicicleta[9] = "*********";

char tlivro[5] = "*****";

int jogador; // utilizado para seleção no menu, utilizado pelo jogador

int contador;

int m; //controla o estado do jogo, se o jogo terminou ou nao

m = 1;

Passo 2

aqui iremos começar a construir o nosso menu, que irá ficar sendo executado até o usuário desistir de jogar ou até ele ganhar. Temos um menu de opções dado ao jogador, e lá é onde ele escolhe a opção do que fazer.

while(m){

estado(); //estado do jogo, se o jogador ganhou o game ou nao

if(jogador == 1){

dicas(); //caso o jogador deseje, as dicas serão chamadas

opcao(); //as opções para o jogador são mostradas novamente

}

if(jogador == 2){

printf("Qual das palavras voce acha que sabe?: ");

scanf("%d", &contador);

if(contador == 1){

printf("Digite a palavra");

scanf("%c", &tcasa);

if(tcasa == casa){

//caso o jogador acerte, os asteriscos dao lugar as letras

ucasa[0]= tcasa[0];

ucasa[1]= tcasa[1];

ucasa[2]= tcasa[2];

ucasa[3]= tcasa[3];

printf("Voce acertou!");

menu();

opção();

}else{

printf("Voce errou!"); //ele errando, o menu aparece novamente e as opções para que ele possa continuar o jogo

menu();

opcao();

}

}

if(contador == 2){

printf("Digite a palavra");

scanf("%c", &tcarro);

if(tcasa == casa){

ucarro[0] = tcarro[0];

ucarro[1] = tcarro[1];

ucarro[2] = tcarro[2];

ucarro[3] = tcarro[3];

ucarro[4] = tcarro[4];

printf("Voce acertou!");

menu();

opcao();

}else{

printf("Voce errou!");

menu();

opcao();

}

}

if(contador == 3){

printf("Digite a palavra");

scanf("%c", &tcasa);

if(tbicicleta == bicicleta){

ubicicleta[0] = tbicicleta[0];

ubicicleta[1] = tbicicleta[1];

ubicicleta[2] = tbicicleta[2];

ubicicleta[3] = tbicicleta[3];

ubicicleta[4] = tbicicleta[4];

ubicicleta[5] = tbicicleta[5];

ubicicleta[6] = tbicicleta[6];

ubicicleta[7] = tbicicleta[7];

ubicicleta[8] = tbicicleta[8];

printf("Voce acertou!");

menu();

opcao();

}else{

printf("Voce errou!");

menu();

opcao();

}

}

if(contador == 4){

printf("Digite a palavra");

scanf("%c", &tlivro);

if(tlivro == livro){

ulivro[0] = tlivro[0];

ulivro[1] = tlivro[1];

ulivro[2] = tlivro[2];

ulivro[3] = tlivro[3];

ulivro[4] = tlivro[4];

printf("Voce acertou!");

menu();

opcao();

}else{

printf("Voce errou!");

menu();

opcao();

}

}

}

if(jogador == 3 ){

m = 0;//caso o jogador queira terminar o jogo e sair

}

}

Passo 3

Nessa continuação do nosso código, temos as nossas funções, é onde mostramos ao usuário o nosso jogo, e caso ele acerte, os dados serão substituídos. Algo bem simples, mas apenas uma forma de pensar em como resolver esse problema tão complexo.

void menu(){

printf("(1) XXXX%c %c %c %cXX", &ucasa[0], &ucasa[1], &ucasa[2], &ucasa[3]);

printf("\n(2) XXX%c %c %c %c %cXXXX", &ucarro[0], &ucarro[1], &ucarro[2], &ucarro[3], &ucarro[4]);

printf("\n(3) XX%c %c %c %c %c %c %c %c %cXXXX", &bicicleta[0], &bicicleta[1], &bicicleta[2], &bicicleta[3], &bicicleta[4],&bicicleta[5], &bicicleta[6], &bicicleta[7], &bicicleta[8]);

printf("\n(4) XXX%c %c %c %c %c", &ulivro[0], &ulivro[1], &ulivro[2], &ulivro[3], &ulivro[4]);

}

void opcao(){

printf("Olá, Bem vindo ao JOGO");

printf("O que gostaria de fazer: ");

printf("[1] Dicas \n[2] Responder uma palavra \n[3] Encerrar o jogo");

scanf("%d", &jogador);

}

void estado(){

if(ucasa == "casa" && ucarro == "carro" && ubicicleta=="bicicleta" && ulivro =="livro"){

printf("Fim do jogo, você venceu! RECEBAAAA!!!!");

m = 0;

}

}

}

Muito mais recursos poderiam ser adicionados, poderíamos também fazer a parte vertical, e pedir para o usuário selecionar caso ele queira tentar digitar aquela parte. A substituição da string pode ser feita também de forma ‘automática’ com o uso do for. Esse exercício, em outras linguagens e com outros conhecimentos seria com certeza mais fácil, mas a ideia aqui é apenas dar uma ideia inicial de como isso pode ser feito para que vocês possam terminar.

O dicionário de palavras poderia ser também feito, mas isso daria muito mais trabalho, seria interessantes ter posições pré-ordenadas em que as palavras horizontais e verticais fossem ficar, a partir dai seria importante uma função para testar se as letras em uma posição x,y,z vertical etc., também esta presente na horizontal, e assim escolher palavra.

Resposta

Ver o desenvolvimento.