Multiple implementations (JS, Wasm, C) of a Lisp.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
4.3 KiB

(def pieces '((Stationnement ("Tu viens de stationner ton auto au bureau. Tu vois une clé usb et un mouchoir par terre dans le stationnement.")
("Ramasser la clé usb et entrer par la porte des employés")
("Ramasser le mouchoir et entrer par la porte des employés")
("Entrer directement par la porte des employés"))
(Escalier ("Vous rencontrer Sylvain dans l'escalier qui même au 2e étage. Il a l'air pressé et descend l'escalier très rapidement.")
("Lui dire bonjour et vous vous dirigez vers votre bureau -> Sylvain vous dit bonjour et en profite pour vous dire qu'il a changer le mot de passe du serveur GaragaNet pour \"qwerty\"")
("Lui faire une jambette (en vous disant que ça va être drôle) et vous vous dirigez vers votre bureau")
("Vous vous dirigez directement vers votre bureau"))
(Bureau ("Vous arriver au bureau")
("Insérer la clé usb dans votre ordinateur avant de vous connecter au GaragaNet")
("Tenter de vous connectez au serveur du GaragaNet"))
(Serveur ("Vous arrivez à la page de connection au serveur du GaragaNet. On vous demande le mot de passe. Selon votre mémoire le mot de passe était \"asdfg\".")
("Entrer le mot de passe \"asdfg\"")
("Entrer le mot de passe \"qwerty\""))))
(defn assoc (list key)
(if (not list)
nil
(if (= (car (car list)) key)
(car list)
(assoc (cdr list) key))))
(defmacro cddr (a) `(cdr (cdr ,a)))
(defmacro cadr (a) `(car (cdr ,a)))
(defmacro cdar (a) `(cdr (car ,a)))
(defmacro cadar (a) `(car (cdr (car ,a))))
(defmacro caadr (a) `(car (car (cdr ,a))))
(defmacro caar (a) `(car (car ,a)))
(defmacro when (a b) `(if ,a ,b nil))
(defmacro cond (conds)
(let ((f (fn (conds)
`(if ,(caar conds)
,(cadar conds)
,(when (cdr conds)
(f (cdr conds)))))))
(f conds)))
(defn afficher-actions (actions i)
(when actions
(let ((action (caar actions)))
(print i)
(princ ": ")
(princ action)
(afficher-actions (cdr actions) (+ i 1)))))
(defn afficher-piece (key)
(let ((piece (assoc pieces key))
(actions (cddr piece)))
(print (caadr piece))
(print "")
(afficher-actions actions 1)))
(let ((piece 'Stationnement)
(a-clef nil)
(a-mot-de-passe nil))
(defn jouer ()
(print "Mission: Aller au bureau et diffuser une version du nouveau GaragaNet 3.0!")
(print "")
(afficher-piece piece))
(defn action (i)
(cond (((= piece 'stationnement)
(cond (((= i 1)
(do (set a-clef t)
(set piece 'escalier)))
((= i 2)
(print "Game Over!: Vous commencer à éternuer sans arrêt et mourrez en vous étouffant avec votre langue. Le mouchoir était contaminé à la covid-21, une version extremement virulente de la covid-19"))
(t (set piece 'escalier)))))
((= piece 'escalier)
(cond (((= i 1)
(do (print "Sylvain vous dit bonjour et en profite pour vous dire qu'il a changer le mot de passe du serveur GaragaNet pour \"qwerty\"")
(set a-mot-de-passe t)
(set piece 'bureau)))
((= i 2)
(do (print "Game over : Sylvain se fracture la clavicule en déboulant les marches et ni lui ni les RH ne ça drôle du tout. Vous êtes congédié pour votre stupidité.Oublie ça pour faire une version du GaragaNet.")
(set piece 'stationnement)))
(t (set piece 'bureau)))))
((= piece 'bureau)
(cond (((and (= i 1) a-mot-de-passe)
(do (print "Game over: La clé contenant un logiciel malveillant. Toutes les données des serveurs sont entryptés. Aucune chance de faire une version du GaragaNet...")
(set piece 'stationnement)
(set a-mot-de-passe nil)
(set a-clef nil)))
(t (set piece 'serveur)))))
((= piece 'serveur)
(cond (((= i 1)
(do (print "Game over : Le mot de passe est invalide. Sylvain n’est plus là et personne d’autre ne connait le mot de passe. Votre version ne pourra pas être déployé aujourd’hui.")
(set piece 'stationnement)
(set a-mot-de-passe nil)
(set a-clef nil)))
((and (= i 2) a-mot-de-passe)
(do (print "Bravo! Vous avez déployé le GaragaNet 3.0 avec succès et les clients sont très contents.
")
(set piece 'stationnement)
(set a-mot-de-passe nil)
(set a-clef nil))))))))
(jouer)))
(print "Pour JOUER: (jouer)")
(print "Pour ACTION: (action 1)")