Ir ao conteúdo
  • Cadastre-se

Linguagem C


Olimartinez

Posts recomendados

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
}
}

Link para o comentário
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
}
}

Link para o comentário
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.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!