Accueil > Intranet Michel Buffa > M1 informatique - M1 MBDS - Option Web 2.0 2013-2014

M1 informatique - M1 MBDS - Option Web 2.0 2013-2014

De $1

Introduction

Bonjour, dans ce cours, nous allons découvrir HTML5, le web de données, améliorer vos compétences en JavaScript et développer quelques applications amusantes (dont un jeu temps réel muti-participant en réseau qui sera le fil rouge à partir de la seconde séance). HTML5 vous le verrez c'est HTML + CSS + JavaScript, beaucoup de JavaScript, étant donné que HTML5 vient avec un nombre important de nouvelles APIs et qu'il y a dans les tuyaux encore plus d'APIs à venir (pour les jeux, la musique, les mobiles, etc.). Le Web de données/Web sémantique, vous verrez cette année que c'est notamment un moyen d'utiliser des sources de données issues du web au travers de technologies standards. Le jeu multi participant que vous allez réaliser utilisera ce type de données.

Supports de cours généraux

Supports généraux vus en cours pour le survol de HTML5

JavaScript/jQuery

  • Cours JavaScript de Michel Buffa (transparents faits en HTML5). Archive ici : Cours JavaScript.zip. Ce cours couvre "JavaScript" classique Ecma 5, pas les nouvelles APIs apparues avec HTML5 (voir le cours HTML5).
  • jQuery :
    • Transparents powerpoint sur jQuery : jquery.ppt et aussi la présentation interactive de John Resig, auteur de jQuery :  http://ejohn.org/blog/spring-2010-jquery-talks/ , la première "introduction to jQuery" est très bien pour un premier contact avec cette librairie.
    • NOUVEAU : jQuery best practices !
    • N'oubliez pas d'aller faire un tour sur la page : Ressources JQuery que j'ai préparée à votre attention et qui contient de nombreuses ressources intéressantes au sujet de cette librairie (tutorials, transparents, livres, etc). Je recommande à 200% d'imprimer ou d'avoir sous la main les "jQuery chart sheets", des images qui résument en un coup d'oeil toute la librairie. 
    • La page officielle avec la doc de jQuery (exemples interactifs) :  http://api.jquery.com/

CSS

Un bon exemple CSS3 avec zoom, rotation, bords arrondis, ombres, etc...

Séance 1 : deux parties : commencer à écrire un logiciel de dessin dans un canvas et faire un CV utilisant les nouveaux éléments de structure et les microdatas de HTML5

Partie 1 : Canvas/Paint

Support de cours HTML5 / Canvas :

Vous vous inspirerez des exemples simples proposés dans la partie  http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/HTML5_Tutorial/HTML5_discovery_tutorial, mais si vous êtes déjà un peu à l'aise en JavaScript vous pourrez aussi regarder ce tutorial http://miageprojet2.unice.fr/Intranet_de_Michel_Buffa/HTML5_tutorial_for_WWW_2013/HTML5_tutorial_for_WWW_2013%3a_study_a_paint_program

Le travail demandé consiste à commencer à programmer un logiciel de dessin. Par la suite nous le rendrons multi participants et le transformeront en je de type Pictionnary.

Partie 2 : structure / Microdata : survol des possibilités de HTML5, travail à rendre sur les nouveaux éléments de structure et les microdata

Support de cours concernant les nouveaux tags de structure et les microdata

A rendre la semaine prochaine : réaliser une page dans laquelle vous vous présentez(sorte de mini CV)

Dans cette page vous vous présenterez, photo, nom, adresse, tel, résumé de vos projets passés, vos études, vos passions, etc. Bref, vous devrez faire un CV.

Contraintes

  1. Utilisation des tags de structure vus en cours: <header>, <footer>, <section>, <article>, <time>, <nav>, <aside> (dans le aside vous ajouterez une table des matières générée automatiquement à l'aide du script JS disponible sur Google HTML5 outliner, suivre le lien minifiedJS et regarder aussi ces deux exemples : http://jsbin.com/epofer/4/edit et http://jsbin.com/agoyoj/73/edit qui montrent comment on peut insérer une table des matières directement dans la page. Ces exemples utilisent le minifiedJS dont on vient de parler. 
  2. Insertion de Microdata pour vous décrire (utilisation du shéma Person), Mettez des microdata pour au minimum nom, prenom, adresse, afiliation, liens vers vos comptes facebook, twitter, autres, etc. Vous vous inspirerez de l'exemple "Michel Buffa" en l'adaptant et le complétant : http://jsbin.com/uquboc/13/edit. Vous testerez avec l'outil de google ce que cela donne et incluerez à la fin de votre CV un screenshot du résultat (comme j'ai fait pour Michel Buffa).
  3. POUR LES BONS (bonus): vous utiliserez le plugin jQuery microdata.js pour afficher dans un aside une table avec la description de l'auteur récupérée dans les microdatas.
  4. AUTRE BONUS : afficher une google map dynamique correspondant à votre adresse.
  5. Vous rajouterez sur les images  un attribut download permettant de télécharger les images si on clique dessus, au lieu que le navigateur les affiche dans un nouveau tab.
  6. Vous ferez en sorte que si on passe la page à travers un outil de traduction, les nom de l'auteur, et autres données ne devant pas être traduites, etc ne soient pas traduites (utilisation de l'attribut translate).

Modalités de rendu : 

  • Soit vous faites directement sous jsbin.com votre CV (il faudra uploader les photos ailleurs, on ne peut pas uploader sur jsbin.com), soit vous hébergez ailleurs. Sur jsbin, pensez à utiliser le menu jsbin/create milestone pour sauvegarder votre travail (jsbin utilise git pour le versionning les et les URLs générés correspondent à une version unique).
  • Vous nous rendrez les URLs de vos travaux, on vous expliquera comment en cours.

Séance 2 : avancer le paint, chat avec WebSocket, paint multi-participants

Support de cours:

Tp 3: jouons avec les Web Sockets, chat simple et multi-rooms, ajout du chat dans le jeu et partage des positions entre joueurs

Séance 3 : introduction au Web de données / Web sémantique, continuer le TP fil rouge, travail à rendre

Support de cours :

Liens utiles :

Travail à rendre pour le 29/2014 : constituer une base de données pour un jeu de type pictionary

Nous n'avons plus de cours pendant 4 semaines. Vous devrez mettre cette période à profit pour constituer une petite base de données de quelques centaines de données sur les thématiques suivantes : animaux, histoire, géographie, films, acteurs, jeux vidéo, people, armes, sports. Par "base de données" on entend des tableaux d'objets javaScript organisés, sous forme de fichiers .json. Par exemple, vous aurez un fichier films.json qui contiendra une collection de films au format json, avec pour chaque film : titre, résumé, url de l'affiche, ids des acteurs. Dans acteurs.json, on aura une liste d'acteurs avec pour chaque acteur : nom, résumé, url photo, ids des films dans lesquel l'acteur joue. Dans animal.json on aura un le nom, un résumé, urls de photos, etc...

Vous écrirez une petite application permettant de chercher/voir les données dans votre base de données, et tester les fonctions qui seront utililes dans votre jeu:

  • On clique sur une catégorie et on voit toutes les données. On peut relancer une recherche sur DBPEdia pour ajouter de nouvelles données ou regénérer les données pour cette catégorie.
  • Quand on voit toutes les données d'une catégorie on peut en valider/invalider certaines, en effet, certains animaux/acteurs/films etc sont certainement méconnus ou indessinables. Vous les virez de la base. L'outil doit permettre de constituer une "bonne" base de données pour votre jeu.
  • On clique sur une catégorie, par exemple "animaux" et on clique sur "tirer au hasard", ça affiche la ou les photo(s) de l'animal et un résumé. Dans votre jeu de pictionary, c'est cet animal que l'équipe qui dessine devra dessiner avec le paint multi participant et faire deviner.

Bonus : vous intégrez la base de donnée au logiciel de paint et vous testez déjà à deux : le premier participant a une photo et un résumé tiré au hasard, il doit dessiner ce qu'il voit et l'autre participant doit le deviner, il doit taper dans la fenêtre de chat ce qu'il pense être le bon résultat. Le premier, celui qui dessine, a un bouton permettant de valider la bonne réponse et un boutin permettant d'invalider (boutons gagné/perdu).

Par la suite on mettra en place une "logique de jeu" avec un chronomètre, un démarrage quand on est au moins quatre, la gestion des scores, etc...

Vous pourrez aussi chercher des sites gratuits pour héberger votre application sur le net. Voir : https://github.com/joyent/node/wiki/Node-Hosting. L'année dernière les élèves avaient hébergé sur openshift (mais WebSokets que sur le port 8000, passe pas à la fac sans VPN, voir ce tutorial écrit l'an dernier : Tutoriel OpenShift.pdf) ou sur https://www.nodejitsu.<wbr/>com/ (gratuit pendant 30 jours) mais les conditions de chaque hébergeur changent chaque année.

TPs de 2012-2013, cela va changer !

Séance 2 : HTML5 Canvas

Cette semaine nous étudieront un des flash killers de HTML5 : l'élément <canvas>, qui vient avec une API JavaScript très complète pour dessiner, animer, interagir avec l'élément <video> que nous verrons la semaine prochaine, etc.

Supports de cours

TP 2 : étude et amélioration d'un petit moteur de jeu

Pour ce TP on va partir d'un mini moteur de jeu, pas forcément très bien écrit (voir commentaires dans le code), qui propose au joueur (symbolisé par un petit carré noir déplaçable à l'aide des flèches du clavier) d'atteindre le plus rapidement possible une cible ronde. On a gagné lorsque la cible est atteinte. Au centre il y a un obstacle (un gros rectangle noir animé, on a mis du random sur sa position), et des collisions sont détectées lorsqu'on touche cet obstacle (les obstacles et le joueur deviennent rouges et la vitesse de déplacement est modifiée). On peut aussi, à des fins de debug, déplacer le joueur à la souris (utile pour tester les collisions), mais dans le véritable jeu, cette option sera désactivée.

Exemple en ligne sur http://jsbin.com/acohiv/145 pour voir le source, cliquer en haut à droite sur le lien "edit in jsbin.com":

Snap1.jpg

L'animation est réalisée "à la sauce HTML5", c'est à dire à l'aide de la fonction JavaScript requestAnimationFrame() et non pas à l'aide de la fonction JavaScript setInterval(). Voir le cours pour comprendre les avantages de la première méthode sur la seconde. Vous remarquerez le code assez bizarre au début, pour assurer la compatibilité avec les différentes implémentations expérimentales ainsi qu'un fallback (solution de secours si requestAnimationFrame() n'est pas supporté):

// generic way to set animation up
      window.requestAnimFrame = (function(callback){
          return window.requestAnimationFrame ||
          window.webkitRequestAnimationFrame ||
          window.mozRequestAnimationFrame ||
          window.oRequestAnimationFrame ||
          window.msRequestAnimationFrame ||
          function(callback){
              window.setTimeout(callback, 1000 / 60);
          };
      })();

Voici la même version de ce programme sans ce code, avec une utilisation supposant que votre navigateur dispose d'une implémentation non expérimentale (cas de Chrome récent par exemple), regardez les appels très simples de mainLoop() et la manière dont cette fonction demande une nouvelle exécution avec requestAnimationFrame() : http://jsbin.com/acohiv/166/edit 

Et voici une seconde version dans laquelle on a rajouté un tableau d'obstacles et viré les valeurs codées en dur : http://jsbin.com/acohiv/142 

Nous vous proposons un petit scénario:

  • Au départ on suppose que le jeu de joue à deux (par la suite on pourra proposer un jeu avec un nombre variable de joueurs n). La partie commence au niveau 1. (tiens, il faudra donc penser à créer une structure pour gérer des niveaux !)
  • On pourra afficher un compte à rebour (3-2-1 partez !) et un chronomètre ensuite (google est votre ami)
  • La partie démarre, le jeu dessine les obstacles et la cible, et les deux joueurs sont placés aléatoirement dans la partie gauche de l'écran. Ils doivent à l'aide des touches du clavier, atteindre le plus rapidement possible la cible. On peut aussi imaginer avoir plusieurs cibles, des cibles qui se déplacent, etc.
  • Le niveau se termine lorsque les deux joueurs ont atteint une cible. Le premier marque (n -1) points, le dernier 0 points, n est le nombre de joueur (à deux, le premier marque 1 point, le dernier zéro).
  • On passe alors au niveau suivant.
  • La partie se termine lorsque les niveaux sont finis et on affiche le score.

Travail à faire:

  1. étudier le code, vous l'approprier, le mettre dans votre environnement de développement, etc. Ne vous gênez pas pour re-écrire ce qui ne vous semble pas très propre...
  2. En parallèle, regarder les exemples interactifs proposés dans le cours, ceux des sites donnés en ressources externes...
  3. Regarder ce qui manque entre l'exemple et le scénario proposé : niveaux, score, collisions mieux gérées, compte à rebour, chrono, meilleure gestion du temps entre les images (quoique requestAnimationframe() est normalement calé sur du 60 images/seconde si votre machine le permet, mesurer le temps écoulé entre deux images peut être intéressant dans le cas où la machine cible ne tient pas la cadence).
  4. N'oubliez pas que par la suite nous allons rendre ce jeu multi-participants en réseau, ajouter des effets sonores, de la musique, peut-être des interactions avec des vidéos, etc.

Vous avez bien sur le droit de changer les graphismes, utiliser des images, des sprites, etc. changer le scénario aussi si vous avez de meilleures idées !

A RENDRE POUR LA SEMAINE PROCHAINE : ce que vous aurez fait dans le sens du scénario pour rendre la démo proposée amusante et jouable. 

Séance 3: courssur le multi media et sur les Web Sockets

Support de cours:

Tp 3: jouons avec les Web Sockets, chat simple et multi-rooms, ajout du chat dans le jeu et partage des positions entre joueurs

Démos rigolotes: 

 

Mots clés:
FichierTailleDateAttaché par 
 HTML5.pdf
Aucune description
3.17 Mo08:40, 25 Mar 2013MichelBuffaActions
 IntroWebOfDataM1IFI.pdf
Aucune description
1193.27 Ko07:28, 25 Mar 2014MichelBuffaActions
 Tutoriel OpenShift.pdf
Aucune description
548.18 Ko07:53, 25 Mar 2014MichelBuffaActions
Images (1)
Voir 1 - 1 sur 1 images | Voir tout
Aucune description
Snap1.jpg  Actions
Commentaires (0)
Vous devez être connecté pour poster un commentaire.