Ir ao conteúdo
  • Cadastre-se

C Jogo MasterMind em C


Infante98

Posts recomendados

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define V_MAX 8 // Valor máximo definido numa constante.

int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);



int main()

{
	int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);
	chave_sorteada(0, 0, 0, 0);

	printf("\n A chave do programa eh %i %i %i %i \n", chave_sorteada);



	system("pause");
}


int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4)
{

	srand(time(NULL));
	
	
	numero_1 = 1 + rand() % 8; // Para tirarmos o primeiro número á sorte.
	numero_2 = 1 + rand() % 8; // Para tirarmos o segundo número á sorte.
	numero_3 = 1 + rand() % 8; // Para tirarmos o terceiro número á sorte.
	numero_4 = 1 + rand() % 8; // Para tirarmos o quarto número á sorte.
	
	while (numero_1 == numero_2 || numero_1 == numero_3 || numero_1 == numero_4 || numero_2 == numero_3 || numero_2 == numero_4 || numero_3 == numero_4)
	{
		numero_1 = 1 + rand() % 8; // Para tirarmos o primeiro número á sorte.
		numero_2 = 1 + rand() % 8; // Para tirarmos o segundo número á sorte.
		numero_3 = 1 + rand() % 8; // Para tirarmos o terceiro número á sorte.
		numero_4 = 1 + rand() % 8; // Para tirarmos o quarto número á sorte.
	}
	

	return numero_1, numero_2, numero_3, numero_4;
}

Boa tarde, estou a tentar elaborar um programa que crie o jogo MasterMind. Numa primeira fase, criei uma função para gerar 4 números aleatórios de 1 a 9, e retornar esses valores para a função main.

Enquanto algum dos 4 números for igual, o programa deve gerar 4 novos números até todos serem diferentes e por isso utilizei o ciclo while.

 

A minha dúvida é porque é que o printf não está a imprimir 4 números aleatórios de 1 a 9. E saber se em vez de retornar os 4 valores individualmente, poderia retornar esses 4 valores num vetor.

 

Desde já obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

@Infante98 existe varias maneiras do numero aleatorio nunca repetir. olhe esse exemplo que gera 8 numeros aleatorios e nunca repete o mesmo numero...

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

int main() {
  int aleatorio[10]; /* variáveis colocadas aqui antes da main são inicializadas com valor zero */
  srand(time(NULL)); /* usada apenas uma vez no programa todo                */
  int cont, j, achou, num;
  for (cont = 0; cont < 8; cont++) {
    do {
      achou = 0; /* igual a falso                                        */
      num = rand() % 8 + 1;

      for (j = 0; j < 8; j++)
        if (num == aleatorio[j])
          achou = 1; /* numero repetiu , igual a verdadeiro                  */

    } while (achou); /* repete enquanto verdadeiro                           */
    aleatorio[cont] = num;

  }
  for (j = 0; j < 8; j++)
		printf("%d",aleatorio[j]);
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);

int main()

{
	int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);
	chave_sorteada(0, 0, 0, 0);

	printf("\n A chave do programa eh %i %i %i %i \n", chave_sorteada);

  ...
  

Está errado. Quase tudo.

 

na primeira declaracao você está declarando um protótipo, para o compilador entender o que é chave_sorteada quando encontrar no código. Se declara assim:

int chave_sorteada(int, int, int, int);

Não há razão para colocar nomes de variávies aí porque não serão lidos. Só importa informar que 

  • retorna um int
  • recebe 4 arqumentos int

A primeira instrução de main()

int chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);

não faz sentido.

 

Se quer chamar a função escreva 

int valor = chave_sorteada(int numero_1, int numero_2, int numero_3, int numero_4);

Mas já digo que não é isso o que você quer. Você quer os 4 int gerados por chave_sorteada() só que não tem como. Só recebe um parâmetro int que sequer usou. O resto fica lá dentro da tal função para sempre.

 

E  o printf()?

printf("\n A chave do programa eh %i %i %i %i \n", chave_sorteada);

Respondendo a sua pergunta, não imprime nada porque especificou 4 parâmetros int para o printf() e no entanto só tem um lá: o int que sua função retorna.

 

Você tem um livro? Qual é? Uma apostila?

 

Três maneiras simples de retornar esses valores:

  • você passa para chave_sorteada() o endereço de um vetor com ao menos 4 posições int e a rotina preenche
  • você passa 4 ponteiros para valores int que declarou em main()
  • você cria uma struct{} com os 4 valores e a rotina devolve a struct ao invés de um int

Essa é a saida do programa abaixo

[1] retornou [1,2,3,4]
[2] retornou [5,6,7,8]
[3] retornou [9,10,11,12]
#include "stdio.h"

struct chaves
{
	int c1;
	int c2;
	int c3;
	int c4;
};
typedef struct chaves Chaves; // so pra ficar mais fácil de ler

Chaves	calcula_1();
void	calcula_2(int*,int*,int*,int*);
void	calcula_3(int v[]);

int main(int argc, char** argv)
{
	Chaves  conj1;
	int		chaves[4];

	Chaves v = calcula_1();
	// retornou chaves em v
	printf("[1] retornou [%i,%i,%i,%i]\n", v.c1, v.c2, v.c3, v.c4);

	int a, b, c, d;
	calcula_2(&a, &b, &c, &d);
	printf("[2] retornou [%i,%i,%i,%i]\n", a,b,c,d);

	calcula_3(chaves);
	printf("[3] retornou [%i,%i,%i,%i]\n",
		chaves[0], 
		chaves[1], 
		chaves[2], 
		chaves[3]);
	return 0;
};	// main()


Chaves calcula_1()
{
	Chaves v = { 1, 2, 3, 4 };
	return v;
}


void calcula_2(int* a, int* b, int* c, int* d)
{
	*a = 5;
	*b = 6;
	*c = 7;
	*d = 8;
	return;
}

void calcula_3(int v[])
{
	v[0] = 9;
	v[1] = 10;
	v[2] = 11;
	v[3] = 12;
	return;
}

E você pode ver as 3 maneiras. 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!