Certaines sources ne sont là que pour mettre en avant une fonction particulière avancée du système d'exploitation. Elles sont mentionnées
par des **** astérisques ****.
Les chiffres entre parenthèses de 1 à 3 indiquent le niveau de difficulté de celle-ci : 1 - Facile, 3 - Difficile
N'ayez pas peur de télécharger : ce sont des sources, pas des fichiers exécutables. Vous pouvez donc les ouvrir, regarder
le code, et copier-coller la fonction qui vous intéresse. Et l'exécuter, c'est vrai. Mais comme vous avez le code, vous pouvez vérifier qu'il
n'y a pas de commandes comme "Kill"... Il y a aussi des gens biens sur internet !
Les sources ici ne sont pas de moi. C'est une sorte de "best of" de VBFrance, sur l'année 2002 à peu près. Les sources
DirectDraw sont souvent
intéressantes, non pas parce que le jeu est bien, mais parce que ça nous apprend à nous servir de DDraw alors qu'il n'y a que très peu d'exemples
Je vous conseille de faire comme j'ai fait il y a 6 ans, c'est à dire de télécharger toutes ces sources (une ou deux par jour) et de les lancer,
juste pour voir ce que ça fait. C'est comme ça que ça reste dans la mémoire, et que 6 ans après vous vous rappellerez que "oui ! j'ai déjà vu
comment faire ça quelque part"... vous verrez !
P.S : tout devrait avoir des **** **** ici, avec les notations précédentes.
- (2) Package ActiveX
- 3 sources activeX, i.e 3 contrôles faits grâce à VB (New Project -> Contrôle ActiveX), que vous pouvez maintenant utiliser dans vos programmes,
où étudier pour vous faire à votre tour votre propre contrôle. Comprend un label Hyperlink (i.e ressemble à un lien hypertext), une MsgBox vraiment
très sympa, et une progressBar.
- (1) Api Démarrage
- Demande un mot de passe à l'ouverture de l'ordinateur, et éteint l'ordinateur si l'on se trompe. Utilise un Api qui empêche de cliquer
autre part que sur une fenêtre de notre programme. Très pratique.
- (2) Arkanoïd
- Un casse brique. Utilise DirectDraw.
- (3) Bataille navale en réseau
- Un jeu en réseau !!!
- (2) Bitmap to Avi
- Transforme des fichiers bitmaps en un fichier avi.
- (3) Calcul
- Calcule des chaînes de caractères : expressions du type "2+3+4" ou "sin(2+3*cos(4))"
- (1) Cartes
- Explication sur les fichiers res et utilisation d'un fichier de ce type contenant les 53 images d'un jeu de cartes (52 + 1 joker). Ultra
pratique !!!
- (2) Casse brique
- Utilise Direct Draw
- (2) Chaîne vertébrale
- Un corde qui suit la souris. Très bien fait (inertie, ...)
- (1) Résolution de l'écran
- Change la résolution de l'écran
- (2) Editeur hexadécimal
- un éditeur hexadécimal
- (1) Compresseur jpg
- Compresse les fichiers jpg
- (2) le Compte est Bon
- Un solveur du fameux jeu "le compte est bon"
- (1) Convertisseur jpg en bmp
- Convertit... les fichiers jpg en fichiers bmp
- (1) Direct3D
- Un exemple simple d'utilisation de Direct 3D
- (2) DirectX ou Direct3D ou OpenGL
- Un "package" pour expliquer comment utiliser la 3D, avec même un exemple : déplacement d'un personnage sur un terrain 3D !!!
- (1) Port Parallèle
- Utilisation du port parallèle pour allumer une ampoule. (je n'ai jamais essayé, je n'ai pas le matériel pour faire de la domotique, mais
ça m'intéresserait effectivement beaucoup de m'y mettre !!!)
- (2) e-mail
- Envoyer un e-mail depuis votre code. Super, surtout si : 1) on veut cacher son nom d'expéditeur ou 2) on veut envoyer 500 mails à 500 personnes
dont on a les e-mails dans un fichier texte ou dans Excel, pour leur prévenir qu'on change d'adresse. Ou pour souhaiter la bonne année, si on
aime bien les petits messages personnalisés :)
- (1) Exécuter une chaîne de caractères
- Très beau !!! Ça part du principe que sur windows il y a une console, et donc ce qu'on écrit est interprété. Et donc on peut très bien envoyer
une commande au système sous la forme d'une chaîne de caractères. Ce peut être "cd .." ou "calculer 2+3+4*5", toujours délicat à programmer. (cf
cependant d'autres sources qui le font très bien, mais qui ne font essentiellement que ça). Ça ne le fait malheureusement pas assez vite pour
pouvoir en faire un traceur de courbes, mais pour calculer une valeur toutes les 30 secondes ça ne se verra même pas pour l'utilisateur.
- (2) Transparence
- Rendre transparentes les parties d'une Form. Peu utile, mais rigolo.
- (2) Handle souris
- C'est justement ce code qui explique comment savoir ce qu'il y a écrit derrière les ***** d'une boîte texte, d'un programme qui n'est pas à
nous (ex : logiciel de connexion internet). Très pratique, surtout si on a oublié son mot de passe, mais pas l'ordinateur. Explication sur les
handle ici.
- (2) Hooker
- Hook le clavier pour tous les lgociels, même ceux qui ne sont pas à vous, c'est à dire va récupérer l'appui sur les touches avant que
l'événement ne soit transmis aux diverses applications en cours d'exécution. Intérêt ?
- vous pouvez changer la valeur des touches (remplacer les 'a' par des 'b' par exemple ce qui ne sert à rien sauf pour rire et montrer qu'on
sait le faire
- Si une touche ne nous plait pas, demander à faire comme si elle n'avait pas été pressée. (exemple : ctrl-alt-suppr)...
- (1) Icone Tray
- Les icônes Tray sont les petits icônes qui se trouvent dans la barre bleue Windows tout en bas à droite, à côté de l'heure. Vous pouvez mettre
un petit icône là-dedans à vous, et même savoir quand est-ce que le clic droit ou gauche ou double-clic intervient dessus. Ça fait pro, et propre.
- (1) ImageMenu
- Sert à glisser des icônes dans vos menus. Plus joli.
- (1) Popup Icon
- Insère des icônes dans vos popup menus.
- (1) Icône dans les menus
- Glisse des icônes dans les menus. Encore une source là-dessus. Choisissez donc celle qui vous plait le plus !
- (2) Déplaceur et Resizer de contrôles
- Ultra pratique ! Si vous voulez que l'utilisateur puisse redimensionner un contrôle, et le déplacer, ce code placera 8 carrés autour
du contrôle, un peu comme les images dans Word ou Excel par exemple.
- (3) Info Bulle
- Crée de très jolies info-bulles, avec des images bitmap à vous. C'est intéressant de voir que Windows qui est tant décrié par les programmeurs
a quand même beaucoup pensé à eux : ce code (à rapprocher de "transparence") montre qu'on peut obliger Windows à gérer beaucoup de choses, et il le
fait très bien.
- (2) IP, MSN et transparence
- Indique notre IP, si l'on est connecté à MSN et gère la transparence de la fenêtre
- (1) jeuxvideo.com searcher
- Recherche un jeu sur www.jeuxvideo.com : et oui, VB peut se connecter à internet !!!
- (1) Launcher
- Vous sert d'interface avec vos fichiers : montre comment lancer une application (Winamp, ...) en fonction du type de fichier à ouvrir.
- (1) Tour de magie
- Assez rigolo : pensez à un nombre et l'ordinateur vous le trouve. Cherchez l'astuce !
- (2) Matrix
- Peut servir à se faire un screen saver : des lettres qui tombent en vert fluo sur fond noir. Très bien fait parce que les lettres s'estompent
avec le temps ce qui ne colore pas entièrement le fond d'écran. Utilise Direct Draw.
- (0) Attributs des fichiers
- Modifie "caché", "lecture seule", ... de fichiers.
- (1) Crypte vos fichiers
- Assez malin : choisissez un fichier et un mot de passe, et ce code va ouvrir le fichier en mode binaire, et crypter les bits uns à uns en
fonction du mot de passe choisi. Comme ça vous avez un nouveau fichier et il vous faut ce logiciel et votre mot de passe pour l'ouvrir. Pour
les gens qui ont des choses à cacher... Utile donc pour comprendre la crypto (très bas de gamme mais c'est quand même un bon exemple) et la
lecture/écriture d'un fichier en mode Binary
- (2) Moteur 2D
- Très pratique. Au lieu d'apprendre comment dire à Direct Draw d'effacer l'écran, de tracer une ligne, de charger une image, ... vous prenez
ce code et vous utilisez les fonctions "initialise", puis "tracer", "chargerimage", ... En clair ça marche comme une interface entre DDraw et vous.
Utilise donc Direct Draw et même Direct Sound pour jouer de la musique en arrière plan.
- (1) Nouveau Menu
- Permet d'ajouter un sous-menu à un menu déjà existant. Pratique si vous voulez avoir un menu "Fichiers récents" et que ça peut varier de
1 à 10 par exemple.
- (1) Pentech
- Evalue la vitesse de votre ordinateur, en le confrontant à diverses tâches.
- (1) Récupérateur d'icônes
- Récupère les icônes d'exécutables de votre ordinateur. Vous montre comment utiliser les FileListBox et DirListBox (en les corrélant).
- (0) Bloquer une Form
- Bloque une form dans sa position, sa taille ou son positionnement (au dessus) des autres form.
- (1) le registre
- Implémente des fonctions de création de clé, d'existence de clés, ... pour le registre + un petit fichier expliquant où trouver certains
attributs bien particuliers de Windows.
- (1) Resize form
- Impose une taille minimal et maximale à une fenêtre, par le biais des API.
- (1) Convertisseur RGB TLS
- Très utile. Par contre, pas grand chose à essayer de comprendre, ce sont surtout des formules pour convertir une couleur donnée en RGB (red,
green, blue) en TLS (teinte, luminosité, saturation).
- (1) Screenshot
- Crée des screen shots
- (2) Shoot Game
- Utilise Direct Draw et Direct Sound. Jeu de tir sur des cibles avec votre souris (aller vite et être précis) qui se trouve un intérêt même
autre que purement didactique.
- (1) Form en forme de smiley (transparence, ...)
- Rigolo, mais inutile à première vue. Crée des zones de transparences sur une fenêtre pour la faire ressembler à un clown. Apprend cependant
à manier les 'Region' de Windows, et c'est assez beau de se dire qu'ils ont trouvé le moyen de gérer (et donc mémoriser) des 'Region'. (la réponse
n'est pas simplement "ben... c'est la carte graphique". Oui, c'est la carte graphique, mais la question c'est comment ?). Si vous
ne comprenez pas ce que je dis, relisez ça dans un an après avoir fait pas mal de programmation graphique. Et si vous ne comprenez toujours pas,
ce site ou celui-ci ou encore
celui-là seront plus adaptés que le mien.
- (1) Stenographie
- Cache un fichier dans une image, en jouant sur les bits à faible poids des images. Un genre de cryptage.
- (1) Suit la souris
- Très mignon. Un ange qui bat des ailes qui suit la souris là où elle va. Une sorte de gif animé. Mais comme VB ne les gère pas, il faut
l'implémenter avec des bmp.
- (2) ToolTip personnalisés
- Peut s'avérer très pratique !!! Choisissez le temps avant l'apparition du tooltip, l'image associée, faites les tenir sur plusieurs lignes,
...
- (1) e-mail
- Encore un code pour envoyer des mails. Utilise AspMail (il faudra le télécharger ce qui semble contraignant), mais... ça marche très très bien
ensuite
CamL
Les codes qui sont ici n'ont pas vocation à être utilisés tels quels, mais plutôt à vous montrer comment faire telle ou telle chose en CamL
(ex : fonctions dans une fonction, ...)
- Nombres complexes
- Classes spéciale : un module, avec mot clé "struct" (même pas vue dans le tutoriel), qui gère les nombres complexes.
- Construction d'un type
- Un exemple simple qui illustre la construction d'un type.
- Fonctions basiques sur les listes
- Beaucoup de fonctions de la bibliothèque "List" implémentées. Idéal pour apprendre à travailler sur les listes proprement.
Essayez de refaire ces fonctions vous même !
- Les Piles
- Implémentation d'une structure de pile. Idem entraînez-vous à implémenter vous-même cette structure.
- Tris de tableaux
- Divers tris sur les tableaux.
- Tri par tas
- Une implémentation du tri par tas
- Tris sur les listes
- Divers tris sur les listes
Prologin
Vous trouverez ici les codes que j'ai envoyé sur Prologin. De même, pour vous entraîner, essayer de
résoudre les exercices vous même. C'est seulement si vous n'y arrivez pas que vous devriez jeter un oeil à mes codes, pour comprendre non pas
l'algorithmique derrière, mais comment implémenter un algorithme en CamL.
Tout en bas des fichiers sont implémentées les entrées, souvent
délicates pour les débutants (comment lire un tableau en entrée, puis une chaîne, puis 2 entiers, ...).
C++
- (1) Fichier Wav
- Le meilleur moyen pour comprendre comment l'ordinateur joue un son, c'est de coder soi-même un fichier, et de voir ce que ça donne !
Ce code source C++ génére un .wav qui fonctionne, et vous pouvez vous amuser à faire varier certaines choses dans le code pour comprendre.
- (2) calcul formel
- Une très belle illustration de la puissance des classes et de la programmation orientée objet. Une utilisation concrète des classes virtuelles,
et des arbres dans le but de calculer des expressions du type "2 + 3 * 4 + sin(3.14/2)" et même du type "sum(i^2, i, 1, x)"
(somme des carrés des x premiers entiers)
Java
- (1) interface par coordonnées et
(1) interface par layouts
- Code du tutoriel java de quelques lignes pour réaliser de petites interfaces avec Java, en plaçant les contrôles précisément
(positionnement par coordonnées) ou avec des Layout.
- (2) Projet Crypto
- Ce code tente de décoder un texte, sans accents ni ponctuation, crypté à l'aide d'une permutation des lettres de l'alphabet. Le texte peut
avoir des noms propres. (d'après un Article de S.Lucks)
- (3) Projet Wiener
- Ce code tente de décrypter une clé RSA grâce au développement en fractions continues.
(d'après un Article de Wiener)
Il marche très bien dans le cas où les facteurs n'ont pas la même taille (cela optimisait le décodage des cartes
bleues dans les distributeurs de billets).
- (2) Rubik's Cube
- Le cube qu'il y a dans mes pages Rubik's Cube, donc 3D + gestionnaire de la souris pour orienter le cube + Thread, le tout sous
forme d'applet.
- (2) Horloge
- Une applet dessinant une horloge ; donc utilisation du dessin et des Threads.
- (3) Détection de contours
- Détection de contours basée sur l'article
N. Xu, R. Bansal, N. Ajuja: Object segmentation using graph cuts based active contours, CVPR 2003.
Il s'agit de dire qu'une image est un graphe où chaque pixel est un sommet et les arêtes correspondent aux voisins de ces pixels, avec un poids
élevé lorsque le niveau de gris est similaire, faible si c'est très différent. On fixe alors la source comme l'intérieur d'une zone,
le puits comme l'extérieur, et on cherche la coupe minimale de ce problème de flot.
Algorithmiquement : utilisation des threads, algorithme de Ford Fulkerson, min-cut, gestion des images en Java, algorithme de Bresenham
pour relier 2 pixels par une ligne, ...
(3) Détection de contours (Applet)
(fonctionnalités réduites mais code élagué)
- (3) Triangulation (Applet)
- La triangulation se fait ici par insertion, et l'algorithme est assez "maison", c'est à dire que soit le point est dans un triangle et alors
on le raccorde aux 3 sommets, soit il est hors de l'enveloppe convexe et il faut chercher les "tangentes". A chaque insertion d'un segment on
cherche s'il faut le "fliper" (cf wikipedia), et quand il y a un flip on
teste récursivement s'il faut fliper les voisins. Le diagramme de Voronoï se fait étonnament assez simplement, une fois que la triangulation
est calculée. Quand le point inséré est dans l'enveloppe convexe, on cherche dans quel triangle l'insérer avec "l'arbre des anciens triangles",
que l'on a sauvegardé. Un petit travail supplémentaire qui alourdit le code plus qu'il ne le fait gagner en vitesse semble t'il.
AppleScript
Voici tout d'abord une liste de tutoriels assez complets sur AppleScript, mais aussi assez longs.
- Les bases
- Ni trop peu, mais un peu trop. Mais très bien pour débuter et comprendre le fonctionnement d'AppleScript.
- Les baaaaases
- Pdf du même accabit que celui juste au dessus, en plus long et plus détaillé et avec plus d'exemples.
- Guide des Objets AppleScript
- Détaille beaucoup d'objets (graphiques, cette fois) et leurs propriétés, avec des exemples. Très utile.
AppleScript est un langage somme toute assez limité en vitesse (cf mon programme pour apprendre le japonais, qui met 1 minute à chercher
un mot dans une liste de 3000 mots...) et donc autant passer à Objective C si c'est pour faire une application. Par contre AppleScript est un
langage de script agréable qui nous évite de passer par le terminal et de faire des scripts en bash (surtout que le bash du Mac est pourri).
Je m'en sers par exemple quand je télécharge 100 chansons de Claude François, et qu'elles sont numérotées 01 - Si j'avais un marteau,
02 - ..., 03 - ... alors que moi j'aime bien avoir Claude François - Si j'avais un marteau, Claude François - ..., Au lieu de renommer à la
main 100 fichiers je lance un petit script !
Les gens chez Apple ont vraiment pensé à tout avec AppleScript : Faites tell app "iTunes" to pause
,
et... ça marche. Dingue non ? On se rend compte que la programmation Mac est quand même simple de ce coté. (Alors qu'on en ch*e
en VB pour faire faire un truc à un logiciel de notre ordinateur).
- (2) Exemple d'utilisation de l'interface builder et des objets
- Ça montre comment écrire dans un label, savoir quand il y a un clic, ... Bref j'aurais vraiment aimé l'avoir quand j'ai débuté, parce qu'il
n'y a pas beaucoup d'exemples sur le Net. (peut-être parce que tout le monde ne s'arrête pas plus d'un mois sur ce langage ? ^^)
- (1) Calcul de PGCD
- Demande 2 nombres à l'utilisateur et calcule le pgcd. C'est juste un script, il n'y a pas d'interface, mais ça montre la structure d'un script,
et qui plus est quand il y a une interface, derrière c'est quand même un script, donc... il faut savoir le faire.
- (1) iCal et (1) iCal2
- Lis les événements qu'il y a dans iCal, de 2 manières : la première en automatisant/maîtrisant iCal, la seconde en lisant les fichiers
de la bibliothèque.
- (1) renomme les Fichiers
- Renomme les fichiers d'un dossier selon la syntaxe que vous voulez. (cf l'exemple sur Claude François)
- (3) Apprentissage du japonais
- Un gros, disons les choses comme elles sont, programme pour apprendre le japonais. Il faut déjà savoir lire au moins les
hiragana (ひらがな) et les katakana カタカナ. Il y a 3000 mots environ fournis avec le programme, qui vous teste dessus selon 3 manières.
Téléchargez l'application (Mac).
- (1) imprimer des pages web
- Vous fournissez une liste d'URL de pages web que vous vouez imprimer, et le script va les ouvrir une par une et appeler un petit script
automator qui va vous imprimer tout ça.
Widgets Mac
Je rappelle qu'un widget est comme une page web : c'est du code non compilé, ce qui fait que les widgets que vous téléchargez ici sont prêts à
l'emploi ET éditables (pour voir comment ils sont faits).
- iCalendar
- Le Widget iCal est pourri parce qu'il ne colore par les dates où il y a des événements, ce qui est un peu dommage. Le mien le fait, et il est
synchronisé sur l'application iCal. Utilise l'objet Canvas pour créer un joli fond dégradé, et un script AppleScript pour savoir ce qu'il y a dans
vos événements iCal.
iPhone
Une application iPhone ressemble de très près à une application Cocoa / Objective-C (pour Mac), donc les choses que vous voyez ici
peuvent facilement être reprises pour être mises sur ordinateur, ce que j'ai d'ailleurs fait pour Wormwar et BrainGame.
Il y a aussi une page spécialement dédiée à mes applications iPhone.
Pour l'histoire, ces jeux sur iPhone représentent un peu mes premiers pas en programmation Cocoa donc certaines techniques que j'utilise
ne sont pas un modèle du genre, mais il y a des choses bonnes à prendre pour les débutants, j'en suis sûr + beaucoup de petits snippets
comme afficher une image png, jouer un .wav, utiliser un timer qui bippe toutes les secondes, ... (quasiment toutes les applications utilisent
ces choses)
- (1) Brain Game
- Un petit jeu où l'ordinateur invente une mélodie, et où il vous la fait apprendre : 4 carrés rouge, vert, jaune, bleu qui clignotent suivant
cette mélodie, et vous devez la réciter. Utilise les timers, la sauvegarde des préférences (meilleur score, ...),
le redessin/rafraîchissement de l'écran, les sons, ...
- (1) Be Happy
- Un programme qui ne fait rien à part dire que votre iPhone est protégé contre les virus. Joli et inutile. Petite source d'une dizaine
de lignes qui n'utilise juste les NSTimer.
- (1) Wormwar
- Le jeu du serpent, où il y a une petite intelligence artificielle programmée. Vous devez tuer les serpents de l'ordinateur qui essayent aussi
de vous tuer. Utilise principalement les timers et le redessin de l'écran ([ setNeedsDisplay:YES] d'une NSView) et le toucher de l'écran.
Cocoa / Objective-C
- (1) Memory Game
- Le même jeu que sur iPhone avec en plus la sauvegarde des préférences (meilleur score, partie avec mort subite ou non, ...),
ouvrir une fenêtre "modale" (celle des préférences), ...
- (1) Wormwar
- Le même jeu que sur iPhone avec en plus la possibilité de jouer à 2 joueurs en un contre un ou bien à deux contre l'ordinateur.
- (1) Puissance 4
- Le jeu bien connu, contre l'ordinateur ou à deux. En 2D ou en 3D ! (grille 4 * 4 * 4 pour faire des nœuds au cerveau !)
- Cabri Géométrie
- Utilisation concrète de ces outils qui simplifient la vie d'un programmeur Cocoa : l'UndoManager pour gérer
automatiquement l'action Undo, sérialisation (= sauvegarde simple d'un objet, ...). Il y a aussi une utilisation massive et élégante des classes
et de l'héritage.
Exécutables Mac
- Memory Game
- Le même jeu que sur iPhone.
- Wormwar
- Le même jeu que sur iPhone avec en plus la possibilité de jouer à 2 joueurs en un contre un ou bien à deux contre l'ordinateur.
- Cabri Géométrie
- Permet de construire des figures géométriques compliquées, comme en maths, à partir de "contraintes". Ex : un triangle, le cercle circonsrit,
un point sur ce cercle, la tangente à ce point, la droite perpendiculaire à la tangente et passant par un des sommets du triangle, ...
- Japonais
- Petit programme pour vous tester sur quelques 2000 mots de japonais. Identique à l'entraînement
en ligne. La source de ce programme AppleScript (Studio) est ici.
- (1) Puissance 4
- Le jeu bien connu, contre l'ordinateur ou à deux. Vous pouvez aussi y jouer en version 3D !
Exécutables PC
- BlackJack
- Un petit jeu de blackjack que j'ai fait en VB (vous pouvez télécharger la source ici, qui est sur
cette page de toute manière), pas franchement excitant il faut bien l'avouer
- Screen saver
- Un cow boy qui tire aléatoirement sur la photo de quelqu'un, et qui rigole quand il touche la cible (mouvante). Attention, c'est un .scr, ce
qui signifie que c'est un Screen Saver. En d'autres termes, si la souris est dessus ou si vous appuyez sur une touche pendant le déroulement du
programme, celui-ci s'arrête. Lancez le en cliquant dessus, puis en faisant Entrée. La souris doit être dans l'un des coins de votre écran avant.
Téléchargez la source (sur cette page de toute façon) pour faire de même avec vos propres photos,
ça produit toujours son petit effet.
Remarque : Un .scr est en fait un .exe où l'on a remplacé l'extension. A vous de coder le fait que si
l'on appuie sur une touche ou si l'on bouge la souris le programme s'arrête.
- Twizzer
- Vraiment un bon petit jeu que j'ai fait, assez rigolo, surtout si vous jouez avec quelqu'un qui a toujours du mal à coordonner ses mouvements.
La source est disponible ici, c'est à dire aussi sur cette page.
- Worms
- Encore la version exécutable de ma source du même nom. Un serpent à 32 directions, qui se joue à seul ou à deux.
- Wormwar
- Idem. Le jeu est vraiment vraiment bien, sincèrement. C'est un serpent qui doit tuer les autres, on peut toucher les murs, tout ce qu'il faut
c'est ne pas être bloqué. Il se joue seul contre l'ordinateur ou à 2. source.
(PS j'ai aussi reprogrammé ce jeu sur iPhone et sur Mac)