Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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
}
}

Editado por dif
Usara tag CODE

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.

Editado por Olimartinez
Erro de escrita

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deixa eu ver se entendi, você precisa gerar números randômicos?

que não podem ser repetidos?

Editado por Sylerr

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






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

×