bonsoir à tous,
pour noël, et surtout parce que ça me trottais dans la
tête de puis des mois, j'ai mis au point un mini jeu
avec un PIC 16F88...
Je voulais surtout dévelloper la programmation de la
"logique" de ce jeu, et ce avec le moins de code possible...
et avec un schéma le plus simple possible...
C'est un jeu de "Jacques à dit"... avec 4 leds de
couleurs différentes... chacune assignée à une "note"...
et à un bouton poussoir...
Le jeu consiste à répéter la séquence de leds/notes "jouée"
par le programme... sans se tromper...
A chaque réussite, le jeu se complique en:
-ajoutant une couleur dans la sequence
-accélérant la vitesse
La "couleur" de la led ajoutée est tirée au hasard,
aprés chaque réussite de répétition de la séquence...
Le tirage au hasard est basé sur :
-la valeur ADRESHL d'une entrée ADC laissée en l'air
+le compteur d'instruction (PCL)
+un grain de sel : variable hazard, incrémentée
dans les boucles d'attentes d'un appui sur un BP...
c'est dévellopé en MikroBasic...
le code fait moins de 70 lignes...
donc facilement portable (autre langage, autre PIC)...
le code de la "logique" du jeu fait moins de 35 lignes...
le reste du code, c'est au début, l'initialisation du jeu...
et à la fin, la partie "hazard"... que j'ai voulu "peaufiner"...
Bon, comment ça fonctionne :
-à la mise sous tension, les 4 leds s'allument...
-un appui sur un BP démarre le jeu...
-le "jeu" allume une led...
-appuyez sur le BP correspondant...
-le jeu allume une séquence de 2 leds...
-appuyez sur les BP correspondants...
etc...
quand on se trompe, les 4 leds s'allument...
appuyer sur un BP pour re-jouer...
quand on gagne... ben encore rien de prévu...
commencez par réussir à répéter une séquence
de 50 "couleurs"...
;O]
voili, voilou ;O]
le schéma... ultra simplissime :
http://vede.free.fr/electronique/jeujad/jeujad.jpg
(je conseille de déporter les BP, les leds et le Buzzer...
...sur un boitier style "console de jeu" ;O])...
le .hex prêt à être chargé dans un PIC 16F88 :
http://vede.free.fr/electronique/jeujad/jeujad.hex
et le code :
n'hésitez pas si question...Code:program jeujad ' cible = 16F88, fusibles = ALL OFF, _INTRC_IO const frequence as word[9] = (0, 220, 1318, 0, 493, 0, 0, 0, 1174) dim temps as word dim couleur as byte[51] dim var, niveau, hazard, compteur as byte ' main: OSCCON = %1100000 ' intrc_osc = 4Mhz while testbit(OSCCON,IOFS)=0 wend ANSEL = %0010000 ' active entrée ADC sur PortA.4 ADCON0 = %00100001 ' ADC utilisé par le "hasard"... TrisA = %00010000 ' PortA.4 = entrée ADC ("en l'air") PORTA = %00001111 ' allume les 4 leds TrisB = %11111111 ' PortB en entrées OPTION_REG.7 = 0 ' PortB Pull-Ups enabled niveau = 1 compteur = 0 temps = 550 while portB = 255 inc(hazard) wend ' attente appui BP PORTA = 0 ' éteint les 4 leds Sound_Init(PORTA, 7) ' var = hazard MOD 4 ' on génére les 2 premiéres hazard = 0 ' couleurs "au hasard"... sans ADC... hazard.var = 1 ' couleur[0] = hazard ' var = PCL MOD 4 ' hazard = 0 ' hazard.var = 1 ' couleur[1] = hazard ' ' joue: ' début du programme du jeu var = couleur[compteur] PORTA = var Sound_Play(frequence[var], temps) PORTA = 0 delay_ms(100) inc(compteur) if compteur < niveau then goto joue end if compteur = 0 joueur: while PortB = 255 inc(hazard) wend var = not PortB PORTA = var Sound_Play(frequence[var], temps) PORTA = 0 delay_ms(100) if var <> couleur[compteur] then goto main end if 'perdu inc(compteur) if compteur < niveau then goto joueur end if inc(niveau) ADCON0.GO = 1 ' a partir d'ici, on delay_ms(100) ' génére, "au hasard", var = hazard + PCL ' la prochaine "couleur" var = var + ADRESL ' en utilisant PCL, ADC et hazard var = var MOD 4 ' hazard = 0 ' hazard.var = 1 ' couleur[niveau] = hazard ' delay_ms(300) ' compteur = 0 ' temps = temps - 10 ' et enfin on "accélére"... goto joue ' avant de recommencer... end.
suggestions, critiques...
et améliorations...
vede
;O]
ps : nomenclature>
-4 leds (If 20mA max) de couleurs différentes et leurs resistances...
-4 BP
-un 16F88 programmé
-un BUZZER
-un régulateur 78L05
-un condo 100nF
-une pile 9V
et en déportant les BP, Leds et le Buzzer...
pas besoin de typon...
-----