Ir ao conteúdo
  • Cadastre-se

C++ Jogo da velha com comandos de voz


Posts recomendados

Boa tarde, alguém poderia me ajudar? Sou iniciante e estou tentando criar um jogo da velha com leds.. Meu problema esta em fazer as combinações de vitória led 123 /456 /789 /147/ 258.. e assim vai ..Eu escrevi a linha de comando de diversas, maneiras mas não consigo fazer o compilador entender minha lógica. a ultima que escrevi foi:

if ((verde[1])&&(verde[4])&&(verde[7]) == HIGH) {

vitoria(); // chama a função de vitória

}

Alguém pode me ajudar?

preciso ao menos entender como posso fazer as combinações..

Estou utilizando 2 vetores para o jogo, um armazena os leds vermelhos e outro os leds verdes.
Obs: pensei em fazer utilizando matrizes, mas na minha cabeça pareceu mais fácil com vetores.

 

 

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

@anderson augusto ferrari       Ali no if você precisa colocar dois sinais de igualdade para cada opção , que pode ser assim :

if(verde[1] == HIGH && verde[4] == HIGH && verde[7] == HIGH){

}

matriz e vetor são as mesmas coisas , apenas que com vetores você vai precisar de duas variáveis , pois a matriz é a união de dois ou mais vetores , e com isso usaria apenas uma variável .  e a questão dos comandos por voz é que me parece difícil  .

Link para o comentário
Compartilhar em outros sites

 

Está um pouco longe de funcionar ainda. O compilador não entende contexto. Você precisa repetir a condição completa em cada teste com @devair1010 mostrou acima. Recomendo sempre usar parenteses e não confiar na memória da precedência de operadores. Mais seguro e mais claro.

 

Para testar as combinações de vitória com um jogo assim simples, talvez você mais fácil você simplesmente salvar as combinações vencedoras. O grupo todo. E testar de uma vez.

 

Nem sei como fazer isso. Qualquer estrutura serve. Imagine uma string com letras e 'R' para vermelho, 'G' para verde e '.' para livre e um vetor de strings com as combinações vendedoras, por exemplo. Como tanto faz qual a cor para alguém vencer, coisas como

    combinações de vitória led 123 /456 /789 /147/ 258

podem ser expressas por 

	const char endGame[5][10] =
	{	// combinacoes de fim de jogo
		" XXX......",
		" ...XXX...",
		" ......XXX",
		" X..X..X..",
		" .X..X..X.",
	};

Dois vetores para o jogo é talvez exagero. Talvez algo associado à representação acima fosse mais fácil de entender e por consequência programar...

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

@devair1010 Em relação aos comandos de voz, meu módulo contém apenas 5 comandos e estão separados em um switch case.
O usuário pode dizer o comando MAIOR para avançar do 1 ao 9.. ou MENOR para retroceder. Ao selecionar o bloco desejado o usuário utiliza o comando PRONTO para fixar a cor do bloco. Por conta dos comandos de voz eu decidi não trabalhar com matriz, na minha cabeça não consegui imaginar tanto sucesso para desenvolver.
Ainda assim, como estou aprendendo a codificar em C++, enfrento muitas dificuldades 😕 
Eu vi que algumas pessoas utilizam True e False para fazer as combinações, mas não sei exatamente como aplicar isso.

 

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

11 minutos atrás, anderson augusto ferrari disse:

O usuário pode dizer o comando MAIOR para avançar do 1 ao 9.. ou MENOR para retroceder. Ao selecionar o bloco desejado o usuário utiliza o comando PRONTO para fixar a cor do bloco

 

Em geral os números são as primeiras palavras a serem programadas nas bibliotecas de speech rec. E "sim", "não", "OK" e CANCELA ... Então talvez fosse mais simples usar os números mesmo...

 

14 minutos atrás, anderson augusto ferrari disse:

Por conta dos comandos de voz eu decidi não trabalhar com matriz, na minha cabeça não consegui imaginar tanto sucesso para desenvolver

 

Não entendo que ligação possa ter entre o modo como um comando é reconhecido e a implementação. No final tudo vai acabar em [posicao]. Se estiver livre ocupa. Se venceu acabou. E a cor é a cor da vez. Ou não?

 

 

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

@arfneto Eu me refiro mais a conhecimento, embora ambos sejam possíveis, e matriz seja até o mais indicado.. eu não tenho tanta facilidade em utilizar matrizes, por isso pensei em seguir com vetores apenas.. é possível fazer só com vetores , não ?
Fico um pouco perdido.

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

50 minutos atrás, anderson augusto ferrari disse:

@arfneto Eu me refiro mais a conhecimento, embora ambos sejam possíveis, e matriz seja até o mais indicado.. eu não tenho tanta facilidade em utilizar matrizes, por isso pensei em seguir com vetores apenas.. é possível fazer só com vetores , não ?
Fico um pouco perdido.

 

Não faz diferença. Pode usar mesmo uma string, que é um vetor, e colocar as letras lá dentro como te mostrei. Pode usar uma matriz 3x3 claro, mas não vejo vantagem. Pode usar qualquer coisa com 3 estados --- livre, 1 e 2 --- e 9 células e estará bem.

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

3 horas atrás, anderson augusto ferrari disse:

 


if ((verde[1])&&(verde[4])&&(verde[7]) == HIGH) {

vitoria(); // chama a função de vitória

}

 

 

O operador de comparação == tem precedência sobre o operador lógico &&, então este if não vai funcionar corretamente, imagino que você queria fazer:

 

if ((verde[1] && verde[4] && verde[7]) == HIGH) {

    vitoria(); // chama a função de vitória

}

Mas não sei que valor HIGH tem, seria 1? Ou 0? Ou 10?...

 

Então eu preferiria simplesmente fazer:

if (verde[1] && verde[4] && verde[7]) {

    vitoria(); // chama a função de vitória

}

 

 

E você pode fazer ciclos para comparar colunas, linhas, e um if para cada diagonal assim:

// Verifica linhas;
for(i=0; i<3; i++){
    if(verde[i*3] && verde[i*3+1] && verde[i*3+2]){
        vitoria();
    }
}

// Verifica Colunas:
for(i=0; i<3; i++){
    if(verde[i] && verde[i+3] && verde[i+6]){
        vitoria();
    }
}

// Verifica Diagonal Principal:
if(verde[0] && verde[4] && verde[8]){
    vitoria();
}

// Verifica Diagonal Secundária
if(verde[2] && verde[4] && verde[6]){
    vitoria();
}

 

adicionado 12 minutos depois

Isso tudo assumindo que os valores guardados no vetor verde são 0 (=falso) quando verde não jogou na posição, e algo diferente de 0 (=verdadeiro) quando verde já jogou nada na posição.

  • 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!