\documentclass[a4paper,12pt]{article}

\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ltablex}
%\usepackage{tabularx}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{eurosym}
\usepackage{epsfig}

\title{AJAX - Enoncé 8}
\author{D.Moreaux}

\begin{document}
\maketitle
\abstract
Bouclage du projet : fin de partie, chargement, sauvegarde

\section{Interface de jeu}
Au niveau de l'interface de jeu, on ajoutera les fonctionnalités YESNO
et SAVESLOT.

YESNO permettra de faire un choix binaire (normalement les textes {\bf oui} ou
{\bf non} sauvés dans les messages systèmes 30 et 31). Un message
texte sera également fourni dans l'action. Le choix effectué sera
retourné à la machine d'état.

SAVESLOT permettra de choisir un slot de sauvegarde parmi la liste
transmise. Cette liste contiendra l'ID et le nom du slot et l'action
se terminera en envoyant l'ID du slot au PHP. Pour la fonction SAVE,
on pourra au choix soit créer un ensemble de slots vides lors de la création du
compte, soit prévoir un slot fictif {\bf nouvelle sauvegarde} avec un
ID négatif (attention au nombre maximum de sauvegardes).

\section{Machine d'état}
Il faudra apporter les modifications suivantes :
\begin{itemize}
\item TBL : Il faudra ajouter les codes pour les instructions QUIT
  (voulez vous quitter la partie), END (voulez vous recommencer une
  partie), LOAD et SAVE. Chacune de ces fonctions aura un état associé
  dans lequel la valeur retournée par le Javascript sera prise en compte

\item QUIT si on a répondu NON, effectue un DONE sinon passe à
  l'instruction suivante (retour à l'état TBL)
\item END si on a répondu OUI, retourne à INIT pour recommencer une
  partie. Si on a répondu NON, envoie au navigateur l'ordre LOGOUT
\item SAVE sérialize la partie et sauve l'objet ainsi créé dans la
  DB. Termine par un DONE
\item LOAD lit la partie de la DB, la désérialize et copie les données
  désérialisées dans l'état de la partie. Termine par un retour à DESC
\end{itemize}

\section{Et pour aller plus loin}
Des instructions et actions peuvent aisément être ajoutés. Par exemple
:
\begin{itemize}
\item une instruction EXITS qui envoie une commande TEXT avec la liste
  des directions {\em ouvertes} (table des déplacements)
\item une commande IMAGE suivie d'un numéro qui demandera au
  navigateur d'afficher l'image en question (avec ou sans CLS). Les
  images pourront soit être sauvées sous le nom image01.jpg,
  image02.jpg,\dots (ou un mécanisme d'upload d'images ajouté à
  l'éditeur, mais ce n'est pas évident en AJAX).
  Il faudra prévoir une nouvelle action dans le navigateur pour l'afficher.
\item Des commandes INK, PAPER, BORDER pour changer la couleur
  d'écriture, la couleur de fond ou la couleur AUTOUR de la zone de
  jeu. Les couleurs pourront être une palette prédéfinie (0: noir, 1:
  bleu, 2: rouge, 3: magenta, 4: vert, 5: cyan, 6: jaune, 7: blanc
  par exemple) ou exprimée sous la forme d'un code de couleur web
  (peut-être avec une modification de l'éditeur). Il faudra également
  créer des actions au niveau Javascript
\item Des instructions de manipulation de flags comme COPY (copie un
  flag dans un autre), RAND (sauve une valeur aléatoire dans un
  flag), MULT et DIV (multiplication et division),\dots Il est
  également possible d'ajouter des nouvelles conditions.
\item Des instructions pour jouer des sons. Soit un WAV/MP3/OGG avec
  un système similaire aux images, soit un {\it beep} généré par l'API
  WebAudio.
\item Un mécanisme pour supporter différentes fontes. La commande permettra
  ainsi de choisir une fonte grasse, italique, smallcaps, monospace, script,\dots
\end{itemize}

Il est également possible de créer un {\em Hall of Fame} des
utilisateurs ayant terminé l'aventure avec leur nombre de tours et
leur score. On peut soit se contenter de stocker ces infos lorsque
l'instruction END est rencontrée, soit prévoir un moyen pour
indiquer que l'aventure est gagnée (un flag auquel on donne une
valeur spéciale, une instruction,\dots)
  
\end{document}
