1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
| <!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Jeu de piste textuel</title>
<meta name="Author" content="NoSmoking">
<meta name="DVP-discussion" content="d2100136">
<meta name="description" content="Jeu de piste textuel construit à la volée.">
<style>
html, body {margin: 0;padding: 0;font: 1em/1.5 Verdana,sans-serif;}
h1, h2, h3 {margin: .25em 0;color: #069;}
time {float: right;margin: .5em;font-size: 0.9em;color: #888;}
main {display: block;margin: auto;max-width: 60em;}
section {position: relative;margin: 0 2em 1em;}
span {
color: #888;
font-style: italic;
}
button {
display: block;
margin: .5em 1em;
margin-left: 1em;
min-width: 20em;
font: inherit;
cursor: pointer;
}
button:first-letter {
text-transform: uppercase;
}
</style>
</head>
<body>
<main>
<header>
<time datetime="2021-01-19">Jan. 2021</time>
<h1>Jeu de piste textuel</h1>
</header>
<section>
<div id="frame"></div>
</section>
</main>
<script>
"use strict";
const action = {
"etape_00": {
"titre": "Cliquez pour prendre part à une aventure bien naze 8D",
"action": [{
"label": "Jouer",
"goto": "etape_01"
},
{
"label": "options",
"goto": "option"
},
{
"label": "quitter",
"goto": "etape_end"
}
]
},
"etape_01": {
"titre": "vous vous retrouvez dans une piece avec une porte ouverte...",
"action": [{
"label": "vous partez",
"goto": "etape_02"
},
{
"label": "vous restez",
"goto": "etape_03"
}
]
},
"etape_02": {
"titre": "vous etes parti et vous etes sur un chemin",
"action": [{
"label": "vous l'arpentez",
"goto": "etape_04"
},
{
"label": "vous revenez à l'intérieur",
"goto": "etape_03"
}
]
},
"etape_03": {
"titre": "Vous etes dans la piece. Et il y a une table que vous n'aviez pas vue, avec un gateau dessus",
"action": [{
"label": "vous mangez le gateau",
"goto": "etape_05"
},
{
"label": "vous partez finalement",
"goto": "etape_02"
}
]
},
"etape_04": {
"titre": "Vous arrivez dans une foret bizarre, et vous vous endormez contre un rocher. Fin.",
"action": [{
"label": "C'etait vachement court",
"goto": "etape_end"
}]
},
"etape_05": {
"titre": "Vous mangez le gateau et mourrez de sommeil, c'etait un vallium-cake super blindé xD",
"action": [{
"label": "je trouve l'histoire debile",
"goto": "etape_end"
}]
},
"etape_end": {
"titre": " Bin vi, bin vi 8) A bientot pour de palpitantes nouvelles aventures",
"action": [{
"label": "on y retourne",
"goto": "etape_00"
}]
}
};
/**
* function unique de création d'étape
* @param {string} ref - étiquette de l'objet action
*/
function createEtape(ref) {
const oDest = document.getElementById("frame");
if (action[ref]) {
// création des éléments
const oHtml = [];
// info where on est
const oSpan = document.createElement("SPAN");
oSpan.textContent = "(" + ref + ")";
oHtml.push(oSpan);
// création du titre
const oTitre = document.createElement("P");
oTitre.textContent = action[ref].titre;
// stocke titre
oHtml.push(oTitre);
const actions = action[ref].action || [];
// création des boutons
actions.forEach((act) => {
const oBtn = document.createElement("BUTTON");
oBtn.textContent = act.label;
// ajout événement click
oBtn.addEventListener("click", () => {
createEtape(act.goto);
})
// stocke bouton
oHtml.push(oBtn);
})
// vide élément destination
oDest.innerHTML = "";
// ajout les éléments crées
oDest.append(...oHtml);
}
}
// lancement du jeu
createEtape("etape_00");
</script>
</body>
</html> |