Construire de petits programmes · Leçon 28 sur 30 · environ 18 minutes
Un petit jeu de cible
Construisez un jeu de trois tours avec un état enregistré et un score.
01 / Expliquer
Comprendre l’idée
Un jeu est un programme avec des règles, des entrées, un état et un retour au joueur. La mémoire 200 contient le nombre cible. À chacun des trois tours, le joueur propose un nombre et gagne un point en cas d’égalité. Le score change seulement quand la cible est trouvée.
Séparez les règles du jeu de la cible et des propositions actuelles. Les tests changent les deux. Ce petit jeu affiche un score final numérique ; il n’utilise ni hasard, ni réseau, ni compte, ni données secrètes d’élèves. Il peut être intéressant sans prétendre que la machine virtuelle affiche du texte ou des graphiques.
02 / Essayer
Observer le fonctionnement
Ajoutez les propositions 5, 2, 5 à la file d’entrée. Le score final est 2 dans la sortie et dans la mémoire 201.
STORE 5 200
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALTAvancez pas à pas pour suivre une instruction à la fois. Vous pouvez modifier l’exemple et le rejouer.
03 / Défi
Le faire fonctionner
La mémoire 200 contient un octet cible. Lisez exactement trois propositions. Comptez celles qui correspondent à la cible, enregistrez le score en mémoire 201 et affichez-le une fois.
Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 4 cas de test. Il fournit lui-même les entrées et la mémoire préparée ; la sortie et la mémoire actuelles du laboratoire ne décident pas du résultat.
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
#
RETURN
LOAD R2
STORE 201
PRINT
HALTBesoin d’un indice ?
Le chemin d’échec doit sauter l’augmentation du score tout en atteignant le RETURN de la boucle.
Afficher une solution expliquée
Lisez le programme, prévoyez l’effet de chaque instruction, puis suivez-le pas à pas dans le laboratoire.
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALTLaboratoire du processeur en émojis
Programme en émojis
Saisissez LOAD, ADD ou un autre nom d’instruction, puis Espace pour insérer l’émoji. Ctrl/⌘ + Entrée exécute ou suspend ; Échap suspend ; Ctrl/⌘ + ] indente. Tab déplace le focus. Les étiquettes utilisent deux-points. Les sauts utilisent des adresses d’instructions à partir de zéro.
Carte des instructions et points d’arrêt (0)
Un point d’arrêt suspend avant son instruction. Exécuter franchit une fois le point d’arrêt actuel ; Pas à pas exécute directement son instruction. Modifier le code efface les anciens points d’arrêt et l’état machine.
Registres du processeur
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
Piles et cadres de boucle
SP = 255 − profondeur des données − profondeur des appels. La pile est distincte de la mémoire.
Pile de données (bas → haut)
Vide
Adresses de retour des appels (bas → haut)
Vide
Cadres de boucle
Vide
Sorties et entrées
Exécutez une instruction PRINT pour voir une sortie.
Entrées en attente: Vide
Mémoire · 256 octets · 0 non nuls
Chaque case indique adresse:valeur. R = lecture à ce pas ; W = écriture à ce pas. Sélectionnez une case pour l’examiner ou l’initialiser avant l’exécution. Les flèches déplacent la sélection, Début/Fin visent les extrémités de la ligne et Ctrl/⌘ + Début/Fin celles de toute la mémoire.
Trace d’exécution · 0 entrées
Les entrées récentes sont ci-dessous. Examinez n’importe quel indice à partir de zéro pour voir les états complets et indépendants avant et après.
Vérifier votre défi
Vous pouvez lancer cette vérification à tout moment. Tous les cas doivent réussir pour enregistrer la leçon comme terminée.
La progression utilise seulement localStorage. Elle reste dans ce navigateur et n’est jamais envoyée à un serveur.