Ir ao conteúdo
  • Cadastre-se
Olimartinez

Linguagem C

Recommended Posts

Galera tenho que montar esse programa https://docs.google.com/file/d/0B-GE9X0O4llYT3JQZVFBS3JPcmM/edit?usp=sharing e eu não sei o que ta dando de errado. Se aguem puder me ajudar agradeço. ahhh o que eu montei foi:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//Sorteando um numero aleatorio entre x e y:
int aleatorio(int x, int y){
srand(time(NULL));
int a;
a = x+1 + rand()%(y-x);
return a;
}

int tabuleiro[30]; //variavel global
//Construindo o tabuleiro 30 casas sendo 5 com obstaculos
void iniciar(){
int obst,obstaculos=0,i;
//Inicializando o tabuleiro
for(i=0;i<30;i++){
tabuleiro[i] = 0 ;}
//definindo obstaculos
while(obstaculos<5){
obst=aleatorio(1,28);
if(tabuleiro[obst]==0){
tabuleiro[obst] = -1;
obstaculos+=1;}
else {continue;}
}

}


//Jogada
int posicao(int position){
srand(time(NULL));
int N,parcela,n,soma=0,soma_usr,dado;
int new_position;
N = (position+1)*2;
for(n=0;n<N;n++){
parcela = rand()%10; /*Por enquanto limitar valor da parcela parcelas ate 9, pode alterar isso*/
soma+=parcela;
//CONTROLAR O TEMPO QUE APARECE NA TELA;
printf("%d: %d\r",n+1,parcela);
fflush(stdout); //Para limpar tela
// _sleep(100); Para windows com biblioteca windows.h ? Nao sei, uso Ubuntu
sleep(5);//esperar tempo no gcc 5 segundos

}
printf("Valor da soma: ");
scanf("%d",&soma_usr);
if(soma_usr!=soma){
printf("Errou!\n");
return position;} //Errou, nao muda a posicao
else{
dado = aleatorio(1,6);
new_position=position+dado;
if(new_position>=29){
printf("Fim de jogo, você venceu!\n");
return 29;}
else{
if(tabuleiro[new_position] == -1){ //Se cair em obstaculo
printf("você caiu em um obstaculo!\n");
if(position>3){ return position-3;}
else{ return 0;} //Se obstaculo anterior a terceira casa, volta para casa inicial
}
else{ return new_position;} //Se nao cair em obstaculo, avanca para nova posicao
}
}
}


//Imprimir posições no tabuleiro
void imprimir(int jogador1, int jogador2){
int i;
printf("Tabuleiro: \n");
for(i=0;i<30;i++){
if(i==jogador1){ printf("%d",1);}
if(i==jogador2){ printf("%d",2);}
else{
if(tabuleiro[i]==0){
printf("-");}
else{
printf("@");}
}

}
}

//Iniciando
void main(){
iniciar();
int i,jogador1=0,jogador2=0; //posições inicias dos jogadores é 0
imprimir(jogador1,jogador2);
printf("\n");
//Jogadas
while(jogador1!=29 && jogador2!=29){
printf("\n\nJogador 1: \n");
jogador1 = posicao(jogador1);
if(jogador1==29){break;}
//IMPRIMIR TABULEIRO APOS JOGADA
printf("Nova posicao do jogador 1: %d\n\n",jogador1);
imprimir(jogador1,jogador2);
sleep(8); //Para um intervalo entre os jogadores
printf("\n\nJogador 2: \n");
jogador2 = posicao(jogador2);
//IMPRIMIR TABULEIRO APOS JOGADA
printf("Nova posicao do jogador 2: %d\n\n",jogador2);
imprimir(jogador1,jogador2);
sleep(8); //Para um intervalo entre os jogadores
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui identifiquei que você estava usando apenas 8 milissegundos de pausa é muito pouco, e que a função Sleep (com S maiusculo) é da windows.h. Ai eu coloquei um valor de 2000 no Sleep e funcionou e acrescentei o


system(cls);


Sleep(2000);//dois segundos

Aplicando as correções fica:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

//Sorteando um numero aleatorio entre x e y:
int aleatorio(int x, int y){
srand(time(NULL));
int a;
a = x+1 + rand()%(y-x);
return a;
}

int tabuleiro[30]; //variavel global
//Construindo o tabuleiro 30 casas sendo 5 com obstaculos
void iniciar(){

int obst,obstaculos=0,i;
//Inicializando o tabuleiro
for(i=0;i<30;i++){
tabuleiro[i] = 0 ;
}
//definindo obstaculos
while(obstaculos<5){
obst=aleatorio(1,28);

if(tabuleiro[obst]==0){
tabuleiro[obst] = -1;
obstaculos+=1;
}
else {
continue;
}
}
}

//Jogada
int posicao(int position){
srand(time(NULL));

int N,parcela,n,soma=0,soma_usr,dado;
int new_position;

N = (position+1)*2;

for(n=0;n<N;n++){
parcela = rand()%10; /*Por enquanto limitar valor da parcela parcelas ate 9, pode alterar isso*/
soma+=parcela;

//CONTROLAR O TEMPO QUE APARECE NA TELA;
printf("%d: %d\r",n+1,parcela);
fflush(stdout); //Para limpar tela
// _sleep(100); Para windows com biblioteca windows.h ? Nao sei, uso Ubuntu
Sleep(2000);//esperar tempo no gcc 5 segundos

}

printf("Valor da soma: ");
scanf("%d",&soma_usr);

if(soma_usr!=soma){
printf("Errou!\n");

Sleep(2000);//para exibir a mensagem errou

return position;
} //Errou, nao muda a posicao
else{
dado = aleatorio(1,6);
new_position=position+dado;

if(new_position>=29){
printf("Fim de jogo, você venceu!\n");
Sleep(2000);//para exibir a mensagem
return 29;
}
else{
if(tabuleiro[new_position] == -1){ //Se cair em obstaculo
printf("você caiu em um obstaculo!\n");
Sleep(2000);//para exibir a mensagem
if(position>3){
return position-3;
}
else{
return 0;
} //Se obstaculo anterior a terceira casa, volta para casa inicial
}
else{ return new_position;
} //Se nao cair em obstaculo, avanca para nova posicao

}
}
}


//Imprimir posições no tabuleiro
void imprimir(int jogador1, int jogador2){
int i;
system("cls");//limpa a tela
printf("Tabuleiro: \n");

for(i=0;i<30;i++){
if(i==jogador1){
printf("%d",1);
}
if(i==jogador2){
printf("%d",2);
}
else{
if(tabuleiro[i]==0){
printf("-");
}
else{
printf("@");}
}

}

}

//Iniciando
void main(){
iniciar();
int i,jogador1=0,jogador2=0; //posições inicias dos jogadores é 0

imprimir(jogador1,jogador2);

printf("\n");

//Jogadas
while(jogador1!=29 && jogador2!=29){

printf("\n\nJogador 1: \n");
jogador1 = posicao(jogador1);

if(jogador1==29){
break;
}
//IMPRIMIR TABULEIRO APOS JOGADA
printf("Nova posicao do jogador 1: %d\n\n",jogador1);
imprimir(jogador1,jogador2);

Sleep(2000); //Para um intervalo entre os jogadores 2 segundos

printf("\n\nJogador 2: \n");
jogador2 = posicao(jogador2);

//IMPRIMIR TABULEIRO APOS JOGADA
printf("Nova posicao do jogador 2: %d\n\n",jogador2);
imprimir(jogador1,jogador2);

Sleep(2000); //Para um intervalo entre os jogadores
}
}

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado antônio mais um erro que eu ainda não consegui consertar é em relação a soma que tá dando apenas um numero e sempre e o mesmo numero que é o 12 e na verdade o programa precisa gerar n números para a pessoa poder fazer a soma e a cada jogada o numero tem que ser diferente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olimartinez,

Remova esta instrução abaixo de dentro da função aleatorio() e coloque-a no inicio do programa, logo no início de main(), antes daquela chamada à função iniciar().

srand(time(NULL));

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×