, élève de Seconde qui n'a pas attendu le lycée pour se passionner pour cette formidable petite machine, lui ayant même conçu des chaîne vidéo et site de tutoriels dédiés dès le Collège !
revient donc nous régaler pour un réveillon grand format sur une table de 16, fort bien adaptée aux dimensions de la zone graphique utilisable sur
fx-92+ Spéciale Collège
(
192×47
pixels utilisables sur un écran de
192×63
)
.
Et si tu regardes le code, ce qu'il y a d'ingénieux pour contourner la limite de mémoire, c'est que le contenu des assiettes n'y est même pas défini ! En effet ce dernier y fait l'objet de déplacements aléatoires de la tortue. Outre le fait que le menu changera donc à chaque exécution, il nous faut bien avouer que cela rend malgré tout super bien !
Aller à x= -80 ; y= -5 Stylo écrit S'orienter à 270 degrés Avancer de 15 pixels Avancer de -15 pixels S'orienter à 0 degrés Avancer de 150 pixels S'orienter à 270 degrés Avancer de 15 pixels Avancer de -15 pixels S'orienter à 53 degrés Avancer de 25 pixels S'orienter à 270 degrés Avancer de 15 pixels Avancer de -15 pixels S'orienter à 180 degrés Avancer de 150 pixels S'orienter à 233 degrés Avancer de 25 pixels S'orienter à 270 degrés Avancer de 15 pixels S'orienter à 0 degrés Avancer de 3 pixels Tourner de ↺ 90 degrés Avancer de 12 pixels S'orienter à 0 degrés Avancer de 144 pixels S'orienter à 270 degrés Avancer de 12 pixels S'orienter à 0 degrés Avancer de 3 pixels S'orienter à 53 degrés Avancer de 3 pixels S'orienter à 90 degrés Avancer de 12 pixels S'orienter à 53 degrés Avancer de 18 pixels S'orienter à 270 degrés Avancer de 12 pixels S'orienter à 53 degrés Avancer de 3 pixels Stylo relevé Aller à x= -55 ; y= 6 S'orienter à 0 degrés 0 →A Répéter 16 Stylo écrit Répéter 2 Répéter 9 Avancer de 0,9 pixels Tourner de ↺ A degrés A+2,25 →A ⤴ Répéter 9 Avancer de 0,9 pixels Tourner de ↺ A degrés A-2,25 →A ⤴ ⤴ Stylo relevé S'orienter à 0 degrés Avancer de 17 pixels Si x>70 Alors Aller à x= -65 ; y= -3 Fin ⤴ Aller à x= -53 ; y= 9 Répéter 16 RanInt#(1;3 →A x →B y →C Si A=1 Alors S'orienter à RanInt#(1;360 degrés Avancer de -2 pixels Tourner de ↺ 90 degrés Avancer de 3 pixels Tourner de ↺ -90 degrés Répéter 4 Stylo écrit Avancer de 5 pixels Avancer de -5 pixels Stylo relevé Tourner de ↺ -90 degrés Avancer de 2 pixels Tourner de ↺ 90 degrés ⤴ Fin Si A=2 Alors Stylo écrit Répéter 15 Aller à x= RanInt#(B-4;B+4 ; y= RanInt#(C-2;C+2 ⤴ Fin Si A=3 Alors Aller à x= x ; y= y-1 RanInt#(2;8)×,1 →D Stylo écrit Répéter 18 Avancer de D pixels Tourner de ↺ 20 degrés ⤴ Fin Stylo relevé S'orienter à 0 degrés Aller à x= B+17 ; y= C Si x>70 Alors Aller à x= -63 ; y= 0 Fin ⤴ Aller à x= 0 ; y= 100
, et déjà grand vainqueur de l'année dernière, qui a une nouvelle fois su mener brillamment ses disciples à la victoire !
Il a su réinvestir et améliorer sa stratégie gagnante de l'année dernière.
Adam Y. a écrit:En ce jour de Noël est dressée la grand table ; Friandise et champagne accompagne à l’oubli Et la bûche enivrant dont le goût est affable Resplendit sous l’éclat rutilant des bougies.
Tout convive a pris place et festoie du repas ; Les présents emballés sont légués à autrui. Enjoués, ces gens rient, réjouis de leurs plats ; On entend un grelot résonner dans la nuit.
Félicitations donc à tous les
padawans
en question ayant chacun conçu un élément du dessin final :
Adam Y.
: chandelle
Thomas S.
: bouteille de champagne
Sylvain B.
: bol de chocolats
Alexis M.
: tasse chocolat chaud
Mathis L.
: cadeau de Noël emballé
Justine C.
:
Joyeux Noël
en texte en pixel art
Julien R.
: un calisson
Ilana R.
: couronne de Noël
Coline R.
: truffe en chocolat
Antoine R.
: bouteille de vin
Anna C.
: sucre d'orge
Anthony F.
: cadeau de noel jaune et rouge
Neila S.
: chaussette de noel
Florian G.
: un petit Papa Noël
Robin C.
: houx de Noël
Samuel V.
: un bonhomme de neige
Merlin C.
: un sapin
Ilyas R.
: une bûche de Noël
Raphael C.
: bonhomme en pain d'épice
Raphaël M.
: une horloge digitale qui affiche
20h22
façon
Casio F91W
mais affiché au mur
Sybil L.
: bougie
Matheo L.
: étoile
Aurélien B.
: étoile
Sarah V.
: flocon de neige
Rayan C.
: bonhomme de neige
Romeo B.
: bonnet de Noël
David G.
: oreillettes
Bilal L.
: guirlandes
constance A.
: un saumon sous forme de poisson
Romain L.
: chandelier
Noah M.
: bougies
Chaque élève peut dès maintenant communiquer soit choix de lot. Au menu :
# Participation au jeu concours de Noël 2022 de Casio
from casioplot import * from random import randint
""" Catégorie Classe : Elèves du Lycée Louis Pasteur d'Avignon Professeurs : Vincent ROBERT, Raphaël CLEMENTE Elèves : 31 élèves citées dans ce document, sous la forme Prénom N. https://www.casio-education.fr/actualites/jeu-concours-casio-de-noel/ """
# Des objets préparés et codés en pixel art """ Nous avons découvert lors de l'atelier CRÉER UN JEU VIDÉO AVEC LES CALCULATRICES GRAPHIQUES de novembre 2022 > https://www.casio-education.fr/contenus/creer-un-jeu-video-avec-les-calculatrices-graphiques/ une technique de codage basé sur du pixel Art. Nous remercions à ce propos les animateurs de cet atelier, Xavier Andreani (tiplanet.org) et Sebastien Michelland (planet-casio.com) tant pour la qualité de la présentation que pour l'aide inestimable que cette formation a été pour nous. Une "orange" codée avec cette technique fut envoyé aux élèves. vr_orange_color = { " " : (255, 255, 255), # transparence "#" : (241, 149, 11), # ecorce #f6b26 "." : (247, 178, 107), # anti crénelage #f1950b "A" : (235, 156, 36), # dégradé 1 #eb9c24 "B" : (237, 176, 41), #dégradé 2 #edb029 "C" : (241, 194, 50), # centre #f1c232 } vr_orange_image = [ " .##. ", " ##AA## ", ".#ABBA#.", "#ABCCBA#", "#ABCCBA#", ".#ABBA#.", " ##AA## ", " .##. ",] Les volontaires eurent donc la mission de choisir un objet, de le coder. Chaque élève qui a participé a rendu une liste et un dictionnaire python. Ces deux objets permettent de générer une image. Un groupe de pilotage de 3 élèves et d'un professeur realisa la composition finale : - selectionner les images qui seront dans la composition, - Placer les objets, - Ecrire une histoire, - Ajouter des élèments pour améliorer la cohérence de l'ensemble. Groupe de pilotage : Ilana R., Adam Y, Ilyas R., Vincent ROBERT """
# L'histoire par Adam Y. """ En ce jour de Noël est dressée la grand table ; Friandise et champagne accompagne à l’oubli Et la bûche enivrant dont le goût est affable Resplendit sous l’éclat rutilant des bougies.
Tout convive a pris place et festoie du repas ; Les présents emballés sont légués à autrui. Enjoués, ces gens rient, réjouis de leurs plats ; On entend un grelot résonner dans la nuit. """
# Les images codées par les élèves de ligne 64 à la ligne 1010.
"""================================== Une chandelle par Adam Y. =================================="""
"""======================================================== Une horloge facon casion qui affiche 20:22 par Raphael M. ========================================================""" #20:22, clin d'oeil à 2022 ! :-)
"""========================= Une lanterne par Sybil L. ========================="""
sl_lanterne_color = { " " : (255, 255, 255), # transparence "a" : (111, 102, 102), # acier de la lanterne #6f6666 "s" : (71, 71, 71), # fond de la lanterne #474747 "d" : (255, 218, 172), # dégradé 1 de la bougie #ffdaac "D" : (255, 199, 154), #dégradé 2 de la bougie #ffc79a "b" : (255, 181, 121), # dégradé 3 de la bougie #ffb579 "t" : (40, 37, 37), # tige bougie #282525 "f" : (213, 59, 0), # dégradé bas de la flamme #d53b00 "F" : (193, 53, 0), # dégradé coté clair de la flamme #c13500 "!" : (242, 114, 8), # orange centre bas de la flamme #f27208 ":" : (230, 109, 10), # orange centre haut de la flamme #e66d0a "h" : (167, 46, 0), # dégradé haut de la flamme #a72e00 "?" : (242, 250, 251), # vitre lanterne #f2fafb
}
sl_lanterne_image = [ " aaaaaaaa", " aa aa", "aaaaaaaa a", "a a h a a", "a ah:h a a", "a aF!F a a", "a a f a a", "a adtb a a", "a adDb a a", "a adDb a a", "a adDb a a", "a adDb a a", "a adDb a a", "a sdDbsasa", "assdDbsaa ", "aaaaaaaa ",]
# Participations des élèves : Listing des créations """ Parfois les élèves ont rendu un codage non conforme, Parfois l'image proposée ne s'intégrait pas de manière harmonieuse, Ils ont participé leur production n'a juste pas été sélectionnée pour le dessin final. ==== Liste de tous les élèves participants, image sélectionnée ou pas === 1 Raphaël M Une horloge digitale qui affiche 20h22 façon Casio F91W mais affiché au mur 2 Matheo L étoile 3 Alexis M tasse chocolat chaud 4 Aurélien B étoile 5 Sarah V flocon de neige 6 Adam Y Chandelle 7 Rayan C bonhomme de neige 8 Anthony F cadeau de noel jaune et rouge 9 Florian G Un petit papa noel 10 Neila S chaussette de noel 11 Merlin C Un sapin 12 Justine C Joyeux Noël en texte en PixelArt 13 Romeo B bonnet de noel 14 Ilyas R une buche de Noël 15 Ilana R couronne de noel 16 Robin C Houx de noël 17 Raphael C bonhomme en pain d'épice 18 Mathis L cadeau de noël emballé 19 Sybil L bougie 20 Samuel V un bonhomme de neige 21 Antoine R bouteille de vin 22 David G oreillettes 23 Julien R un calisson 24 Bilal L Guirlandes 25 constance A un saumon sous forme de poisson 26 Anna C sucre d'orge 27 Thomas S Bouteille de champagne 28 Sylvain B bol de chocolats 29 Romain L Chandelier 30 Noah M Bougies 31 Coline R Truffe en chocolat + 2 enseignants ============================== """
# Dessin de l'image sur une Casio Graph 90+E def trace_casio(clr: dict, img: list, x_pos: int, y_pos: int, size: int = 1): img = [list(i) for i in img] for i in range(len(img)): show_screen() for j in range(len(img[i])): if clr[img[i][j]] != (255, 255, 255): for k in range(size): for o in range(size): set_pixel(x_pos+5+j*size+o, y_pos+5+i*size+k, clr[img[i][j]])
# Construction du mur, effet pixel alétoire 4x4 for x in range(0,385): for y in range(0,43): r,g,b = randint(250,255), randint(222,242), randint(210,242) set_pixel(2*x, 2*y, (r,g,b)) set_pixel(2*x+1, 2*y, (r,g,b)) set_pixel(2*x, 2*y+1, (r,g,b)) set_pixel(2*x+1, 2*y+1, (r,g,b))
# Construction de la table, effet pixel aléatoire + degradé. for x in range(0,385): for y in range(82,193): c = 82+y//2+randint(0,8) set_pixel(x, y, (c,c-95,c-130))
pour toutes les créations d'œuvres d'art qu'a induites cette superbe nouvelle édition ; nous avons hâte à la découverte des autres participations et gagnants, ainsi qu'à l'édition de l'année prochaine !
En Allemagne, l'examen de fin d'études secondaires équivalent du Baccalauréat français est l'
Abitur
, après un cursus de 6 à 7 ans selon les Länder au
Gymnasium
, équivalent à la fois du collège et du lycée Français.
Comme tu le vois déjà, il existe des disparités entre les Länder ; l'Allemagne est en effet un Etat fédéral et chacun des 16 Länder est souverain en terme d'éducation.
Un cadre national existe toutefois pour réduire les disparités et lisser la valeur de l'Abitur. On peut citer :
pour la partie politique, la Conférence permanente des ministres de l'Éducation des Länder
(Kultusministerkonferenz ou
KMK
)
pour la partie pédagogique, l'Institut pour le développement de la qualité dans l'éducation
(Institut zur Qualitätsentwicklung im Bildungswesen ou
IQB
)
, basé à Berlin
Depuis la session 2017 pour les épreuves de l'Abitur en Allemand, Anglais, Français et Mathématiques, chacun des Länder puise dans une banque nationale d'exercices publiée sur le site de l'
IQB
.
En Mathématiques, les exercices de la banque peuvent y être de 3 types selon le type d'outil numérique autorisé :
aucun outil numérique
autorisant les seules calculatrices scientifiques
(wissenschaftlicher Taschenrechner ou
WTR
)
autorisant les calculatrices graphiques munies d'un moteur de calcul formel
(
CAS
)
, et jusqu'à présent c'était interprété comme une autorisation entre autres des calculatrices graphiques d'entrée et milieu de gamme non munies d'un tel moteur
(grafikfähige Taschenrechner ou
GTR
)
Si la réglementation locale des Länder ne peut pas passer en autorisant un outil interdit, elle peut toutefois se montrer plus restrictive. Pour référence niveau autorisation des calculatrices pour l'
Abitur
, nous en sommes arrivés aujourd'hui sauf erreur à la situation suivante, par rang de population :
Land
Rang/population
WTR
GTR
CAS
Nordrhein-Westfalen
1er
✔
✔
Bayern
2è
✔
✔
Baden-Württemberg
3è
✔
Niedersachsen
4è
✔
✔
Hessen
5è
✔
✔
Sachsen
6è
✔
✔
Rheinland-Pfalz
7è
✔
✔
✔
Berlin
8è
✔
✔
Schleswig-Holstein
9è
✔
✔
Brandenburg
10è
✔
✔
Sachsen-Anhalt
11è
✔
Thüringen
12è
✔
Hamburg
13è
✔
✔
Mecklenburg-Vorpommern
14è
✔
✔
Saarland
15è
✔
✔
Bremen
16è
✔
✔
✔
Une nouvelle réforme d'uniformisation a été décidée pour une mise en oeuvre à la session 2029 de l'
Abitur
. Elle redéfinit intégralement les outils numériques pouvant être autorisés.
c'est quoi ? Le nouveau sigle y est défini pour l'occasion. C'est un logiciel intégré de mathématiques devant être obligatoirement capable de fournir entre autres les fonctionnalités suivantes :
résolution d'équations et systèmes d'équations
(numérique et littéral)
dérivée et intégration de fonctions
(numérique et littéral)
limites de fonctions
représentation graphique de fonctions
(avec possibilité de faire varier un paramètre, de déterminer numériquement les zéros, les coordonnées d'extrema, les coordonnées de points d'intersection)
opérations arithmétiques de base sur les matrices et vecteurs
(littéral)
transformations de matrices
(opérations sur les lignes par exemple)
inversion de matrices
calcul de probabilités pour des distributions binomiales et normales
(fonction de répartition et probabilités cumulées)
tableur et feuille de calculs
représentation graphique de données par des diagrammes
La simple calculatrice graphique d'entrée ou milieu de gamme que nous connaissons devient donc interdite.
Les calculatrices graphiques haut de gamme peuvent a priori répondre à cette nouvelle définition et donc rester autorisées. Mais note bien qu'il s'agit désormais d'une définition logicielle. Les calculatrices haut de gamme seront a priori en compétition directe avec des logiciels et applications intégrés de Mathématiques tournant sur
Précisons toutefois qu'à côté de cela sont interdites les fonctionnalités suivantes :
représentation graphique d'objets géométriques
applications spécifiques de fonctions élémentaires
(résolution d'équations, fonction dérivée première ou seconde)
en relation avec des définitions ou formules mathématiques
(fonctions spécifiques pour déterminer les zéro de certaines fonctions, équations de tangentes à une courbe, longueur d'une courbe, aires et volumes d'objets géométriques, équation d'un plan à partir des coordonnées de trois points, angle entre deux vecteurs, écart type d'une variable aléatoire, détermination de la valeur d'un paramètre d'une distribution aléatoire à partir de données)
En Rhénanie-du-Nord-Westphalie, on a décidé de ne pas attendre 2029. Les calculatrices graphiques d'entrée et de milieu de gamme y seront donc autorisées pour la toute dernière fois à la session 2025.
Les nouvelles règles y seront en effet appliquées dès la session 2026 de l'Abitur. Pour accompagner ce changement, le simple calculatrice scientifique sera également autorisée.
En Allemagne, l'examen de fin d'études secondaires équivalent du Baccalauréat français est l'
Abitur
, après un cursus de 6 à 7 ans selon les Länder au
Gymnasium
, équivalent à la fois du collège et du lycée Français.
Comme tu le vois déjà, il existe des disparités entre les Länder ; l'Allemagne est en effet un Etat fédéral et chacun des 16 Länder est souverain en terme d'éducation.
Un cadre national existe toutefois pour réduire les disparités et lisser la valeur de l'Abitur. On peut citer :
pour la partie politique, la Conférence permanente des ministres de l'Éducation des Länder
(Kultusministerkonferenz ou
KMK
)
pour la partie pédagogique, l'Institut pour le développement de la qualité dans l'éducation
(Institut zur Qualitätsentwicklung im Bildungswesen ou
IQB
)
, basé à Berlin
Depuis la session 2017 pour les épreuves de l'Abitur en Allemand, Anglais, Français et Mathématiques, chacun des Länder puise dans une banque nationale d'exercices publiée sur le site de l'
IQB
.
En Mathématiques, les exercices de la banque peuvent y être de 3 types selon le type d'outil numérique autorisé :
aucun outil numérique
autorisant les seules calculatrices scientifiques
(wissenschaftlicher Taschenrechner ou
WTR
)
autorisant les calculatrices graphiques munies d'un moteur de calcul formel
(
CAS
)
, et jusqu'à présent c'était interprété comme une autorisation entre autres des calculatrices graphiques d'entrée et milieu de gamme non munies d'un tel moteur
(grafikfähige Taschenrechner ou
GTR
)
Si la réglementation locale des Länder ne peut pas passer en autorisant un outil interdit, elle peut toutefois se montrer plus restrictive. Pour référence niveau autorisation des calculatrices pour l'
Abitur
, nous en sommes arrivés aujourd'hui sauf erreur à la situation suivante, par rang de population :
Land
Rang/population
WTR
GTR
CAS
Nordrhein-Westfalen
1er
✔
✔
Bayern
2è
✔
✔
Baden-Württemberg
3è
✔
Niedersachsen
4è
✔
✔
Hessen
5è
✔
✔
Sachsen
6è
✔
✔
Rheinland-Pfalz
7è
✔
✔
✔
Berlin
8è
✔
✔
Schleswig-Holstein
9è
✔
✔
Brandenburg
10è
✔
✔
Sachsen-Anhalt
11è
✔
Thüringen
12è
✔
Hamburg
13è
✔
✔
Mecklenburg-Vorpommern
14è
✔
✔
Saarland
15è
✔
✔
Bremen
16è
✔
✔
✔
Une nouvelle réforme d'uniformisation a été décidée pour une mise en oeuvre à la session 2029 de l'
Abitur
. Elle redéfinit intégralement les outils numériques pouvant être autorisés.
c'est quoi ? Le nouveau sigle y est défini pour l'occasion. C'est un logiciel intégré de mathématiques devant être obligatoirement capable de fournir entre autres les fonctionnalités suivantes :
résolution d'équations et systèmes d'équations
(numérique et littéral)
dérivée et intégration de fonctions
(numérique et littéral)
limites de fonctions
représentation graphique de fonctions
(avec possibilité de faire varier un paramètre, de déterminer numériquement les zéros, les coordonnées d'extrema, les coordonnées de points d'intersection)
opérations arithmétiques de base sur les matrices et vecteurs
(littéral)
transformations de matrices
(opérations sur les lignes par exemple)
inversion de matrices
calcul de probabilités pour des distributions binomiales et normales
(fonction de répartition et probabilités cumulées)
tableur et feuille de calculs
représentation graphique de données par des diagrammes
Les calculatrices graphiques haut de gamme peuvent répondre à cette nouvelle définition et donc rester autorisées.
Mais note bien qu'il s'agit désormais d'une définition logicielle. Les calculatrices haut de gamme seront a priori en compétition directe avec des logiciels et applications intégrés de Mathématiques tournant sur
applications spécifiques de fonctions élémentaires
(résolution d'équations, fonction dérivée première ou seconde)
en relation avec des définitions ou formules mathématiques
(fonctions spécifiques pour déterminer les zéro de certaines fonctions, équations de tangentes à une courbe, longueur d'une courbe, aires et volumes d'objets géométriques, équation d'un plan à partir des coordonnées de trois points, angle entre deux vecteurs, écart type d'une variable aléatoire, détermination de la valeur d'un paramètre d'une distribution aléatoire à partir de données)
Or les calculatrices graphiques haut de gamme disposant du calcul formel, sont également toutes munies d'une application de géométrie dynamique.
Sur la haut de gamme
TI-Nspire
et
HP Prime
a priori pas de problème, car il est possible de configurer le mode examen, et donc de désactiver les fonctionnalités interdites dont l'application de géométrie dynamique.
Par contre, il y avait un problème avec
Casio
et sa
fx-CP400
.
Ici le mode examen n'était jusqu'à présent pas configurable, et l'application de géométrie ne faisait pas partie des fonctionnalités bloquées.
Et bien bonne nouvelle,
Casio
a discuté avec l'
IQB
pour proposer une solution, et cette dernière a été acceptée.
La
fx-CP400
va bénéficier d'une mise à jour avec un mode examen conforme pour l'Allemagne. Nous nous attendons soit à un nouveau mode examen allemand en plus de celui que nous connaissons déjà, soit à l'ajout de la possibilité de configurer le mode examen.
Selon l'
IQB
, la
fx-CP400
dans ce mode examen sera bien conforme par rapport à la définition de l'outil
en édition limitée pour votre calculatrice. Si vous êtes chanceux(se) et avez su vous montrer assidu(e), alors vous devriez avoir pu vous constituer une formidable collection. En plus des éditions spéciales ci-contre, voici les coques du mois par ordre chronologique :
En ce début de Février,
NumWorks
vous propose de gagner sa toute nouvelle coque du mois, évoquant
Pour participer au tirage au sort, c'est très simple ; à partir des liens précédents et d'ici la date limite indiquée, il vous suffit sur le réseau social de votre choix de :
vous abonner au compte du constructeur
aimer la publication
partager la publication sur le même réseau
(retweet, story, ...)
répondre en mentionnant 1 ami
(tag, identification, ...)
N'hésitez pas à participer sur les différents comptes sociaux associés à votre zone géographique afin de maximiser vos chances.
Since the beginning of the 2020 school year,
NumWorks
has been releasing a limited edition of cases for your calculator every month. If you're lucky enough, you may have built up a great collection. Here are the cases of the month in a chronological order (without forgetting the special editions):
This month,
NumWorks
created a special edition of its calculator cases by getting inspired by
Valentine's Day
. They've made some posts on their social media accounts to announce the beginning of the contests. It's a chance for you to win the special/rare prize
ou son émulateur ton menu de Noël, avec 2 catégories au choix :
catégorie
étudiants
: pour les participations individuelles d'élèves de collège ou lycée
catégorie
classe
: pour les participations collectives de classes de collège ou lycée
Pour réaliser ton dessin, tu pouvais choisir entre les 2 technologies suivantes :
calculatrice scientifique
fx-92+ Spéciale Collège
avec son application
Algorithmique
t'offrant un langage de tracé à la
Scratch/Logo
calculatrice graphique
Graph 35+E II
ou
Graph 90+E
avec son application
Python
Pour chacune des 2 catégories étaient à gagner 2 superbes gros lots ; 1 pour le meilleur dessin sur
fx-92+ Spéciale Collège
, et 1 pour le meilleur dessin sur
Graph 90/35+E II
:
catégorie
étudiants
: 1
enceinte
JBL Charge 3
ou 1
appareil photo
Instax
avec pack de recharge photos
(valeur
130€
)
catégorie
classe
:
pour le professeur : 1
service à raclette
(valeur
30€
)
pour chaque élève du groupe : 1
montre
Casio
ou 1
enceinte
JBL Go
(valeur
30€
)
(dans la limite de 35 élèves)
Et en prime avec
Casio
, pas de perdant : lot de
goodies
Casio
pour tous les autres participants !
Un superbe concours, merci
Casio
!
Nous avions très hâte de pouvoir te présenter les productions réalisées que nous espérions à la mesure de l'événement. Plusieurs candidats nous les ont fort aimablement partagées, découvrons tout cela ensemble.
, en précisant bien sûr que c'était pour le plaisir. Je ne souhaite en effet piquer de gros lot à personne.
J'ai donc l'honneur et l'immense plaisir de vous partager ma participation finale comme promis, préparée avec soin un petit peu chaque jour à compter de début décembre. J'ai pris soin de ne pas dépasser les
300
lignes avec pour chacune au plus
256
caractères, afin que le script reste visualisable dans l'éditeur
Python
de la
Graph 90+E
.
(c'est toutefois du concentré, et ce n'est pas demain la veille qu'il tournera sur les modèles de milieu de gamme concurrents... )
L'année dernière je t'avais conçu non pas un simple dessin, mais une animation déplaçant diverses images à l'écran.
Cette année il ne s'agit ni d'un simple dessin, ni d'une simple animation, mais d'une véritable scène 3D dans laquelle tu te déplaces. Le script, utilisant la bibliothèque de tracé par pixels
casioplot
, t'emmenène littéralement réveillonner au chalet au fin fond de la forêt, que j'ai soigneusement préparé pour te recevoir
(arbre de Noël, guirlandes à LEDs RVB, vase de fleurs)
et te sustanter
(foie gras, dinde, bûche, bûche, corbeille de fruits, bonhomme en pain d'épice)
.
Pour cela le script joue une animation aléatoire en utilisant un moteur 3D que j'ai codé pour l'occasion, basé sur la technique du point de fuite.
from random import randint from casioplot import set_pixel, show_screen, draw_string, clear_screen from math import sin, cos, pi, sqrt, log, ceil W, H = 384, 192 # FENETRE GRAPHIQUE PYTHON GRAPH 90+E
# EXTENSION CASIOPLOT (FONCTIONS DE DESSIN DE PRIMITIVES) def draw_line(x1, y1, x2, y2, c): m, a1, b1, a2, b2 = 0, round(x1), round(y1), round(x2), round(y2) if (x2 - x1) ** 2 < (y2 - y1) ** 2: m, a1, a2, b1, b2 = 1, b1, b2, a1, a2 if min(a1, a2) != a1: a1, b1, a2, b2 = a2, b2, a1, b1 for a in range(max(0, a1), min(m and H or W, a2 + 1)): b = round(b1 + (b2 - b1) * (a - a1) / ((a2 - a1) or 1)) set_pixel((a, b)[m], (b, a)[m], c)
def fill_rect(x, y, w, h, c): if w<0: x, w = x + w + 1, -w if h<0: y, h = y + h + 1, -h x1, y, x2, y2 = max(0, round(x)), max(0, round(y)), min(W - 1, round(x) + w), min(H - 1, round(y) + h) for y in range(y, y2 + 1): for x in range(x1, x2 + 1): set_pixel(x,y,c)
def fill_trapeze_horizontal(ya, x1a, x2a, yb, x1b, x2b, c): if abs(yb - ya) < 1: return if yb < ya: ya, x1a, x2a, yb, x1b, x2b = yb, x1b, x2b, ya, x1a, x2a for y in range(max(0, ya), min(H, yb + 1)): xt1, xt2 = interp(x1a, x1b, ya, yb, y), interp(x2a, x2b, ya, yb, y) if xt1 >= xt2: break fill_rect(xt1, y, xt2 - xt1 + 1, 1, c)
def fill_trapeze_vertical(x1, y1a, y1b, x2, y2a, y2b, c): if x2 == x1: return if x2 < x1: x1, y1a, y1b, x2, y2a, y2b = x2, y2a, y2b, x1, y1a, y1b for x in range(max(0, x1), min(W, x2 + 1)): yta, ytb = interp(y1a, y2a, x1, x2, x), interp(y1b, y2b, x1, x2, x) fill_rect(x, yta, 1, ytb - yta + 1, c)
def draw_ellipse(x, y, rx, ry, c, fill=0): dx, dy, rmin, rmax, w, h = rx >= ry, rx < ry, min(rx, ry), max(rx, ry), 0, 0 while h <= ry and w <= rx: d = rmin * sqrt(1 - ((w + h) / rmax)**2) for sy in range(-1, 2, 2): for sx in range(-1, 2, 2): if fill: fill_rect(x + sx*w, y + sy*h, sx*dy*d or 1, sy*dx*d or 1, c) else: set_pixel(round(x + sx*w + sx*dy*d), round(y + sy*h + sy*dx*d), c) w, h = w + dx, h + dy
# COULEURS ET FONCTIONS C_SOL_INT, C_FOND_INT = (170, 96, 40), (234, 234, 234) def darker_color(c): return [v // 2 for v in c] def hsv_2_rgb(h, s=1, v=1): c, h = v * s, (h % 1) * 6; m, x = v - c, c * (1 - abs((h % 2) - 1)) return [round((v + m) * 255) for v in (h<1 and (c, x, 0) or h<2 and (x, c, 0) or h<3 and (0, c, x) or h<4 and (0, x, c) or h<5 and (x, 0, c) or (c, 0, x))]
# FONCTIONS DE DESSIN SPECIFIQUES SCENE 3D RENDUE def draw_mur(droite=0): x_pplan_piece, y1_pplan_piece, y2_pplan_piece, x_pplan_fenetre, y1_2plan_piece, y2_2plan_piece = getx(I_PIECE_PP, droite), gety(I_PIECE_PP, 0), gety(I_PIECE_PP, 1), getx(I_WIN_PP, droite), gety(I_WIN_PP, 0), gety(I_WIN_PP, 1) x_dplan_fenetre, y1_3plan_piece, y2_3plan_piece, x_dplan_piece, y1_dplan_piece, y2_dplan_piece, c = getx(I_WIN_DP, droite), gety(I_WIN_DP, 0), gety(I_WIN_DP, 1), getx(I_PIECE_DP, droite), gety(I_PIECE_DP, 0), gety(I_PIECE_DP, 1), (217, 217, 217) if droite and x_dplan_piece > x_pplan_piece or not droite and x_dplan_piece < x_pplan_piece: c = darker_color(c) fill_trapeze_vertical(x_pplan_piece, y1_pplan_piece, y2_pplan_piece, x_pplan_fenetre, y1_2plan_piece, y2_2plan_piece, c) fill_trapeze_vertical(x_dplan_fenetre, y1_3plan_piece, y2_3plan_piece, x_dplan_piece, y1_dplan_piece, y2_dplan_piece, c) if x_pplan_fenetre != x_dplan_fenetre: y1a_fenetre, y1b_fenetre, y2a_fenetre, y2b_fenetre, x = repos(y1_2plan_piece, y2_2plan_piece, .125, .375) + repos(y1_3plan_piece, y2_3plan_piece, .125, .375) + ((x_pplan_fenetre + x_dplan_fenetre) / 2,) fill_trapeze_vertical(x_pplan_fenetre,y1_2plan_piece,y1a_fenetre,x_dplan_fenetre,y1_3plan_piece,y2a_fenetre,c) fill_trapeze_vertical(x_pplan_fenetre,y1b_fenetre,y2_2plan_piece,x_dplan_fenetre,y2b_fenetre,y2_3plan_piece,c) draw_line(x, (y1a_fenetre + y2a_fenetre) / 2, x, (y1b_fenetre + y2b_fenetre) / 2, c) draw_line(x_pplan_fenetre, (y1a_fenetre + y1b_fenetre) / 2, x_dplan_fenetre, (y2a_fenetre + y2b_fenetre) / 2, c)
def draw_pancarte(x, y, txt, ctext, cfont, taille): x, y, LH_POLICE = round(x), round(y), {"small":8, "medium":14, "large": 20}; y = y - LH_POLICE[taille] draw_string(x, y, txt, ctext, taille)
def draw_haie(img, pal, w, h, z, i, gd = 0): x, dx, pancarte = getx(i, 1) - w*z, w * z * 2 * sqrt((i + 1) / i), 0 while x > -w*z + 1: x -= dx while x <= W - 1: if not gd or gd <= 0 and x + w*z < getx(i, 0) or gd >= 0 and x > getx(i, 1): draw_image(img, x, gety(i, 1) - z*h, w, pal, zoomx=z, zoomy=z) if not pancarte and gd == 1 and i in (I_TREE3B, I_TREE2B, I_TREE1B): draw_pancarte(x + 2*w*z/3, gety(i, 1),"CASIO",(0,0,191),(255,255,255),{I_TREE3B:"large",I_TREE2B:"medium",I_TREE1B:"small"}[i]) pancarte = 1 x += dx
def draw_foret(gauchedroite = 0): if gauchedroite: l=((D_SAPINM,C_SAPINM,L_SAPINM,H_SAPINM,1,I_TREE1M),(D_SAPING,C_SAPING,L_SAPING,H_SAPING,1,I_TREE1B),(D_SAPING,C_SAPING,L_SAPING,H_SAPING,2,I_TREE2B),(D_SAPING,C_SAPING,L_SAPING,H_SAPING,3,I_TREE3B)) for v in l: draw_haie(v[0], v[1], v[2], v[3], v[4], v[5], gauchedroite) else: draw_haie(D_SAPINP, C_SAPINP, L_SAPINP, H_SAPINP, 1, I_TREE1S, gauchedroite)
def draw_murforet(gauchedroite=0): l = [gauchedroite == -1, gauchedroite == 1] for v in getx(I_PIECE_PP, gauchedroite == 1) < getx(I_PIECE_DP, gauchedroite == 1) and l.reverse() or l: if v: draw_mur(gauchedroite == 1) # mur + fenetre else: draw_foret(gauchedroite) # foret
def draw_guirlande(y, x1, x2, n, h): x1, x2 = round(min(x1, x2)), round(max(x1, x2)); w = x2 - x1 + 1 for x in range(max(0, x1), min(W, x2 + 1)): set_pixel(x, round(y + h*abs(sin((x - x1) * n * pi / w))), hsv_2_rgb((x2 - x) / w))
def draw_table(y_pplan, y_dplan, h_pplan, h_dplan): x1_pplan_table, x2_pplan_table, x1_dplan_table, x2_dplan_table = repos(getx(I_TABLE_PP,0),getx(I_TABLE_PP,1),.175,.175) + repos(getx(I_TABLE_DP,0),getx(I_TABLE_DP,1),.175,.175); y_dplan, y_pplan, c = y_dplan - h_dplan, y_pplan - h_pplan, (159, 50, 52) draw_guirlande(y_dplan + 1, x1_dplan_table, x2_dplan_table, 5, h_dplan / 4) # guirlande a la table en arriere plan fill_trapeze_horizontal(y_dplan, x1_dplan_table, x2_dplan_table, y_pplan, x1_pplan_table, x2_pplan_table, y_dplan > y_pplan and darker_color(c) or c) # table lxy = ((x1_pplan_table, y_pplan), (x2_pplan_table, y_pplan), (x1_dplan_table, y_dplan), (x2_dplan_table, y_dplan)) for k in range(len(lxy)): # pieds de la table xy, t = lxy[k], k >= len(lxy) // 2 w, h = t and 1 or 3, t and h_dplan or h_pplan fill_rect(xy[0] - ((k % 2) and w - 1), xy[1] + 1, w, h, (127, 127, 127)) draw_guirlande(y_pplan + 1, x1_pplan_table, x2_pplan_table, 5, h_pplan / 5) # guirlande a la table au premier plan
def draw_repas(): l = (I_ROW1, I_ROW2, I_ROW3, I_ROW4, I_ROW5, I_ROW6, I_ROW7) rx_assiette, ry_assiette = round((getx(I_TABLE_PP, 1) - getx(I_TABLE_PP, 0)) / 8), round((gety(I_TABLE_PP, 1) - gety(I_TABLE_DP, 1)) / 14) lobj=((),(),((D_OIEP,L_OIEP,H_OIEP,C_OIEP,1,0),(D_VIN,L_VIN,H_VIN,C_VIN,0,-2)),((D_OIEC,L_OIEC,H_OIEC,C_OIEC,-3,0),(D_BUCHET,L_BUCHET,H_BUCHET,C_BUCHET,0,1)),((D_BISCUIT,L_BISCUIT,H_BISCUIT,C_BISCUIT,0,0),(D_CHAMPAGNE,L_CHAMPAGNE,H_CHAMPAGNE,C_CHAMPAGNE ,0,-2)),((D_FOIE,L_FOIE,H_FOIE,C_FOIE,0,0),(D_BUCHE,L_BUCHE,H_BUCHE,C_BUCHE,4,1)),((D_OIEG,L_OIEG,H_OIEG,C_OIEG,2,0),(D_FRUITS,L_FRUITS,H_FRUITS,C_FRUITS,0,-2),(D_VASE,L_VASE,H_VASE,C_VASE,0,-1))) for k in range(len(l)): i = l[k] y_assiette, x1_assiette, x2_assiette = gety(i, 1), getx(i, 0), getx(i, 1); z, y_assiette = L_ZFACT[i]/L_ZFACT[I_ROW7], y_assiette - (gety(i, 1) - gety(i, 0))*26//100 lx_ext, lx_int = repos(x1_assiette, x2_assiette, (k % 2) and 1 / 3 or .25, (k % 2) and 1 / 3 or .2), repos(x1_assiette, x2_assiette, .5) lx = ((k % 2) and lx_ext or lx_int) + ((k % 2) and lx_int or lx_ext) for x in lx[:1 + (k % 2)]: draw_ellipse(x, y_assiette, rx_assiette * z, ry_assiette * z, (255, 255, 255), 1) draw_ellipse(x, y_assiette, rx_assiette * z, ry_assiette * z, (0, 0, 0)) for obj in lobj[k]: draw_image(obj[0], lx[obj[5]] - obj[1]/2 + obj[4], y_assiette - obj[2] + 1, obj[1], obj[3]) if k < I_LUSTRE and k + 1 < len(l) and l[k + 1] > I_LUSTRE: y_lustre, x1_lustre, x2_lustre = (gety(I_LUSTRE, 0),) + repos(getx(I_LUSTRE, 0), getx(I_LUSTRE, 1), .5) # lustre au plafond draw_image(D_LUSTRE, x1_lustre - L_LUSTRE//2, y_lustre, L_LUSTRE, C_LUSTRE)
def fuite(ai,bi1,bi2,af,bf,lz): ai, af, bf = round(ai), round(af), round(bf) if ai == af: return ((ai, bi1, bi2),) * len(lz) l, da, iz = [], ai < af and 1 or -1, 0 for a in range(ai, af + da, da): bt1, bt2 = interp(bi1, bf, ai, af, a), interp(bi2, bf, ai, af, a) while iz < len(lz) and (bt2 - bt1) / (bi2 - bi1) <= lz[iz]: l.append((a, bt1, bt2)) iz += 1 if iz >= len(lz): break return l
def getx(iz, k): if defil_vert: return (k and lx2y or lx1y)[iz][0] else: return (abs(ly1x[I_PIECE_DP][0] - ly1x[I_PIECE_PP][0]) >= abs(ly2x[I_PIECE_DP][0] - ly2x[I_PIECE_PP][0]) and ly1x or ly2x)[iz][1 + k]
def gety(iz, k): if not defil_vert: return (k and ly2x or ly1x)[iz][0] else: return (abs(lx1y[I_PIECE_DP][0] - lx1y[I_PIECE_PP][0]) >= abs(lx2y[I_PIECE_DP][0] - lx2y[I_PIECE_PP][0]) and lx1y or lx2y)[iz][1 + k]
# IMAGES - converties sur : https://tiplanet.org/forum/img2calc/?mode=script&target=cg def draw_image(rle, x0, y0, w, pal, zoomx=1, zoomy=1): x0, y0, nbits, i, x = round(x0), round(y0), ceil(log(len(pal), 2)), 0, 0; maskval, maskcnt = (1 << nbits) - 1, (0xFF >> nbits >> 1) << nbits while i<len(rle): v = rle[i]; mv, c = v & maskval, (v & maskcnt) >> nbits if (v & 0b10000000): i += 1; c |= rle[i] << (7 - nbits) c += 1 while c: cw = min(c, w - x) if mv: col = pal[mv] for l in range(0, zoomy, zoomy < 0 and -1 or 1): for k in range(cw): for p in range(0, zoomx, zoomx < 0 and -1 or 1): set_pixel(x0 + (x + k)*zoomx + p - (zoomx < 0), y0 + l - (zoomy < 0), col) c, x = c - cw, (x + cw) % w y0 += x == 0 and zoomy i += 1
# sapin decore - retouche a partir de : https://kandipatterns.com/patterns/holidays/christmas-tree-26865 L_SAPIND,H_SAPIND,C_SAPIND,D_SAPIND=29,35,(0,(248,192,0),(0,120,0),(64,208,0),(240,248,232),(168,144,128),(232,0,0),(0,96,248),(128,0,248),(0,48,0),(64,0,0),(152,64,16)),(b'\xd0\1\1\x90\3A\x80\3!\x90\3\1\2\1\x90\3"\x90\3\3\2\3\4\5\xd0\2\1C\xd0\2\25\24#\4' b'\xd0\2\2T\5\xc0\2\26\3\4\3\5\2\21\x90\2\23\26#\4\23\1\x80\2\2\x93\1\4\5\x80\2\2\23\25D\5\22\xd0\1\a\4C\25\27\3\5\3\xd0\1\2\5$C\x173\21\x90\1\30\2\25\xf4\0\5\23\2\21\x90\1\b\23\2\3\4\5\24%\4#\4\3\x90\1\t\2\4#\4\3\5\30C$\5\x90\1\t\5\24\3\5\23\30#\24\25\t' b'\xb0\1\2\5\4C\25$\5#\4\5\xf0\0\xe3\1\22\24\5\xf0\x003\2\3\5D\5\3\2\3\2\5C@\t\2\3\26\3\22\25\4\5\xa3\1\2\t@\t\2\26\23\t\xf3\0\26\3\2\23\2\t\21\20\27\31\22\xf3\0"\26\t\3\2)\21\20\a\2\39\2\23\x023\29S \t\2c\21"\30\x93\1\2\0)\3\2\21#\21\23\t\30\3\2#\22\23' b'\2\t\20\t\22\t\21\x023\22#\2\t\2\3\2i\20\2I\2\3\22\31\22\3)\229\27\t\20)\0\31\22)\27\t\29\2\20\31\27\20\31@\2)\n\27" \31\xd0\1\t\20\v*\2\n\v\xd0\2k\xe0\2K\xb0\1') # lustre - retouche a partir de : https://www.deviantart.com/almondkinomotovs/art/Pixel-art-vintage-2-c-447280129 L_LUSTRE,H_LUSTRE,C_LUSTRE,D_LUSTRE=30,34,(0,(192,180,24),(224,208,40),(248,252,144),(248,252,168),(248,252,0),(248,0,112),(200,176,80)),(b'H!\2!\xb0\1\21\xd8\1\1\xe0\1\1\xe0\1\1\xe0\1\1\xe0\1\1\xe0\1\1\xe0\1\1\xb0\1\3 \1 \4\xf8\0\3\5\3\30\1\30\4\5\48' b'\x040\6 \1 \6(\3\0\4\5\4(\6 \1 \6 \3\5\3\0\x060\6 \1 \6(\6\b\x060\2 \1 \2(\6\b\6\20\4\20\a\30\21\30\1\20\3\b\6\b\2\b\4\5\4\b\17\20\21\30\1\b\3\5\3\0\2\b\1\20\6\30\1\b\t\2\t\b\t\20\6\b\1\0\1\30\6 \31\2!\30\6\20\t\30\2(\2\1\22\1\2(\2\20\21\30\2\b\22\1\1' b'"\22\b\2\20\t\0\t\30\n\b\t\0\1\2\1\0\t\b\n\30\1\20\t(\t\0\t\2\t\0\t(\t\309\b\1\0\2\0\1\b9`\t\b\2\b\t\x90\1\5\2\1\20\2\20\1\2\5\xa0\1"\xc8\1\22\xd8\1\4\xd8\1\4\5\4\xc8\1\4\25\4\xc0\1\4\25\4\xc8\1\4\5\4\xd8\1\4h') # grand sapin - retouche a partir de : https://www.reddit.com/r/PixelArt/comments/zbp65h/a_snowy_tree/ L_SAPING,H_SAPING,C_SAPING,D_SAPING=57,71,(0,(144,172,184),(184,192,200),(208,216,216),(240,244,240),(0,44,48),(32,76,40),(0,28,48),(128,148,72),(64,112,32),(104,128,160),(16,24,64),(48,48,40),(48,56,40),(88,56,72),(120,84,88)),(b"\xb0\3\21\xe0\6\1\2\1" b"\xd0\6\1\2\1\xd0\6\1\2\1\xd0\6\1\3\2\1\xb0\6\1\4\3\22\1\xa0\6\1\4\23\2\1\x90\6\1\x043\21\xe0\5\21\x043\1\3!\xa0\5!\4\3\22\23\1#\21\xa0\5\1\22\3\22\23!\3\1\xb0\5\x012\23\21\5\21\xd0\5\21\2#\21\6\5\a\xc0\5\1\6\5A\5\6\25\a\xb0\5\1\b\x065\26\t\6\5\a\xa0\5" b"\21\22\t&\t2\21\xf0\4!#\29\x023\2\21\xc0\4\1\3\4\1#Bc\2\1\xb0\4\1\4C\2\xb3\1\1\xc0\4\21#\22C\2C\1\xd0\4\5\1\23\22C\22C\1\xb0\4\21\25\21\2C\"#\21\aa\x80\3A\32\25\n\x023\1\n\1#\1\25C\21\xa0\3:\25\26\5A\n\x151\x053!\xd0\3\25\b)\6\5:\x95\x011\xe0\3\a\b\t\b" b"\tF\25\26\5V\25\1\27\v\xa0\3%\b\t\b\31&\t\x96\1\5\x165\27\x90\3\25(\31\269\26)6\25&\25\a\xb0\3\5\b\31&I\69F\25&\a\xd0\3\a\31\26\t2)\3)\6\t\26\5\21&\a\xd0\3%\t\22#)\23)\21\6\1\23\21\6\5\a\x80\x031\5\2\25\2C\x023\31\23\x013\2\1\26'\xc0\2\21\x143\2S\x023" b"\6\t\23\x023\2\x016\a\xc0\2\21\3\22\x93\1\x023\6\t\23\2\21\23\22\1\26\a\xe0\2\5\21\22\1c\x123\26#\2\21\"\1\6\a\x90\3\25\t\1#\2\23\22\1\23\2\23\6\1\23\2\1\6!\6\a\x80\3\25\b\6\5\1\23\22\3\22\1\2\23\"\1\6\1\3\1\6\aF\a\xc0\2\25(&\1\3\22\23\1\27\2#\21\27\6" b"\1\26\27&\a\5\27\xe0\1\5\a\25(F\x012\3\1\5\a\1\23\x015\27\6\a\25'%\1'\xa0\1\25\b\x143\26\3\2\6\21\2\21\25\26!\x056\5\a\5&\25\6%!7\xf0\0\5\t\2c\2\26\25\1\25\6\t\26\1\25V\25\xf6\x005\21\n\a\x80\1\5\t\x123\2\x016\5)&\x056)V2\21\6%\n\27\x80\1\25\t\1\2\23" b"\21&I\x86\19FR\1%\27\xb0\1\5A\6\x013)\6\31\6\x196I\6\x191\2\21\5\a\v\xc0\1\v\x051\6\x013\1\t\26\t\2Y&)\6)&1\5\a\v\xa0\1\27\6G\6\1#\1\t\26\31\"\t\2)&\31\269\26\25'\x90\1\33\30\6\x026\aA\6\a\v\t\2#\2\3\tV\t\6\t\5'\t\6\5\a\5'@\v'\30\31\2\3\1&\5\a67\x013" b"\21G&\31\27\5'5' \v(\t\21\2#\1\26\x157\26\5\a\t\1\23\21\27\5\6\5'6\a\25\6\25\26\5W\0\27\31!#\2\1\x86\1\25\27\21\6\a\x056%G\5&\t\1\n\6\n\a\6\25\a \a\31\6\1#\2\1\tF\x196\5'\5&\t6U\6\31!*\6\5\a0\a\t\6\t\1\23\22\1\31&\t\21V\25\26\t\6\31\x96\1\t\21\n\1\32\6" b"\5\a@\a\26\t\21\22\21\31\6!\2\1\31f\21\6I6\tA*\25\27P\a)\6\21)\26\1\23\2\1961\x99\1A\n%\a\xf0\0\27\26I\26\1\23\22\1\31\26\5\26\2Q\6\31\6\t&1\n%\a\xa0\1\27F\31\x061\31\26\5\26\2aV\5&\1\n\25\27\xd0\1\v\27\5\31\696\25\26!\x95\1\6\5\a\25\26\5\a\xa0\2\a\26Y" b"\26\25&\21\5'\25'5\27%\27\xa0\2\xf7\0\26\5\x176\5\27\34\a\5\a\x1c7\20'\xb0\3\a\6\x057\26\5\27<\27\34\v\xb0\4'\0\a\x1c7\xfc\0\a\x80\5\a\34=\16\f\16\f\16,\a\x80\5\a.,.\f\16\34\a\x90\5\a\36\17N\34.\f\a\x80\5\a\36\37>\34\36\34\a\x80\5\a\36/.\34\36\34\a\xf0" b"\4\a./\16\37\16\f\36\34\a\xf0\4\a\36/\36\37\16\f.\34\a\xd0\4\27\36/\36\37\16\f\36,\a\xe0\4\r\f\36\37\xfe\0,\xb0\5N\34\16\34\xd0\2") # moyen sapin # retouche a partir de https://www.reddit.com/r/PixelArt/comments/zljrsx/some_variations_of_firtree/ L_SAPINM,H_SAPINM,C_SAPINM,D_SAPINM=50,57,(0,(80,104,176),(184,192,208),(184,192,200),(48,80,120),(128,152,192),(168,184,208),(160,180,216),(24,52,32),(40,76,64),(32,92,80),(32,84,72),(128,156,192),(40,108,80),(72,116,88)),(b'\xe0\2\21\xf0\5\1\2\1\xe0\5' b'\1\2\1\xd0\5\1\2\3\1\xc0\5\4"\3\1\xb0\5\4\23\5\2\3\1\xb0\5\4\25"\1\x90\5\4\25\6\2\5\2\3\1\x80\5\4\26\a\3\6\5\24\xf0\4\1\27\x062\4\x80\5\1b\5\1\xe0\4\1B\5\23\5\1\xe0\4\1B\6%\6\1\xc0\4\1\3B\a6\1\xc0\4\1\22\x052\a\26\2\6\1\xa0\4\1\6\25\aB\23\22\1\x90\4' b'\x016\2\3\xf2\0\3\1\xf0\3\1\22&\3R\6\3\22\3\1\xc0\3\21"\3&\3B\6\1\3"\1\xa0\3\1\5B\5\26\5R\1\x052\21\x80\3\1\x057\5&\1\22\5"\5\1\5"\25\1\x80\3\1\5\26\1\26\a\1\b!\2\3\2\5!5\1\x90\x031\25\18\1\2\3\1\25Q\xa0\38\21X!\25\1\30\xc0\3\x88\1)8\218\xa0\3\30\t\n\v' b'\t(\t\32\v\th\t\30\xf0\2\24\bJ)Z\v8\t\32\30\4\xa0\x024\b\5\34:\31Z\25)*\v\b$\x80\x024\f\3\x125\31\25\f\32\f%\31\32\34\5\bD\xe0\1\24\f"\a\23\6\f\t\5\22\3\f\n\f\23\2\f\31\f\3\22\fD\xd0\1\1\6\22\3B\26\fB\1\22\3\22\3\f\x032%\1\xe0\1\x016\5"&\fB\1\2\f2\3\aB' b'%\1\xd0\1\3\1\26\f\22\f\26\5\1"\6\22\1\f\1\6"\3\a\6\2\3\22\1\25\1\xf0\1!\23\1\26\b\1"\a\3\2!\x162\25&!\xb0\2\21\b\21\b\5\22\6\5\22\1\30\1\26"\6\1\f\26\1\xb0\2\xf8\0"\f\6\3\2\1(\1\26\22\x061\xa0\2\x88\1\5"\5\a\6\5\18\x015\1H\xe0\1\xa8\1&\a\1\6\a\1X\1%\1' b'\xf8\0\x80\1\x88\1\31(\1\26\5!\xf8\0!\xb8\1 \xf8\0\t\21)8!X9\x98\3\f\5\f\1)\b\th)\bY\30)\n\v\t\x88\1\0H\f%\1)\b\31H\31\v\31\b\32\t\v\31\b)J\tH0\30\n%\1\n\b\t\b\x99\1*\b*-\n\b\t\bj\t\30 \30*\25\1\32\30\t\35\nI\v=\n\t\n]\30\t\xfa\0\v\b\0\bJ+\32\31M\31\nm' b'\t\n\35.\35\t\30\t\32\t*\v\b\0\b\33\n\b:\t\n\t\rN\r\v\r\36\35\36\r\32\35\16\f>\r\t(\t\b\32\b (\32\t\32\b\n\t^\r\v\x8e\1\n-\f\5\36\25\f\35\t\30\31\b0\b*\b\31\b\tn\n\r\x8e\1\n-,\16%\34.\30@\b\32\t\b\31\b^\n\r\v\xae\1\v\35\n\34\36\5\f\25.\bPh\n^\v\b\r\xae' b'\1\n\35\n.\f\36\34\v\n\b\xf0\0H\n\36\r\36\n\r\30N\n\36\n>\t\n\t\36\r\25\f.\b\xb0\1\b\32\16\n.\n\30\rN:>\t\n\t*%\n\36\b\xb0\1\b*\36\n\r(.\n\36:N\30\33\t\34\5(\xc0\1\b\n\v\b\36\v\30\0\b.\b*\30\n\36\v\36\b\0(\n\f\5\t\xf0\1\30\0( \b\36\r\b\32\b\20\b\32\b.' b'\b\20\b*\t\x80\3\b\36\t\0\x190\31\0\t\36\b (\xa0\3\31\xb0\1\31\x80\2') # petit sapin # retouche a partir de https://www.reddit.com/r/PixelArt/comments/zljrsx/some_variations_of_firtree/ L_SAPINP,H_SAPINP,C_SAPINP,D_SAPINP=23,30,(0,(80,104,176),(184,192,208),(184,192,200),(160,180,208),(160,180,216),(128,152,192),(24,52,32),(32,88,80),(32,100,80),(72,100,160),(40,76,64),(40,108,80),(64,116,80)),(b"\xa0\1\21\xb0\2\1\2\1\xb0\2\1\2\1\xa0\2" b"\1\3\2\3\1\x90\2\1\22\3\1\x80\2\1\24\3\22\1\xe0\1\1$\"\1\xe0\1\1\4B\3\1\xc0\1\1\x82\1\1\xa0\1\1\5\3\x82\1\1\x80\1\1$\6\22\4\22\3\4\2\4\1\xf0\0\1\24\21\24\1\4\5\4\1\24\1\x80\1\21\27\21\a\1\5\4!\xa0\1\a\30\27\b\a\21\27\xa0\1\1\tX\27\30\a\xf0\0\3\1\26\bf" b"\b\26\1P\21\3\2\4\2\3B\4\5\6\5\4\x110\1\6\22\x062\6\3\2\6\3\2\1\24\1@1\22\4\1\a\1\24\1\23\21`'\21\n'\21\a\21\aP'\vG\v\x87\1\x107\30\v\27\v(\v\27\v\b\vg\xc8\1\v\30\v'\0\v<(\t\35\t(\t\b\t\34\v\0\v\31\f\v\26\r\fM\f\r\26\v,\v\a\34\v&-\6-\34&\v\34\a\0'\26\r" b"\f\v\26\f-\t\r\26'0\a\34\27\26\f\v-\27\34\aP'\0\a\34+\35\a\0'\x90\1+ +`") # grande oie - retouchee a partir de : https://www.istockphoto.com/fr/vectoriel/dinde-r%C3%B4tie-pixel-art-r%C3%B4ti-pix%C3%A9lis%C3%A9-illustration-vectorielle-gm1340627324-420643187 L_OIEG,H_OIEG,C_OIEG,D_OIEG=40,23,(0,(0,0,0),(240,176,48),(224,100,24),(232,96,24),(240,132,64),(168,12,16),(112,168,40)),(b'\x88\2\1pA`\t\2\1X\tC\tH\1\32\1@\tS\4\x031\b\1\n\1\2\1\0\x010\1\3\f[\4\3\35\3\t\r\22\t\2\1 \1\f\x8b\x015\2\1"\1\20\1\xab\1%\21\n' b'\1\2\1\20\1\x93\1e\n\1\20\1\x8b\1u\2\1\30\1+\rCu\t\30\1\4#\x153\4\xfd\0\1 \1#\35;u\1(\1#\25;\xfd\0\1(\1\33\35;u\x010\1\33\35;m\3\x010\1\33%3m\4\x010\1#%+e\v\18\1\33-+U\23\18\1#%3E\23\1H\1#\35C%+\1H\1\4\3\26\33\26#\26\33\26\3\4\18\1\17&\17&\27&\17&\17\1' b'(\1\27&\17&\27&\17&\27\1\30') # petite oie - retouchee a partir de : https://www.istockphoto.com/fr/vectoriel/dinde-r%C3%B4tie-pixel-art-r%C3%B4ti-pix%C3%A9lis%C3%A9-illustration-vectorielle-gm1347229568-424770354 L_OIEP,H_OIEP,C_OIEP,D_OIEP=21,11,(0,(0,0,0),(224,100,24),(248,192,48),(240,132,64),(240,136,40),(120,160,48),(176,4,16)),(b' )0\21\20\t*\t\30\1\v\1\b\1J\31\23\1\0\1J,\3\1\b\1\n\4"<\1\b\1\n\f"<\1\b\1\n\f\x1a4\5\1\20\1\n\24\x124\2\1\20\1\22\f\32$\2\1 \1B' b'\f\32\1\30\1\6\17\6\17\6\17\6\17\6\17\6\1\b') # cuisse d'oie # retouchee a partir de https://www.flaticon.com/fr/icone-gratuite/cuisse-de-poulet_411006 L_OIEC,H_OIEC,C_OIEC,D_OIEC=15,14,(0,(0,0,0),(248,244,200),(224,100,24),(240,132,64)),b"\b\1`\1\2\1P\1\22\1P\1\22!0\1\2\1#\t(\1;\1 \1C\1\30\1K\1\20\1K\1\20\1\v\x043\1\30\1\3\x043\1\30\1\v\4+\1 \1\v\f\3\4\v\1(\1+\1\0" # buche - retouchee a partir de : https://openai.com/dall-e-2/ L_BUCHE,H_BUCHE,C_BUCHE,D_BUCHE=40,15,(0,(224,52,40),(16,120,64),(0,160,88),(224,144,240),(224,180,240),(232,236,240),(0,0,0),(176,4,24),(64,28,16),(88,60,48),(240,224,176),(160,76,72),(152,92,72),(184,176,176),(184,108,80)),(b"\x80\1\1\2\3@\4\5\0\2\3\2" b"\6P\3\2\xb0\1'\0\1\b\t\3\22\a\0\1$2\a\1\6\n\a\23\x027`\a&\1\b\26'\6\1\b\6%\27\3\v\30\6'\x056\a@\aF\4V\5\b\24\5\4\26\5\4\30F\v\x0670\a\x065\x1b6\5\6\5\4\33\6\25\6\5\v&\5\6\5\6\a,\a \a\6\5\26\25\26\a\26\25\6\5&\4\26\5\n\6\25\26\v\a\6\a\r&\a\20\a\6\5\33\6" b"\n\26\a\26\5\16&\36&\27\26\n\26\v\a\6\a\6\34\6\a\20\27\f\26\a\f\a\6\a\26\a\f\a\6\a\34\a\6\a\f\a\6\a\f\n\6\a\17\t\17\f\16\6\f\a\0\a\t\34\26\t\f\a\6\a\26\a\f\a\6\a\34\a\6\a\f\a\6\t\34\6\t\17\t\17\f\16\v\17\a\0\a?\a/\a\17\a\t/\a?\a/\a/\a\f\17\t\17\34\v\f" b"\17\27\f\x8f\1\34O\35\xaf\1\r\t\r\16\6\r\6\17\27]\6\17\35\t\n\r\17\r\6m\t-\16-\a\r\26\16\6\17\27\35\16m\31\xad\1\tm\a=\6\t7\xfd\0\t\nm\17-\t-\17-\a\r\6\n\6\t\a \x87\4\33\a\20") # tranche de buche - redessinee a partir de https://manufacturedupixel.com/buche-noel L_BUCHET,H_BUCHET,C_BUCHET,D_BUCHET=11,7,(0,(0,0,0),(160,76,72),(184,108,80),(232,236,240),(184,176,176),(240,224,176)),b"\b)\30\1*\31\v$\v\t\3\2\5\22\5\6\3\t\3\2\5\2\6\4\5\6\3\t\v$\v\1\0\t&\t\0" # foie gras - redessinee a partir de https://www.shutterstock.com/fr/image-vector/foie-gras-appetizer-icon-cartoon-vector-2171427293 L_FOIE,H_FOIE,C_FOIE,D_FOIE=17,12,(0,(0,0,0),(240,176,112),(248,196,136),(200,156,112),(240,156,88),(232,156,72),(240,168,88)),(b'\20Q \1\2K\1\b\t\v\4\v\4\3\f\33\1\0\1\5\1\2K\1\2\t\rQ\v\t\5\6\r\27\5"\v\t\35\37"\v\t\6\25\37"\v\t\6\25\x1f2\t\a\35\x172\t\2' b'\6\25\x172\1\0\21\2\6\27\22\3\21\0') # bonhomme pain d'epice - retouche a partir de : https://www.anyssa.org/classedesgnomes/wp-content/uploads/documents/francais/litterature/albums/bonhomme-pain-epice_pixel-art.pdf L_BISCUIT,H_BISCUIT,C_BISCUIT,D_BISCUIT=12,16,(0,(0,0,0),(176,84,0),(232,224,144),(248,0,0),(0,128,0)),(b"\30\x190\1\32\1 \1*\1\30\1\2\1\n\1\2\1\30\1*\1\30\1\n\t\n\1\20\21\32\21\0\1\2\3\n\f\n\3\2\t\2\3*\3\2\1\0\t\n\r\n\t\20\1*\1\30\1\n\f\n\1\30\1*\1\30\1" b"\v\t\v\1\30\1\n\t\n\1 \t\b\t\20") # vase de fleurs - retouche a partir de : https://www.shutterstock.com/fr/image-vector/pixel-vase-wildflowers-clay-flower-pot-1781614178 L_VASE,H_VASE,C_VASE,D_VASE=25,47,(0,(0,0,0),(176,48,80),(208,236,224),(192,88,112),(88,240,240),(216,216,176),(232,208,40),(32,104,0),(200,188,136),(16,68,0),(96,56,112),(152,68,152),(176,120,176),(200,112,200),(64,44,88)),(b"\xb0\1!\xe0\1\1@\1\"\1\xc0" b"\1\1\3\1 \x012\4\1\20\1\xf0\0\1\23\5\1\0\1\4\2\4\2\4\22\21\6\1P\21#!\22\24\"\1\26\3\x010\1\23'\23\1\22\4\22\4\2\1&\21\20\1#'#\1\b\4\b\2\b\3\6'\26\1\20\1\5\3'\23\1\0\1(\6\t\6'\6\t\6\1\20\21\5\23\n\1 \1\n\21\26'\3\6\x010\1\5\3\5\32\1\0\1\32\1\0\1\n\3\26" b"\21P\1\3\21\n\1\0\1\n\1\0\1\32\3\26\1P\1\b\1\0\1\b\n\1\32\1\0\1\b\21\6\1`\1\b\n\21\n\b\1\32\21\n\b!\b\1P\1\bJ\bJ\b\21\n\b\1P\1\bZ\b:\b*\b\1`\1(\n\b*(:\b\1\xf0\0\1\v\1\n!J(\1\x80\1\1\xbb\1\21\x90\1\1\33\x8c\1\v\1\xa0\1\1\33\x8c\1\v\1\xa0\1\1+\\\r\33\1" b"\xa0\1\1+,\16-\33\1\xb0\1\1\33,\16-\v\1\xc0\1\1\33,\16-\v\1\xc0\1\1\33,\16-\v\1\xd0\1\1\v,\36\r\v\1\xe0\1\1\v,\36\r\v\1\xd0\1\1\33\34.\r\17\v\1\xc0\1\1\33\34.\r\17\v\1\xc0\1\1\33,\16\35\17\v\1\xc0\1\1\33,\16\35\17\v\1\xb0\1\1+,\16\35\17\33\1\xa0\1\1+," b"\16\35\37\v\1\xa0\1\1\33<\16-\17\v\1\xa0\1\1\33<\16-\17\v\1\x90\1\1+L-\17\33\1\x80\1\1+L\16\35\37\v\1\x80\1\1\33\\\36\v\r\17\v\1\x80\1\1\33l\16\v\r\17\v\1\x80\1\1\33l\16\v\r\17\v\1\x80\1\1\33l\16\v\r\17\v\1\x80\1\1\33\\\36\r\17\33\1\x90\1\1+L\35\17\v\1" b"\xa0\1\1+L\35\17\v\1\xa0\1\1+\\\37\v\1\xb0\1\1\33_\33\1\xd0\1\1\xfb\0\1\xf0\0") # bouteille de champagne - retouchee a partir de : https://www.shutterstock.com/fr/image-vector/pixel-art-bottle-glass-jar-wine-1025910367 L_CHAMPAGNE,H_CHAMPAGNE,C_CHAMPAGNE,D_CHAMPAGNE=12,26,(0,(0,0,0),(232,208,168),(24,92,64),(48,136,72),(96,196,72),(16,56,64),(232,240,240)),(b' \t@\1\n\x010\1\32\1(\1\3\4\5\3\1(\1\3\f\3\x010\1\16\18\1\6\3\18\1\6\3\x010\1\6\23\1(\1\6\3\5\3\1 \1\6\v\5\v\1' b'\30\1\6\23\5\3\1\20\1\6\3\26\5\6\3\1\b\1\6\3\26\5\6\3\1\b\1\6\3\26\5\6\3\1\0\1\6\x036\3\t\6\3\26\n\a\n\t\6\3\26\n\a\n\t\6\3\26\n\a\n\t\6\3\26\n\a\n\t\6\3\26\n\a\n\t\6\3\26"\t\6\x036\3\t\6\x036\3\t\6C\1\0\1>\1\0') # bouteille de vin - retouchee a partir de : https://fr.123rf.com/photo_92573889_bouteille-de-style-de-jeu-r%C3%A9tro-vin-pixel-art-cartoon.html L_VIN,H_VIN,C_VIN,D_VIN=7,18,(0,(40,40,40),(224,8,40),(32,28,32),(0,140,24),(40,228,80),(248,252,248),(248,236,104)),(b"\b\21\30\1\2\1\30\3\1\3\30\1\4\1\30\1\4\1\20\1\5\f\1\0\1\5\6\24\t\5\34!\f\t\6\a\1\f\t\6\a\1\f\t\6\a\1\f\t\6\a\1\f\t\6\a\1\f\t\6\a\1\f!" b"\f\t\5\34\t\5\34\1") # corbeille de fruits - retouchee a partir de : https://myloview.fr/papiers-peints-vecteur-pixel-art-panier-fruit-no-66B7069 L_FRUITS,H_FRUITS,C_FRUITS,D_FRUITS=48,26,(0,(0,0,0),(104,52,0),(192,156,24),(176,128,80),(240,180,128),(224,0,0),(120,132,0),(176,196,16),(224,160,168),(104,152,112),(248,120,152),(80,172,64),(232,108,0),(216,196,104)),(b"\x80\2A \2\xd0\x011\x90\2!C!\2" b"\21\0\21\xf0\0\x014\x010!\x80\1\1\23\25\23\21&\2\26\1\23\1P\1\4!\24\1\20\1$\1@A3\1\x86\1\1\23\x010\1\4\1 \1\24\1\0\1\4\1\24\1\20\21\27(\21\3\1&\31FA\20\1\4\1@\1\24\21\4\21\4\1\0\1\b78\21&\31F\x015Q@\1\4\21\4\21\24\1\b7X\1\x96\1\1\5!Z\x010\1\4\21\24\21" b"\4\1\30\27h\1\x96\1\21+\1Z\1 \1\4\1\0\1\4\21\4\1\xa8\x011V\1[\1J\1\20\1\24\1\0\1\24!\x98\1\1<\x016\1\v\31K\1:!\24\1 \1\4\1\5\1\xf8\0\21\r\21\f!&\1\v\31K\1:\1\5\1\4\1@\21\4\1h\1=\1\f\1\35\1\6\1\x8b\1\1:\1\4\21`\1\4\5\1H\1\35\25\35\21-\21\x8b\1\1*\1\5\4" b"\1\xf0\0\1\24\5\1(\1-\25\xfd\0\1\36[\1*\1\5\24\1\x80\1\1\24\5\21\b\1\xbd\1\1>K\1\n\21\5\24\1\x90\1\1$\25!\xad\1\1\16\3.+!\25$\1\xa0\1\x014%QM\1\36Q%4\1\xc0\1\1TU\xf1\0UT\1\xd0\1!\x94\1\xf5\0\x94\1!\xe0\1\1\2\21\xf4\2\21\4\1\x80\2\1\2\x041\xf4\x011\2\4" b"\1\xa0\2\1\2\4\2\4\2ATA\4\2\4\2\4\1\xc0\2\1\2\4\2\4\2\4\2\4\2Q\4\2\4\2\4\2\4\2\4\1\xe0\2\21\4\2\4\2\4\2\4\2\4\2\4\2\4\2\4\2\4\2\4\2\21\x90\3\21\2\4\2\4\2\4\2\4\2\4\2\4\2\4\2\4\21\xd0\x031\4\2\4\2\4\2\4\x021\xf0\1")
# CODE PRINCIPAL defil_vert, vx, vy, x_ref, x_ref_end, y_fuite, y_end, x1_pplan_piece = 0, 1, -1, -2 * W_PIECE, W - W_PIECE + 1, H // 2, H // 4, round(-1.73 * W_PIECE); x_end = x_ref_end while 1: if defil_vert and y_fuite == y_end: y_end = randint(1, H - 2); vx, defil_vert = sign(x_end - x1_pplan_piece), 0 elif not defil_vert and x1_pplan_piece == x_end: x_end = randint(-2 * W_PIECE, W + W_PIECE); vy, defil_vert = sign(y_end - y_fuite), 1 if not defil_vert: x1_pplan_piece += vx else: y_fuite += vy trash, x2_pplan_piece, y1_pplan_piece, y2_pplan_piece, xf_piece = None, x1_pplan_piece + W_PIECE - 1, 0, H_PIECE - 1, round(W * .875 * (x1_pplan_piece - x_ref) / (x_ref_end - x_ref)) # calculs 3D ly1x, ly2x = fuite(y1_pplan_piece, x1_pplan_piece, x2_pplan_piece, y_fuite, xf_piece, L_ZFACT), fuite(y2_pplan_piece, x1_pplan_piece, x2_pplan_piece, y_fuite, xf_piece, L_ZFACT) # plafond + sol lx1y, lx2y = fuite(x1_pplan_piece, y1_pplan_piece, y2_pplan_piece, xf_piece, y_fuite, L_ZFACT), fuite(x2_pplan_piece, y1_pplan_piece, y2_pplan_piece, xf_piece, y_fuite, L_ZFACT) # murs gauche + droite x1_dplan_piece, x2_dplan_piece, y1_dplan_piece, y2_dplan_piece = getx(I_PIECE_DP, 0), getx(I_PIECE_DP, 1), gety(I_PIECE_DP, 0), gety(I_PIECE_DP, 1) clear_screen() # sol enneige fill_rect(0,0,W,y_fuite,(16,18,64)) # fond fill_trapeze_horizontal(y2_pplan_piece, x1_pplan_piece, x2_pplan_piece, y2_dplan_piece, x1_dplan_piece, x2_dplan_piece, C_SOL_INT) # sol interieur draw_foret(0) # foret en arriere plan x1_porte, x2_porte, y1_porte, y2_porte = repos(x1_dplan_piece, x2_dplan_piece, .625, .125) + repos(y1_dplan_piece, y2_dplan_piece, .25, 0) fill_rect(x1_dplan_piece, y1_dplan_piece, x1_porte - x1_dplan_piece, y2_dplan_piece - y1_dplan_piece + 1, C_FOND_INT) fill_rect(x2_porte + 1, y1_dplan_piece, x2_dplan_piece - x2_porte, y2_dplan_piece - y1_dplan_piece + 1, C_FOND_INT) fill_rect(x1_porte, y1_dplan_piece, x2_porte - x1_porte + 1, y1_porte - y1_dplan_piece, C_FOND_INT) draw_murforet(-1) # mur + foret de gauche fill_trapeze_horizontal(y1_pplan_piece, x1_pplan_piece, x2_pplan_piece, y1_dplan_piece, x1_dplan_piece, x2_dplan_piece, C_SOL_INT) # plafond c_tapis, lx_pplan, lx_dplan = [(255,255,0),(102,0,0)]*2, [], [] # tapis y_pplan_tapis, x1_pplan_tapis, x2_pplan_tapis, y_dplan_tapis, x1_dplan_tapis, x2_dplan_tapis = gety(I_TAPIS_PP, 1), getx(I_TAPIS_PP, 0), getx(I_TAPIS_PP, 1), gety(I_TAPIS_DP, 1), getx(I_TAPIS_DP, 0), getx(I_TAPIS_DP, 1) for k in range(4): z = .1 + k*.05; lx_dplan.append(repos(x1_dplan_tapis, x2_dplan_tapis, z, z)); lx_pplan.append(repos(x1_pplan_tapis, x2_pplan_tapis, z, z)) for k in range(3): fill_trapeze_horizontal(y_dplan_tapis, lx_dplan[k][0], lx_dplan[k+1][0], y_pplan_tapis, lx_pplan[k][0], lx_pplan[k+1][0], c_tapis[k]) fill_trapeze_horizontal(y_dplan_tapis, lx_dplan[k+1][1], lx_dplan[k][1], y_pplan_tapis, lx_pplan[k+1][1], lx_pplan[k][1], c_tapis[k]) fill_trapeze_horizontal(y_dplan_tapis, lx_dplan[3][0], lx_dplan[3][1], y_pplan_tapis, lx_pplan[3][0], lx_pplan[3][1], c_tapis[1]) draw_guirlande(y1_dplan_piece, x1_dplan_piece, x2_dplan_piece - 1, N_FESTONS, round(H_FESTON*L_ZFACT[I_PIECE_DP])) # guirlande au plafond au dernier plan y_sapin, x1_sapin, x2_sapin = gety(I_SAPIN, 1), getx(I_SAPIN, 0), getx(I_SAPIN, 1) # sapin decore au fond de la piece x1_sapin += ((x2_sapin - x1_sapin + 1) * .625 - L_SAPIND) // 2 draw_image(D_SAPIND, x1_sapin, y_sapin - H_SAPIND, L_SAPIND, C_SAPIND) y_pplan_table, y_dplan_table, h_dplan_table, h_pplan_table = [gety(I_TABLE_PP, 1), gety(I_TABLE_DP, 1)] + [(gety(i, 1) - gety(i, 0)) * 26 // 100 for i in (I_PIECE_DP, I_PIECE_PP)] yh_pplan_table, yh_dplan_table = y_pplan_table - h_pplan_table, y_dplan_table - h_dplan_table lh = [0, 1] for h in x2_pplan_piece < x2_dplan_piece and lh.reverse() or lh: if h: lv = [0, 1] for v in yh_dplan_table >= yh_pplan_table and lv.reverse() or lv: if v: draw_repas() # assiettes + objets sur la table else: draw_table(y_pplan_table, y_dplan_table, h_pplan_table, h_dplan_table) # table else: draw_murforet(1) # mur + foret de droite draw_guirlande(y1_pplan_piece, x1_pplan_piece, x2_pplan_piece - 1, N_FESTONS, H_FESTON) # guirlande au plafond au premier plan show_screen()
def rect(x, y, l, h, z, coul): for i in range(l * h): c = get_pixel(x + z + i % l, y + i // l) if c != GRIS and c != coul: set_pixel(x + z + i % l, y + i // l, coul if c == BLC else GRIS)
def dessin(x, y, z, l, h): rect(x, y, l, h, 0, ROUGE) rect(x, y, l, h, z, CYAN)
def txt3d(txt, x, y, z, t, taille="medium"): h = 170 draw_string(0, h, txt, GRIS, taille) for c in range(0, 150): for l in range(h, 190): if get_pixel(c, l)[0] < 255: dessin(x + 2 * c, y + 2 * l - 337, z, t, t) draw_string(0, h, txt, BLC, taille)
, déjà grands gagnants lors de l'édition précédente.
Contrairement à l'année dernière, son équipe de choc de cette année ne s'appuie pas sur la bibliothèque
turtle
mais
casioplot
, ce qui lui permet d'aller beaucoup plus loin dans les effets visuels et la finition.
Les différents élèves ont donc conçu des
sprites
à afficher sur une scène de table de Noël, en se basant sur la technique exposée lors de notre atelier jeu vidéo en novembre dernier.
Mais laissons de suite le poète
Adam Y.
te décrire la scène en alexandrins :
Adam Y. a écrit:En ce jour de Noël est dressée la grand table ; Friandise et champagne accompagne à l’oubli Et la bûche enivrant dont le goût est affable Resplendit sous l’éclat rutilant des bougies.
Tout convive a pris place et festoie du repas ; Les présents emballés sont légués à autrui. Enjoués, ces gens rient, réjouis de leurs plats ; On entend un grelot résonner dans la nuit.
Rendons à César ce qui est à César, créditons correctement les 21 artistes dont les œuvres apparaissent sur le rendu final :
Adam Y.
: chandelle
Thomas S.
: bouteille de champagne
Sylvain B.
: bol de chocolats
Alexis M.
: tasse chocolat chaud
Mathis L.
: cadeau de Noël emballé
Justine C.
:
Joyeux Noël
en texte en pixel art
Julien R.
: un calisson
Ilana R.
: couronne de Noël
Coline R.
: truffe en chocolat
Antoine R.
: bouteille de vin
Anna C.
: sucre d'orge
Anthony F.
: cadeau de noel jaune et rouge
Neila S.
: chaussette de noel
Florian G.
: un petit Papa Noël
Robin C.
: houx de Noël
Samuel V.
: un bonhomme de neige
Merlin C.
: un sapin
Ilyas R.
: une bûche de Noël
Raphael C.
: bonhomme en pain d'épice
Raphaël M.
: une horloge digitale qui affiche
20h22
façon
Casio F91W
mais affiché au mur
(mais quel coquin, le clin d'œil qui ne passera sûrement pas inaperçu )
Sybil L.
: bougie
Ayons également une pensée pour 10 autres élèves qui ont eux aussi produit des éléments dont l'intégration au script n'a pas été possible :
Matheo L.
: étoile
Aurélien B.
: étoile
Sarah V.
: flocon de neige
Rayan C.
: bonhomme de neige
Romeo B.
: bonnet de Noël
David G.
: oreillettes
Bilal L.
: guirlandes
constance A.
: un saumon sous forme de poisson
Romain L.
: chandelier
Noah M.
: bougies
Bravo à toutes et à tous, c'est superbe cette année, encore plus que l'année dernière !
# Participation au jeu concours de Noël 2022 de Casio
from casioplot import * from random import randint
""" Catégorie Classe : Elèves du Lycée Louis Pasteur d'Avignon Professeurs : Vincent ROBERT, Raphaël CLEMENTE Elèves : 31 élèves citées dans ce document, sous la forme Prénom N. https://www.casio-education.fr/actualites/jeu-concours-casio-de-noel/ """
# Des objets préparés et codés en pixel art """ Nous avons découvert lors de l'atelier CRÉER UN JEU VIDÉO AVEC LES CALCULATRICES GRAPHIQUES de novembre 2022 > https://www.casio-education.fr/contenus/creer-un-jeu-video-avec-les-calculatrices-graphiques/ une technique de codage basé sur du pixel Art. Nous remercions à ce propos les animateurs de cet atelier, Xavier Andreani (tiplanet.org) et Sebastien Michelland (planet-casio.com) tant pour la qualité de la présentation que pour l'aide inestimable que cette formation a été pour nous. Une "orange" codée avec cette technique fut envoyé aux élèves. vr_orange_color = { " " : (255, 255, 255), # transparence "#" : (241, 149, 11), # ecorce #f6b26 "." : (247, 178, 107), # anti crénelage #f1950b "A" : (235, 156, 36), # dégradé 1 #eb9c24 "B" : (237, 176, 41), #dégradé 2 #edb029 "C" : (241, 194, 50), # centre #f1c232 } vr_orange_image = [ " .##. ", " ##AA## ", ".#ABBA#.", "#ABCCBA#", "#ABCCBA#", ".#ABBA#.", " ##AA## ", " .##. ",] Les volontaires eurent donc la mission de choisir un objet, de le coder. Chaque élève qui a participé a rendu une liste et un dictionnaire python. Ces deux objets permettent de générer une image. Un groupe de pilotage de 3 élèves et d'un professeur realisa la composition finale : - selectionner les images qui seront dans la composition, - Placer les objets, - Ecrire une histoire, - Ajouter des élèments pour améliorer la cohérence de l'ensemble. Groupe de pilotage : Ilana R., Adam Y, Ilyas R., Vincent ROBERT """
# L'histoire par Adam Y. """ En ce jour de Noël est dressée la grand table ; Friandise et champagne accompagne à l’oubli Et la bûche enivrant dont le goût est affable Resplendit sous l’éclat rutilant des bougies.
Tout convive a pris place et festoie du repas ; Les présents emballés sont légués à autrui. Enjoués, ces gens rient, réjouis de leurs plats ; On entend un grelot résonner dans la nuit. """
# Les images codées par les élèves de ligne 64 à la ligne 1010.
"""================================== Une chandelle par Adam Y. =================================="""
"""======================================================== Une horloge facon casion qui affiche 20:22 par Raphael M. ========================================================""" #20:22, clin d'oeil à 2022 ! :-)
"""========================= Une lanterne par Sybil L. ========================="""
sl_lanterne_color = { " " : (255, 255, 255), # transparence "a" : (111, 102, 102), # acier de la lanterne #6f6666 "s" : (71, 71, 71), # fond de la lanterne #474747 "d" : (255, 218, 172), # dégradé 1 de la bougie #ffdaac "D" : (255, 199, 154), #dégradé 2 de la bougie #ffc79a "b" : (255, 181, 121), # dégradé 3 de la bougie #ffb579 "t" : (40, 37, 37), # tige bougie #282525 "f" : (213, 59, 0), # dégradé bas de la flamme #d53b00 "F" : (193, 53, 0), # dégradé coté clair de la flamme #c13500 "!" : (242, 114, 8), # orange centre bas de la flamme #f27208 ":" : (230, 109, 10), # orange centre haut de la flamme #e66d0a "h" : (167, 46, 0), # dégradé haut de la flamme #a72e00 "?" : (242, 250, 251), # vitre lanterne #f2fafb
}
sl_lanterne_image = [ " aaaaaaaa", " aa aa", "aaaaaaaa a", "a a h a a", "a ah:h a a", "a aF!F a a", "a a f a a", "a adtb a a", "a adDb a a", "a adDb a a", "a adDb a a", "a adDb a a", "a adDb a a", "a sdDbsasa", "assdDbsaa ", "aaaaaaaa ",]
# Participations des élèves : Listing des créations """ Parfois les élèves ont rendu un codage non conforme, Parfois l'image proposée ne s'intégrait pas de manière harmonieuse, Ils ont participé leur production n'a juste pas été sélectionnée pour le dessin final. ==== Liste de tous les élèves participants, image sélectionnée ou pas === 1 Raphaël M Une horloge digitale qui affiche 20h22 façon Casio F91W mais affiché au mur 2 Matheo L étoile 3 Alexis M tasse chocolat chaud 4 Aurélien B étoile 5 Sarah V flocon de neige 6 Adam Y Chandelle 7 Rayan C bonhomme de neige 8 Anthony F cadeau de noel jaune et rouge 9 Florian G Un petit papa noel 10 Neila S chaussette de noel 11 Merlin C Un sapin 12 Justine C Joyeux Noël en texte en PixelArt 13 Romeo B bonnet de noel 14 Ilyas R une buche de Noël 15 Ilana R couronne de noel 16 Robin C Houx de noël 17 Raphael C bonhomme en pain d'épice 18 Mathis L cadeau de noël emballé 19 Sybil L bougie 20 Samuel V un bonhomme de neige 21 Antoine R bouteille de vin 22 David G oreillettes 23 Julien R un calisson 24 Bilal L Guirlandes 25 constance A un saumon sous forme de poisson 26 Anna C sucre d'orge 27 Thomas S Bouteille de champagne 28 Sylvain B bol de chocolats 29 Romain L Chandelier 30 Noah M Bougies 31 Coline R Truffe en chocolat + 2 enseignants ============================== """
# Dessin de l'image sur une Casio Graph 90+E def trace_casio(clr: dict, img: list, x_pos: int, y_pos: int, size: int = 1): img = [list(i) for i in img] for i in range(len(img)): show_screen() for j in range(len(img[i])): if clr[img[i][j]] != (255, 255, 255): for k in range(size): for o in range(size): set_pixel(x_pos+5+j*size+o, y_pos+5+i*size+k, clr[img[i][j]])
# Construction du mur, effet pixel alétoire 4x4 for x in range(0,385): for y in range(0,43): r,g,b = randint(250,255), randint(222,242), randint(210,242) set_pixel(2*x, 2*y, (r,g,b)) set_pixel(2*x+1, 2*y, (r,g,b)) set_pixel(2*x, 2*y+1, (r,g,b)) set_pixel(2*x+1, 2*y+1, (r,g,b))
# Construction de la table, effet pixel aléatoire + degradé. for x in range(0,385): for y in range(82,193): c = 82+y//2+randint(0,8) set_pixel(x, y, (c,c-95,c-130))
La 3D semble bizarrement être à la mode cette année, c'est curieux... Bref comme l'année dernière, tous ceux qui ont bien voulu partager leurs créations sur
Graph 90+E
jusqu'à présent se sont visiblement donné à fond, désintégrant littéralement les limites de ce qui avait pu être réalisé jusqu'alors en
Python
sur cette machine !
Nous trouvons la chose à la mesure des gros efforts consentis par
Casio
en dotation pour ce concours, et espérons que ces derniers sont également satisfaits de tous les chefs-d'œuvre qu'ils ont reçu.
Lorsque nous consultons les sites des différentes constructeurs de calculatrices ou autorités de réglementation des examens, nous utilisons régulièrement la
. Elle nous permet d'affichage des sauvegardes d'anciennes versions des pages, et de mieux t'informer sur les dernières nouveautés.
L'
Internet Archive
est un organisme à but non lucratif américain, ayant pour objectif de préserver la connaissance humaine et de la mettre à disposition de tous dans une sorte de
"bibliothèque d'Alexandrie en ligne"
.
Nous parlons de données, mais elles sont loin de se limiter aux seules sauvegardes de sites Internet, ce n'est qu'un aspect disponible. Bien d'autres choses sont archivées et disponibles : images, musiques, vidéos et même logiciels.
Un projet pantagruélique occupant à ce jour plusieurs milliers de téraoctets.
Dernière nouveauté dans la bibliothèque de l'
Internet Archive
: le tiroir des calculatrices.
Tu peux y retrouver plusieurs calculatrices graphiques sorties entre 1990 et 2002. Un seul clic sur une de ces calculatrices et elle reprend immédiatement vie grâce à l'émulateur en ligne
MAME
!
Au menu du tiroir, nous avons donc plusieurs modèles
, qui avaient hélas dû renoncer face à l'hostilité de
Texas Instruments
, préoccupé par le fait que les fichiers permettent d'utiliser gratuitement ses produits sur tablettes et smartphones. Ou encore notre émulateur de
TI-z80
monochromes en
Flash
, qui pendant des années t'a permis d'essayer les programmes directement en ligne sans avoir à les télécharger et installer pour cela, avant de disparaître avec la mort de cette technologie.
Espérons que cette fois-ci sera la bonne. Car il est important de sauvegarder et préserver le formidable patrimoine éducatif développé par
Texas Instruments
pendant que nous l'avons encore sous la main.
D'ailleurs justement, quelque chose que nous avions développé et qui manque à ce jour : c'est la possibilité de choisir la version à émuler, ainsi que celle de charger un programme.