MadnetiX FOUBERT Sébastien I3
Mon rôle au sein de l’entreprise était de : Programmer des jeux Flash qui seront mis à disposition pour les sites Madwin ou ThePlayBox de la gamme « R.I.S.E System ». Sécuriser, crypter tous les jeux. Implémentation d’un algorithme de cryptage. Intégrer les nouveaux jeux aux différents sites : PlayBox, Madwin, Filfun. Liste des Outils à ma disposition : Un PC sous Windows 98 relié à Internet Flash MX évidemment à ma disposition pour développer les jeux Flash, (sortie le 15 mars 2002) Un serveur ASP installé (communication Flash&ASP) Winhacker, programme utilisé par les hackers flash pour vérifier la sécurité des jeux. Quelques bouquins sur Flash MX Il m’a donc fallu implémenter un algorithme de cryptage, que j’allais utiliser pour tous les jeux. Un serveur ASP installé (communication Flash&ASP directement sur le site en cours de développement par d’autre stagiaire
ThePlayBox : une plate-forme payante de jeux en marque blanche Présentation et fonctionnement Conçu par Madnetix, ThePlayBox est une solution de jeux primés en accès payant, fournie en marque blanche à des grands portails Internet. (M6Games) Cette plate-forme permet aux internautes de se divertir autour d’une quarantaine de jeux de grande qualité en gagnant des points qu’ils peuvent dépenser sur une boutique de lots. Catalogue de 40 jeux en ligne articulés autour de huit catégories (Casino, Classique, Hasard, Arcade, Quiz etc.) Les jeux sont accessibles par l’achat de crédits de jeu en micro-paiement Audiotel. Partenariat avec les clients portails de ThePlayBox M6Games. Le chiffre d’affaires brut (i.e. redistribution France Télécom) est réparti à 50% entre Madnetix et le client portail. Exemples de jeux ThePlayBox
Exemple de code Actionscript: nb=String(int(nombre)); if(nombre<10) str_nb="00000"+nb; else if(nombre<100) str_nb="0000"+nb; else if(nombre<1000) str_nb="000"+nb; else if(nombre<10000) str_nb="00"+nb; else if(nombre<100000) str_nb="0"+nb; else str_nb=nb; //2eme phase A ou S des 5 1ere chiffre var car=cle.charAt(0); if(car=="S"){ for(var i=0;i<6;i++){ chiffre=Number(cle.charAt(i+1)) - Number(str_nb.charAt(i)) if(chiffre<0) chiffre += 10; soustract+= String (chiffre); } mot=soustract; else{ for(i=0;i<6;i++){ chiffre=Number(cle.charAt(i+1)) + Number(str_nb.charAt(i)) if(chiffre>=10) chiffre -= 10; addition+= String (chiffre); mot=addition; … Langage similaire au C dans sa syntaxe Mais aussi au Java Langage qui tend à devenir de plus en plus objet (objet, méthodes)
LISTE Des JEUX PROGRAMMES
- JackPot Puissance 5 X-Board Jeu de Casino Tirage aléatoire des bonus Gain, affichage des résultats X-Board Jeu de SnowBoard Gestion des obstacles Gestion des mouvements des personnages Gestion de la vitesse
- FREAKY WHEELS RUMBLE Jeu de voiture « vu du dessus » Programmation mouvement de la voiture Conception des circuits Gestion collision RUMBLE Jeu « d’auto-tamponneuse » Équations physiques de collision entre deux boules
Autres Implémentation d’un algorithme de cryptage. Intégrer cet algorithme à ces nouveaux jeux mais aussi aux jeux déjà crées de Madwin (une vingtaine). Mettre à jour les points de tous les autres jeux déjà intégrés au site Madwin, pour PlayBox. Intégrer les nouveaux jeux aux différents sites : PlayBox, Madwin, Filfun. La dernière semaine, rédiger la documentation du X-Board et Rumble (qui sont présentés en détail pour la suite)
X-Board
Liste des Obstacles: le sapin Le sapin n’est pas franchissable autrement qu’en le contournant. le rocher Un simple saut peut franchir cet obstacle. la bûche la barrière Un saut peut franchir cet obstacle où le joueur a la possibilité de se baisser en laissant appuyer sur A un moment ou en appuyant directement sur Z. le mur On peut casser le mur en prenant le tunnel. le tremplin Cet obstacle fait sauter le joueur automatiquement plus haut en le prenant, et si sa puissance est à fond, il exécute alors un BigAir. la plaque de verglas Elle fait glisser le joueur lorsqu’il tourne. Les poteaux de slaloms Le joueur doit slalomer entre les poteaux pour gagner des points.
Éléments principaux de la programmation: Tous les éléments graphiques (obstacles + décor) à ma disposition au départ. Mouvement des personnages L’agrandissement des obstacles pour donner l’impression de défilement. Gestion des profondeurs. Gestion des collisions avec les obstacles – zone de contact. Placement des obstacles. Création des circuits. Gestion des points
Gestion du défilement Pour donner l’impression de défilement => Agrandissement progressif des obstacles Dépend de: - la vitesse du snowboader (à l’arret, à fond…) - le placement de l’obstacle (définit au moment de la création de parcours) obstacle (nature, distance,decalage) Ce qui demande le plus de calcul (à chaque image, 24 img par sec) Optimisation Méthode de programmation assez intuitive (nombreux tests avec différents coefficients), pour plus de réalisme.
Gestion des profondeurs Algorithme : //SWAP de l’obstacle SI l’obstacle existe SI l’obstacle est derrière le snowboarder SI profondeur snowboarder > profondeur obstacle (c’est à dire snowboarder est à un plan plus avancé que l’obstacle) ALORS on change les deux profondeurs snowboarder et obstacle SINON SI profondeur snowboarder < profondeur obstacle Traduction ActionScript : méthodes getDepth() et swapdepth() //SWAP des tremplins if (_root["saut" add i].nb == i) { if ( _root.rider1._y + 40 < _root["saut" add i]._y ) { if (_root.rider1.getDepth() > _root["saut" add i].getDepth()) { _root["saut" add i].swapDepths(_root.rider1); } } else { if (_root.rider1.getDepth() < _root["saut" add i].getDepth()) {
Gestion des collisions Établissement de zone de contact. Exemple d’algorithme: SI contact entre zone snowboarder pendant le saut et sapin ALORS faire tomber joueur SI contact entre zone snowboarder pendant le saut et bûche ALORS ne rien traiter, le joueur passe l’obstacle. Voir source Démonstration
RUMBLE
Équations physiques de collision entre deux boules: Principe du jeu: Jeu d’ « auto-tamponneuse » vu du dessus, où il faut pousser un maximum d’adversaires en dehors du terrain. Peut tourner, accélérer, sauter pour feinter Nombre de vie illimité, partie dure 1min30 Points Le moteur de programmation consistera donc essentiellement à : - établir les équations de collision entre 2 boules - mettre en place une certaine intelligence artificielle. Équations physiques de collision entre deux boules: (révision de physique de terminal ) Nous admettrons les formules suivantes qui déterminent les vitesses v’1 et v’2 après le choc : v’1= ( 2*m2*v2+ (m1-m2)*v1 )/(m1+m2) v’2= ( 2*m1*v1+ (m1-m2)*v2 )/(m1+m2) V1, v2, v’1 et v’2 sont des vecteurs
Ensemble des fonctions d’intelligence artificielle: fonction IA_attack(i,j) Cette fonction permet à la boule numéro j d’attaquer la boule numéro i. le joueur se tourne vers lui accélère si il est assez loin de lui, ou si il est trop près, reculer afin de prendre de l'élan fonction IA_fonce(i,j) Cette fonction permet à la boule numéro j de foncer sur la boule numéro i. Elle est identique à la fonction IA_attack mais sa vitesse de déplacement est plus importante ce que va accroître le choc au moment de l’impact. fonction IA_place(j,x,y) La boule j se place à l’endroit de coordonnée x, y sur le terrain. fonction IA_milieu(j) Place la boule j au milieu du terrain. À l’aide de la fonction IA_place() Établissement de périmètre d’attaque Algorithme de l’intelligence artificielle: d=Calcul de la distance entre les deux boules SI d>120 (en pixel) On attaque, en appelant la fonction IA_attack (attaque à une vitesse de déplacement moyenne). Sinon si d>60 Si on a pas encore attaqué On attaque, en appelant la fonction IA_fonce (attaque à une vitesse de déplacement grande pour le choc). Sinon On se replace au milieu à l’aide de la fonction IA_milieu()
CHECK-LIST Cette Check-list comprend entre autre (en plus du bon fonctionnement du jeu): La vérification des fautes d’orthographes La mise en forme, les textes, politesse(Félicitations/Désolé), les boutons Rejouer/Quitter. Les points à vérifier, typographies uniformes, bonne correspondance des points gagnés et du nombre de crédit utilisé pour cette partie. La vérification du cryptage, tester le logiciel winhacker pour voir si le jeu peut être encore hacker après le cryptage des scores. Coûts Crédits (en unité de crédits) Durée Partie (en min) Gain en Points (en Points) 1 Environ 1 min 20 2 Environ 1 min et 45 sec 30 3 Environ 2 min et 30 sec 50 4 Environ 3 min et 15 sec 70 5 Environ 4 min et 15 sec 80 6 Environ 5 min 100
Securisation - ALGORITHME DE CRYPTAGE
Principe général de la sécurisation: Présentation de Winhacker ( disponible sur winhacker.com ) Méthode employée pour contourner ce piratage Comme l’affichage des variables en flash est dynamique On utilise pour chaque variable une seconde variable qui elle est cryptée initialisation Score = 0 Score_crypté=cryptage(0, cle_cryptage) modification de la variable Score Score_crypté= decryptage(Score_crypté, cle_cryptage) Score=Score+2 Score_crypté =Score_crypté +2 Score_crypté= cryptage(Score_crypté, cle_cryptage) Cette étape se faisant quasi-instamment avant que la nouvelle valeur de la variable Score soit affichée. vérification avant l’empochement des points dans la base de données SI Score=decryptage(Score_crypté,cle) ALORS Envoi de la variable Score à l’ASP Explication des fonctions cryptage et decryptage
854779 (soustraction chiffre à chiffre) Algorithme de cryptage: Utilisation d’une clé de cryptage Chaque nombre va se transformer en chaîne de caractère Nombre 52 Nombre crypté #*_vv@ Clé de cryptage S854721!£3R_*8v#@ Principe de l’algorithme ex: nombre: 52 et clé de cryptage: S854721!£3R_*8v#@ 854721 _ _________ 52 000052 854779 (soustraction chiffre à chiffre) Clé de cryptage: ! £ 3 R _ * 8 v # @ Correspondance: 0 1 2 3 4 5 6 7 8 9 D’ou le nombre 52 crypté devient : #*_vv@
La clé de cryptage est donnée au début du Jeu par l’ASP qui prend une valeur dans sa base de données Elle est changée toutes les 20 min, de sorte qu’un pirate n’ait pas le temps de découvrir cette clé de cryptage Programme crée pour faire les tests avec l’ASP Listing de la fonction de cryptage – code source Cliquez ici
DEMONSTRATION
CONCLUSION Ce que je retiens de mon stage: Mon 1er stage technique Mon 1er stage technique Travailler au sein d’une équipe et d’un chef de projet Répondre aux besoins d’un cahier des charges et d’un chef de projet Apprentissage d’un nouveau langage: L’ActionScript Devenir de mon travail: Mis en ligne: JackPot Puissance5, X-Board Pas encore mis en ligne: FreakyWheels Reste les graphismes du Rumble Sécurisation: les fonctions de cryptage seront employées pour tous les autres jeux à venir
REMERCIEMENT Pour terminer, je voudrais adresser mes remerciements: - A Gilles SABATIER, le directeur de MADNETIX, qui a choisi beaucoup d’efreiens et leur a fait confiance pour mener à bien les différents projets MADNETIX, - A Xavier, notre chef de projet, qui a su être à l’écoute des problèmes rencontrés et y apporter des solutions. - Aurélien, l’infographiste que l’on pouvait déranger à n’importe quel moment pour demander quelques éléments graphiques à ajouter dans notre projet. - A l’ensemble des membres de MADNETIX, qui ont su formidablement bien nous accueillir et intégrer. - Aux autres stagiaires, pour la bonne ambiance qu’il y a eu tout au long de mon stage.
Merci de votre attention FOUBERT Sébastien I3