Paso 2: O bosquejo
Código
/ / Vamos Comecar definindo como filhos Notas parágrafo OS
# Definir 294 NOTE_D4 # define NOTE_G4 392 # definir 440 NOTE_A4 # define NOTE_A5 880
/ / Creando o conjunto de para OS 4 filhos parágrafo sortear hum som int toneladas [4] = {NOTE_A5, NOTE_A4, NOTE_G4, NOTE_D4}; / / Nossa Sequência de comió 100 itens Vai Comecar Vazia. sequencia de int [100] = {}; / / Indica uma Rodada Atual Que o Jogo se Encontra. int rodada_atual = 0; / / Indica o Passo Atual Dentro da Sequência, E USADO enquanto uma Sequência / / ESTA Sendo reproduzida. int passo_atual_na_sequencia = 0; / ** Indica o pino de áudio, leds e BOTOES. * Os pinos de leds e BOTOES estao los Ordem, Relacionados uns EAo OUTROS, OU SEJA *, O Primeiro levou AO ESTA relacionado Primeiro Botão. Una destas Ordem * Sequências también estao relacionadas una Ordem dos toneladas. * / Int pinoAudio = 6; int pinosLeds [4] = {8, 9, 10, 11}; int pinosBotoes [4] = {2, 3, 4, 5};
/ / Se Indica hum lazo de diretor pressionado Durante o Botão FOI. int botao_pressionado = 0; / / Bandera indicando se o Jogo acabou. int perdeu_o_jogo = false;
void setup () {}
/ / Dos de pinos de Definindo o Modo dos Leds Como Saida. para (int i = 0; i < = 3; i + +) {pinMode (pinosLeds [i], salida);} / / dos de pinos de Definindo o Modo dos BOTOES Como Entrada. para (int i = 0; i < = 3; i + +) {pinMode (pinosBotoes [i], entrada);} / / Definindo o Modo fazer pino de Áudio Como Saida. pinMode (pinoAudio, salida); / / Inicializando o acaso atraves de UMA solicitados da porta analógica. . / / Este gera solicitados hum valor Variável Entre 0 e 1.023 randomSeed (analogRead (0)); }
void loop () {}
/ / Se Perdeu o Jogo reinicializamos Todas como Variáveis. Si (perdeu_o_jogo) {int sequencia [100] = {}; rodada_atual = 0; passo_atual_na_sequencia = 0; perdeu_o_jogo = false;}
/ / Toca hum som de inicio parágrafo anúnicar o Jogo ESTA desde cuando E a Primeira Rodada. Si (rodada_atual == 0) {tocarSomDeInicio (); delay (500);} / / Chama un função que inicializa una Próxima Rodada. proximaRodada ();
/ / Visualização un Atual Sequência. reproduzirSequencia (); / / Aguarda OS BOTOES Serem pressionados Pelo Jogador. aguardarJogador ();
/ / Aguarda 1 Segundo Entre CADA Jogada. retrasar (1000); } / / Sorteia hum novo elemento de e adiciona na Sequência. vazio proximaRodada () {int numero_sorteado = random (0, 4) sequencia [rodada_atual + +] = numero_sorteado;} / / visualização un memorizada de serviços Sequência párr. vazio reproduzirSequencia () {para (int i = 0; i < rodada_atual; i + +) {tom (pinoAudio toneladas [sequencia [i]]); digitalWrite (pinosLeds [sequencia [i]], HIGH); delay (500); noTone (pinoAudio); digitalWrite (pinosLeds [sequencia [i]], LOW); atraso (100); NoTone} (pinoAudio); }
/ / Aguarda o Jogador iniciar Jogada de SUA. vazio aguardarJogador () {para (int i = 0; i < rodada_atual; i + +) {aguardarJogada (); verificarJogada ();
Si (perdeu_o_jogo) {break; Passo_atual_na_sequencia} + +; }
/ / Redefinir um Variável parágrafo 0 passo_atual_na_sequencia = 0.; }
anular aguardarJogada () {jogada_efetuada booleano = falso; mientras que (! jogada_efetuada) {para (int i = 0; i < = 3; me + +) {si ((digitalRead pinosBotoes [i]) == HIGH) {}
/ / Dizendo quali FOI o botao pressionado. botao_pressionado = i;
Tom (pinoAudio, toneladas [i]); digitalWrite (pinosLeds [i], HIGH); Delay (300); digitalWrite (pinosLeds [i], baixo); noTone (pinoAudio); jogada_efetuada = true; }}
atraso (10); }}
anular verificarJogada () {si (sequencia [passo_atual_na_sequencia]! = botao_pressionado) {/ / GAME OVER.
para (int i = 0; i < = 3; i + +) {tom (pinoAudio toneladas [i]); digitalWrite (pinosLeds [i], HIGH); atraso (200); digitalWrite (pinosLeds [i], baixo); noTone (pinoAudio);} Tom (pinoAudio, toneladas [3]); para (int i = 0; i < = 3; i + +) {digitalWrite (pinosLeds [0], HIGH); digitalWrite (pinosLeds [1], HIGH); digitalWrite (pinosLeds [2], HIGH); digitalWrite (pinosLeds [3], HIGH); atraso (100); digitalWrite (pinosLeds [0], LOW); digitalWrite (pinosLeds [1], LOW); digitalWrite (pinosLeds [2], LOW); digitalWrite (pinosLeds [3], LOW); atraso (100);}
noTone (pinoAudio); perdeu_o_jogo = true; }} Vazio tocarSomDeInicio () {tom (pinoAudio toneladas [0]); digitalWrite (pinosLeds [0], HIGH); digitalWrite (pinosLeds [1], HIGH); digitalWrite (pinosLeds [2], HIGH); digitalWrite (pinosLeds [3], HIGH); delay (500); digitalWrite (pinosLeds [0], LOW); digitalWrite (pinosLeds [1], LOW); digitalWrite (pinosLeds [2], LOW); digitalWrite (pinosLeds [3], LOW); delay (500); noTone (pinoAudio);}