tempo a mostra e mais de uma variavel por linha [RESOLVIDO]

1. tempo a mostra e mais de uma variavel por linha [RESOLVIDO]

Elton Leite
bor_el_anjo

(usa Ubuntu)

Enviado em 03/06/2009 - 23:40h

Olá pessoal,
Eu estou começando a programar a pouco tempo, e estou com uma duvida num projeto de fazer o jogo Genius que a professora da faculdade passou.
Eu estou usando letras mais vetores para armazenar o equivalente as cores do jogo genius, mas queria que a letra só ficasse exibida por 1 segundo e depois a tela limpasse. Limpar a tela eu já consigo, mas o problema é como regular pra só apagá-la depois de 1 segundo? Eu pensei em usar um for, mas a velocidade podia variar dependendo do processador de cada maquina. Outra duvida é como fazer pra ser digitar em seqüencia. Por exemplo:
1ª rodada: r
2ª rodada: r g
3ª rodada: r g b
...

a parte do código que eu fiz aonde deve ocorrer isso é essa:
facil () //Se o jogador escolheu o nivel fácil cairá nessa função
{
printf ("Esse e o nivel facil\n");
int num,i , max=3;
char letra[9], resposta[8];

srand(time(NULL));
for (i = 0; i < seqFacil; i++)
{
num = rand()%max; //Armazena o inteiro acima na variavel (num)
switch (num) //Esse switch associa o numero da variavel 'num' a um caractere
{
case 0:
letra[0] = 'r';
break;

case 1:
letra[0] = 'b';
break;

case 2:
letra[0] = 'g';
break;

case 3:
letra[0] = 'y';
break;
}
letra[i+1] = letra[0]; //Vetor criado para que a sequencia nao sobreponha a anterior
printf ("%c\n", letra[i+1]);
/*Aqui deveria ficar algo pra controlar o tempo*/
printf("\e[H\e[2J"); //limpa a tela
printf ("Qual a sequencia que apareceu?\n");
scanf ("%c", &resposta[0]); /* Eu queria que cada vez aqui ficasse a seqüencia anterior mas a nova */
getchar();
if (resposta[i] == letra[i+1])
printf("Acertou!\n");
else
break;
}
}

Desde já agradeço qualquer ajuda.



  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 04/06/2009 - 03:48h

Não é certo que eu faça um exercicio para você, mas como não encontrei uma implementação do jogo na internet, vou quebrar teu galho.
NOTE: Aqui só refiz a função facil(), com ela você pode fazer algo mais elaborado.

void facil()
{
printf ("Esse e o nivel facil\n");
int num, i, j;
int max_rodadas = 8, max = 3;//numero maximo desejado mais 1
int seqFacil = 9;
int score = 0;//para ficar mais bonito
char letra[9], resposta[9], continuar;

srand(time(NULL));
//NOTE: NO JOGO GENIUS(OU SIMONS) É MOSTRADA UMA SEQUENCIA QUE PROGRESSIVAMENTE ALMENTA A DIFICULDADE, AQUI IMPLEMENTEI A MESMA IDEIA, COM NO MAXIMO 8 RODADAS SEGUIDAS, COMPARANDO 9 CARACTERES.
//poderia ter mais rodadas
j = 0;
while(j < max_rodadas)
{
printf("\tNIVEL:::%d\n", j);
//espera 3 segundos...
sleep(3);
//... e limpa a tela.
printf("\e[H\e[2J");
for(i = 0; i < seqFacil; i++)
{
///////escolhe um numero aleatoriamente entre 0 e 2
num = rand()%max; //Armazena o inteiro acima na variavel (num)
switch(num) //Esse switch associa o numero da variavel 'num' a um caractere
{
case 0:
letra[i] = 'r';//atribuindo 'r' a letra[i]
break;

case 1:
letra[i] = 'b';//atribuindo 'b' a letra[i]
break;

case 2:
letra[i] = 'g';//atribuindo 'g' a letra[i]
break;

case 3://ESSA PARTE TEM QUE SER RETIRADA
//se(num = rand()%max) e (max=3), então: num NUNCA será 3;
// para num ser no maximo 3, max deve ser 4, sempre um a mais que o valor maximo desejado
letra[i] = 'y';//O que seria o 'y'???
break;
}

// letra[i+1] = letra[0]; //Vetor criado para que a sequencia nao sobreponha a anterior
// printf ("%c\n", letra[i+1]);
///////mostra a letra sorteada para o usuario...
printf("%c\n", letra[i]);
///////...aguarda 2 segundos para que o usuario veja o caractere escolhido...
sleep(2);//2 segundos

//...e limpa "a tela".
printf("\e[H\e[2J");
}

printf ("Qual a sequencia que apareceu?\n");
for(i = 0; i < seqFacil; i++)
{
//pega um caractere por vez
scanf("%c",&resposta[i]);
//limpando o buffer
getchar();
//compara se o caractere digitado corresponde ao da sequencia inicial
if(resposta[i] == letra[i])
{
printf("Acertou!\n");
score = score + 1;
}
else
{
//NOTE: reveja aqui!
printf("\nVocê Errou!\n\n");
printf("Deseja continuar? (s/n)\n");
continuar = getchar();
//getchar();
if(continuar == 's' || continuar == 'S')
{
//resetando o jogo
j = -1;
i = seqFacil + 1;
//O score só é mostrado quando o usuario desistir
//break;
}
else if(continuar == 'n' || continuar == 'N')
{
printf("FIM DE JOGO\n");
printf("\tSCORE:::%d letra(s) correta(s)\n\n", score);
return;
}
else
{
printf("Opção Inválida\n");
}
}
}
}

}


valeu!


3. obrigado

Elton Leite
bor_el_anjo

(usa Ubuntu)

Enviado em 04/06/2009 - 15:02h

Muito obrigado Sam,
Minha principal duvida era essa de como controlar o tempo, eu não conhecia essa função sleep. Quanto ao "case 3" que vc tinha perguntado para oq era, é por que o jogo Genius apresenta 4 cores: vermelho, azul, verde e amarelo, e eu estava esquecendo de botar o max como 4. :X
Com o código que você fez deu pra tirar outras grandes duvidas...
muito obrigado novamente. \o/






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts