CoddyRun
Blog

Articles & Actualités

Les publications CoddyRun : nouveautés du logiciel, astuces de pseudo-code, retours d'expérience et actualités de l'environnement pédagogique.

74 publications

Programmez avec des blocs !
Nouveauté

Programmez avec des blocs !

Nouveauté CoddyRun v3.5

Lire l'articleReplier l'article

Nouveauté CoddyRun v3.5 : Programmez avec des blocs !

Et si on pouvait construire son premier programme comme un puzzle ?

Avec CoddyBlock, le nouveau module de CoddyRun, on glisse des blocs, on les emboîte… et le programme prend forme, sans une seule faute de frappe.

Ces blocs sont écrits en vrai CoddyRun.
Chaque bloc porte les mots-clés du langage : si … alors, tant que, répète … fois, affiche… Pendant que vous assemblez, le code correspondant s'écrit sous vos yeux. Un clic, et il arrive dans l'éditeur, prêt à être exécuté.

  • Dans les deux sens : un programme déjà écrit s'ouvre en blocs, et les blocs redeviennent du code
  • Zéro erreur de syntaxe : un si a toujours son alors et son fin si
  • Toutes les fonctions du langage en blocs, avec une recherche pour les retrouver en quelques lettres
  • Rien n'est perdu : vos commentaires et vos sections restent en place
  • 100 % en français, 100 % hors ligne, comme toujours.

Pour les enseignants, c'est une passerelle. Les élèves démarrent avec les blocs et lisent le code qu'ils produisent. Ils passent ensuite à l'écriture avec les mêmes mots-clés et le même outil.

CoddyBlock arrive avec CoddyRun 3.5.

Pas encore noté
Découvrez l'inspecteur de toile
Nouveauté

Découvrez l'inspecteur de toile

CoddyRun v3.5

Lire l'articleReplier l'article

CoddyRun v3.5 : Découvrez l'inspecteur de toile

Dessiner avec du code, c'est génial ! jusqu'au moment d'ajuster. Ce label est-il bien centré ? De combien faut-il décaler ce rectangle ? Jusqu'ici, il fallait deviner, modifier une valeur, relancer, vérifier, et recommencer.

Vous avez été nombreux à me le dire, et je l'ai moi-même constaté en créant mes différents jeux : il manquait un vrai outil pour rendre la création de toiles plus simple et plus agréable. Le voici

Après l'exécution de votre programme, cliquez sur la loupe de la carte Résultat. Votre toile s'ouvre en grand avec trois outils :

  • Inspecter

Coordonnées exactes sous la souris, règles graduées, grille réglable et zoom jusqu'à 3200 %. Cliquez sur une forme pour voir sa position, sa taille et ses couleurs, ou sélectionnez-en deux pour connaître l'écart qui les sépare.

  • Ajuster

Glissez une forme pour la déplacer, tirez sa poignée pour la redimensionner, affinez au pixel près avec les flèches. CoddyRun retrouve la ligne de votre programme et y reporte les nouvelles valeurs. Vous voyez l'avant et l'après avant de valider.

  • Mesurer

Glissez d'un point à un autre pour obtenir la distance exacte, avec aimantation sur les bords et les centres des formes.

Moins de tâtonnements, plus de création

Disponible dans la prochaine version de CoddyRun v3.5

Pas encore noté
Correctif : Cliquer & Interagir
Nouveauté

Correctif : Cliquer & Interagir

Version 3.5

Lire l'articleReplier l'article

Correctif : cliquer sur la toile fonctionne à nouveau pendant un processus

Quand un processus était en cours, cliquer sur la toile avec Cliquer ou Interagir ne marchait pas toujours. Il fallait souvent cliquer plusieurs fois avant que le clic soit pris en compte. Les touches du clavier, elles, marchaient normalement.

Cela venait du fait que la toile se redessine en permanence pendant un processus, et que ce redessin pouvait « effacer » le clic avant qu'il soit reconnu.

C'est corrigé : le clic est maintenant pris en compte dès que tu appuies, même pendant qu'un processus anime la toile. Un seul clic suffit.

Un correctif sera intégré dans la prochaine version 3.5 actuellement en développement.

Pas encore noté
Vos textes enfin bien centrés
Nouveauté

Vos textes enfin bien centrés

Pour centrer un titre sur une toile, CoddyRun doit savoir quelle place prend le texte.

Lire l'articleReplier l'article

Pour centrer un titre sur une toile, CoddyRun doit savoir quelle place prend le texte. Jusqu'ici, il faisait comme si toutes les lettres avaient la même largeur. Pourtant, un « i » est presque quatre fois plus fin qu'un « M » ! Résultat : des titres légèrement décalés et des étiquettes qui débordaient de leur cadre.

C'est corrigé. CoddyRun connaîtra désormais la largeur réelle de chaque lettre, y compris les accents, les chiffres et le symbole €.

Le résultat : une mesure précise à un ou deux pixels près, invisible à l'œil nu. Vos titres seront vraiment au milieu et vos étiquettes tiendront dans leurs cadres.

Cette amélioration sera disponible dans la prochaine version, CoddyRun v3.5.

Astuce pour centrer en hauteur : l'aide de CoddyRun indiquera le bon réglage selon votre texte, qu'il soit tout en majuscules, en phrase normale ou tout en minuscules.

Pas encore noté
Embouteillage : quand l’algorithmique génère des défis intelligents
Article

Embouteillage

Quand l’algorithmique génère des défis intelligents

Lire l'articleReplier l'article

Un moteur de puzzle qui conçoit, teste et optimise ses propres niveaux

Aujourd’hui, je partage un projet qui m’a passionné : un générateur de niveaux entièrement autonome pour un puzzle de voitures, inspiré du célèbre Rush Hour.

Ce programme ne se contente pas d’afficher un jeu, il pense, analyse et sélectionne les meilleurs défis avant même que le joueur ne commence à jouer.

Un puzzle simple… mais une mécanique complexe derrière

Le principe : une grille 6×6, une voiture rouge à sortir par la droite, et des véhicules qui bloquent le passage.
Mais derrière cette apparente simplicité, le programme :

  • place les voitures aléatoirement,
  • vérifie que la configuration est jouable,
  • calcule le nombre minimal de coups pour résoudre le niveau,
  • retient uniquement les configurations les plus intéressantes.

Chaque niveau est donc unique, équilibré, et surtout résolu par l’algorithme avant d’être proposé au joueur.

Un générateur basé sur la recherche en largeur (BFS)

Pour évaluer la difficulté d’un niveau, chaque configuration est encodée sous forme d’un nombre en base 6.
Ensuite, le programme explore toutes les possibilités via une recherche en largeur (Breadth‑First Search) :

  • file d’états,
  • dictionnaire des configurations déjà vues,
  • génération des déplacements possibles,
  • calcul du nombre minimal de coups.

Ce système permet de déterminer précisément la difficulté d’un niveau et d’assurer une progression cohérente.

Une interface entièrement dessinée par le programme

Le moteur graphique gère :

  • le parking,
  • les voitures (formes arrondies, ombres, vitrage),
  • les boutons interactifs,
  • les messages contextuels,
  • l’écran de victoire.

Chaque élément visuel est généré via des procédures dédiées, pour un rendu propre et dynamique.

Un niveau n’est retenu que s’il représente un vrai défi

Le programme teste jusqu’à 12 configurations différentes et retient celle qui demande le plus de coups pour être résolue.
Il classe ensuite la difficulté : Facile, Moyen, Difficile, Expert.

Le joueur bénéficie ainsi d’une expérience progressive, sans niveaux trop simples ou impossibles.

Une expérience fluide et intuitive

Le joueur peut :

  • sélectionner une voiture,
  • choisir une destination,
  • recommencer le niveau,
  • générer un nouveau défi,
  • passer automatiquement au niveau suivant après une victoire.

Le tout géré par une boucle principale qui orchestre l’affichage, les interactions et la logique du jeu.

En résumé

Embouteillage est un moteur de puzzle complet, capable de :

  • générer des niveaux cohérents,
  • analyser leur difficulté,
  • sélectionner les meilleurs,
  • les afficher avec une interface claire,
  • gérer toutes les interactions du joueur.

Une belle démonstration de ce que l’on peut accomplir en combinant algorithmique, génération procédurale, graphisme, et game design.

Programme : Embouteillage

Pas encore noté
Une horloge pixel‑art en temps réel
Article

Une horloge pixel‑art en temps réel

Quand le code devient design

Lire l'articleReplier l'article

Dans ce projet, l’heure n’est plus simplement affichée : elle est reconstruite, stylisée et animée sous forme de pixel‑art. Chaque chiffre, chaque deux‑points, chaque changement de seconde devient un petit événement graphique.

Le résultat est une horloge numérique rétro‑moderne, colorée, vivante et entièrement générée par code.

Une police bitmap 5×7 conçue pour le temps

Au cœur du système se trouve une police bitmap 5×7, spécialement définie pour les chiffres de 0 à 9 et le symbole « : ».
Chaque caractère est décrit comme un motif de 35 bits, représentant des pixels allumés ou éteints. Cette approche minimaliste rappelle les écrans LED des années 80, tout en offrant une grande liberté de stylisation.

Cette police n’est pas importée : elle est codée à la main, ligne par ligne, pixel par pixel. Une manière de maîtriser totalement le rendu visuel.

Une palette de couleurs vibrante

Pour donner du rythme à l’affichage, chaque position de l’heure adopte une couleur différente.
La palette utilisée mélange :

  • rose vif
  • orange brûlant
  • jaune lumineux
  • violet profond
  • bleu électrique
  • vert turquoise
  • rose framboise

Ces couleurs alternent à chaque caractère, créant une horloge dynamique, presque musicale dans sa composition visuelle.

Une toile pensée pour HH:MM:SS

L’horloge affiche huit caractères : deux chiffres pour les heures, deux pour les minutes, deux pour les secondes, séparés par deux « : ».
La toile est dimensionnée pour accueillir ces huit blocs pixelisés, avec des marges harmonieuses et un fond sombre (#161B26) qui met en valeur les couleurs éclatantes.

Un rafraîchissement en temps réel

Le programme fonctionne en boucle continue :

  • Il récupère l’heure courante.
  • Il formate les valeurs pour garantir l’affichage sur deux chiffres.
  • Il efface la toile.
  • Il redessine chaque caractère pixel par pixel.
  • Il affiche la bannière.
  • Il attend un court instant avant de recommencer.

Ce cycle rapide donne l’impression d’une horloge animée, fluide, qui vit au rythme des secondes.

Un dessin pixel par pixel

Pour chaque caractère :

  • le programme lit son motif bitmap,
  • parcourt les 7 lignes et 5 colonnes,
  • dessine un petit rectangle coloré pour chaque pixel actif,
  • avance le curseur pour placer le caractère suivant.

Cette construction minutieuse donne un rendu propre, net, parfaitement lisible, tout en conservant le charme du pixel‑art.

Une horloge rétro‑moderne, expressive et entièrement générée par code Ce projet combine :

  • une police bitmap artisanale,
  • une palette contemporaine,
  • un rafraîchissement en temps réel,
  • un rendu pixelisé élégant.

Le résultat est une horloge unique, à la fois technique et artistique, qui transforme le temps en une expérience visuelle.

Programme :

@ Police bitmap 5x7 (chiffres 0 à 9 et deux - points)
police est un tableau
// Index 0 à 9 : chiffres '0' à '9', Index 10 : ':' (35 caractères chacun)
police ajoute '01110100111010110101101011100101110' // 0 (index 0)
police ajoute '00100011000010000100001000010001110' // 1 (index 1)
police ajoute '01110100010000100110010001000011111' // 2 (index 2)
police ajoute '11111000100010000010000011000101110' // 3 (index 3)
police ajoute '00010001100101010010111110001000010' // 4 (index 4)
police ajoute '11111100001111000001000011000101110' // 5 (index 5)
police ajoute '00110010001000011110100011000101110' // 6 (index 6)
police ajoute '11111000010001000100010000100001000' // 7 (index 7)
police ajoute '01110100011000101110100011000101110' // 8 (index 8)
police ajoute '01110100011000101111000010001001100' // 9 (index 9)
police ajoute '00000001100011000000001100011000000' // : (index 10)

@ Réglages et Palette
taille_case, marge_x, marge_y, espacement est un nombre
taille_case vaut 12
marge_x vaut 20
marge_y vaut 25
espacement vaut 1

couleurs est un tableau
couleurs vaut [#FF006E, #FB5607, #FFBE0B, #8338EC, #3A86FF, #06D6A0, #EF476F]

@ toile dimensionnée pour le format HH:MM:SS (8 caractères)
nb, larg, haut est un nombre
nb vaut 8
larg vaut marge_x * 2 + nb * (5 + espacement) * taille_case
haut vaut marge_y * 2 + 7 * taille_case
larg vaut limiter(larg, 1, 1000)

Banniere est une toile
dimension(Banniere, larg, haut)

@ processus de rafraîchissement temps réel
processus Horloge()
  tant que vrai
    // Récupération de l'heure courante via maintenant()
    maint est une heure
    maint vaut maintenant()

    h_num, m_num, s_num est un nombre
    h_num vaut heure_de(maint)
    m_num vaut minute_de(maint)
    s_num vaut seconde_de(maint)

    // Formate en 2 chiffres (01, 02, etc.)
    str_h, str_m, str_s est un texte
    si h_num < 10 alors
      str_h vaut "0" + convertir_texte(h_num)
    sinon
      str_h vaut convertir_texte(h_num)
    fin si

    si m_num < 10 alors
      str_m vaut "0" + convertir_texte(m_num)
    sinon
      str_m vaut convertir_texte(m_num)
    fin si

    si s_num < 10 alors
      str_s vaut "0" + convertir_texte(s_num)
    sinon
      str_s vaut convertir_texte(s_num)
    fin si

    texte_heure est un texte
    texte_heure vaut str_h + ":" + str_m + ":" + str_s

    // Effacement et redessin
    effacer(Banniere)
    remplir(Banniere, #161B26)

    curseur_x est un nombre
    curseur_x vaut marge_x

    pour n de 1 à nb
      lettre est un texte
      lettre vaut copier(texte_heure, n, 1)

      // Indexation directe sans alphabet
      idx est un nombre
      si lettre = ":" alors
        idx vaut 10
      sinon
        idx vaut convertir_nombre(lettre)
      fin si

      g est un texte
      g vaut police[idx]

      ic, pos, px, py est un nombre
      bit, coul est un texte

      ic vaut (n - 1) mod longueur(couleurs)
      coul vaut couleurs[ic]

      pour li de 0 à 6
        pour co de 0 à 4
          pos vaut li * 5 + co + 1
          bit vaut copier(g, pos, 1)
          si bit = '1' alors
            px vaut curseur_x + co * taille_case
            py vaut marge_y + li * taille_case
            rectangle(Banniere, px, py, taille_case - 2, taille_case - 2, coul)
          fin si
        fin pour
      fin pour

      curseur_x ajoute (5 + espacement) * taille_case
    fin pour

    affiche Banniere
    pause 250
  fin tant que
fin processus

@ Démarrage de l'horloge
Horloge()
Pas encore noté