Skip to content

Apprendre avec Dièse

Yoan Blanc edited this page Feb 10, 2016 · 12 revisions

Programme destiné aux nouveaux étudiants du CPLN pour découvrir et apprendre à code en C#.

Idée

Basé sur les projets tels que try Ruby ou tour of Go, l'idée est de plonger l'apprenant dans un univers où il devra se servir de C# pour faire progresser son personnage Dièse.

Comment

Un application C# découpée en deux fenêtres:

  • une zone de code libre
  • une zone de dessin dans laquelle sera affiché(e) Dièse.
+------------------+---------------------+
| Code C#          | Zone de dessin      |
|                  |         ,,,         |
|                  |        (o.o)        |
|                  |       -'| ||        |
|                  |         /|\         |
|                  |                     |
|                  | [  ] sac à dos      |
+------------------+---------------------+

Exemple d'exercice

1. Faire parler Dièse.

// Une bulle s'affiche pendant 50ms (et reste si dernière action)
say("Coucou");
// Une fenêtre demande des infos (MessageDialog)
var nom = question("Comment t'appelles-tu?");
// Puis les affiche.
say("Coucou {0}", nom);

2. Aider dièse à collecter des pommes

// Dièse avance à la vitesse de n pixels/sec
avance(1);
// tourne à la vitesse de m deg/sec
tourne(90);
// l'élément sous Dièse disparait et s'affiche dans son sac à dos
ramasse();

3. Ramasser des pommes sur un chemin géométrique

for (var i=0; i < 4; i++) {
    avance(1);
    ramasse();
    tourne(-90);
}

4. Trier des pommes

ramasse();
// lit la valeur du sac à dos.
var anciennePomme = valeur();
depose();
avance(1);
ramasse();
if (valeur() < anciennePomme) {
    recule(1);
    échange(); // dépose et récupère l'autre pomme.
    anciennePomme = pomme();
    avance(1);
}

5. Dessiner une étoile à X branches

void dessinerÉtoile(int taille, int branches) {
    avance(10);
    tourne(60);
    // comme avancer mais va dessiner une ligne.
    ligne(50);
    // ...
}

var réponse = "N/A";
int nombreDeBranches;
while (!Int32.TryParse(nombreDeBranche, out nombreDeBranches)) {
    réponse = question("Combien de branches à votre étoile?");
}

dessinerÉtoile(100, nombreDeBranches);

etc...

Ressources

Difficultés

Fonctions

  1. Comment peut-on "simplement" définir des fonctions? Les lambdas c'est mignon mais un peu trop avancé pour un niveau 1ère année.

    Func<int,bool> positif = (x) => {
        return x > 0;
    };
    Action<int> boucle = (x) => {
        gauche(x);
        haut(x);
        droite(x);
        bas(x);
    };

    Solution: traduire du code à la volée avant de l'interpréter. Moche mais simple avec une bête regexp.

    bool positif(int x) {
        return x > 0;
    }
  2. Dessiner dans un widget avec Cairo. C'est simple mais vite lourdingue à réaliser.

Vocabulaire

Un nouvel étudiant peut être perdu dans tout un tas de termes nouveaux. Il est important de les présenter de manière simple.

http://www.programmingforbeginnersbook.com/blog/expand_your_programming_vocabulary/