dm21.py

Created by ilyas-r

Created on February 14, 2023

6.33 KB

Représentation du célèbre mème Nyan Cat en Python affichable sur calculatrice NumWorks. Développé par Ilyas R. à l’occasion du DM21 “💖 … Les mathématiques sont belles !” édition 2021-2022. #nsi_xyz


from kandinsky import *

"""
Définitions des couleurs personnalisées. Récupérées grâce à https://imagecolorpicker.com/
0: grey, 1: blue, 2: red, 3: orange, 4: yellow, 5: green, 6: cyan, 7: purple, 8: pink, 9: magenta, 10: beige, 11: salmon
"""
colors = [(153, 153, 153), (0, 45, 110), (255, 16, 0), (255, 153, 0), (255, 242, 0), (16, 221, 0), (0, 140, 255),
          (105, 58, 255), (255, 169, 255), (254, 73, 152), (255, 203, 153), (255, 159, 156)]


def draw_star(x, y, variety):
    if variety == "small":
        x_diff_s = [0, 0, 5, -5]
        y_diff_s = [5, -5, 0, 0]
        for i in range(len(x_diff_s)):
            fill_rect(x + x_diff_s[i], y + y_diff_s[i], 5, 5, "white")
    elif variety == "medium":
        x_diff_m = [0, 0, -10, 10]
        y_diff_m = [10, -10, 0, 0]
        for i in range(len(x_diff_m)):
            fill_rect(x + x_diff_m[i], y + y_diff_m[i], 5, 5, "white")
    elif variety == "large":
        x_diff_l = [0, 0, 0, 0, 0, -10, -15, 10, 15]
        y_diff_l = [0, 10, 15, -10, -15, 0, 0, 0, 0]
        for i in range(len(x_diff_l)):
            fill_rect(x + x_diff_l[i], y + y_diff_l[i], 5, 5, "white")


def draw_rainbow(x, y):
    rainbow_colors = [colors[2], colors[3], colors[4], colors[5], colors[6], colors[7]]
    y_template = [0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5]
    for i in range(len(rainbow_colors)):
        for j in range(3):
            for k in range(len(y_template)):
                fill_rect(x + k * 5, y + y_template[k] + j * 5 + i * 5 * 3, 5, 5, rainbow_colors[i])


def draw_cat_head(x, y):
    x_head_black = [10, 15, 60, 65, 5, 20, 55, 70, 5, 25, 50, 70, 5, 30, 35, 40, 45, 70, 5, 70, 0, 75, 0, 25, 60, 75, 0,
                    20, 25, 45, 55, 60, 75, 0, 75, 0, 25, 40, 55, 75, 5, 25, 30, 35, 40, 45, 50, 55, 70, 10, 65, 15, 20,
                    25, 30, 35, 40, 45, 50, 55, 60]
    x_head_white = [20, 55]
    x_head_salmon = [10, 15, 65, 70, 10, 15, 65, 70]
    x_head_grey = [10, 15, 60, 65, 10, 15, 20, 55, 60, 65, 10, 15, 20, 25, 50, 55, 60, 65, 10, 15, 20, 25, 30, 35, 40,
                   45, 50, 55, 60, 65, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 5, 10, 15, 30, 35, 40, 45,
                   50, 65, 70, 5, 10, 15, 30, 35, 40, 50, 65, 70, 5, 20, 25, 30, 35, 40, 45, 50, 55, 60, 5, 20, 30, 35,
                   45, 50, 60, 10, 15, 20, 60, 65, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60]
    y_diff = [0, 6, 8, 1]
    head_x_colors = [x_head_black, x_head_white, x_head_salmon, x_head_grey]
    head_colors = ["black", "white", colors[11], colors[0]]
    for i in range(len(head_x_colors)):
        for j in range(len(head_x_colors[i])):
            fill_rect(x + head_x_colors[i][j], y + y_diff[i] * 5, 5, 5, head_colors[i])
            if j != len(head_x_colors[i]) - 1:
                if head_x_colors[i][j] > head_x_colors[i][j + 1]:
                    y_diff[i] += 1


def draw_cat_body(x, y):
    x_body_black = [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 5, 95, 0, 100, 0, 100, 0, 100,
                    0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 0, 100, 5, 95, 10,
                    15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90]
    y_constant = 0
    for i in range(len(x_body_black)):
        fill_rect(x + x_body_black[i], y + y_constant * 5, 5, 5, "black")
        if i != len(x_body_black) - 1:
            if x_body_black[i] > x_body_black[i + 1]:
                y_constant += 1
    fill_rect(x + 10, y + 10, 17 * 5, 14 * 5, colors[8])
    x_body_beige = [10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 5, 10, 15, 85, 90, 95, 5, 10,
                    90, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 95, 5, 10, 90, 95, 5, 10,
                    15, 85, 90, 95, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90]
    y_constant = 1
    for i in range(len(x_body_beige)):
        fill_rect(x + x_body_beige[i], y + y_constant * 5, 5, 5, colors[10])
        if i != len(x_body_beige) - 1:
            if x_body_beige[i] > x_body_beige[i + 1]:
                y_constant += 1
    y_body_magenta = [55, 20, 70, 45, 30, 65, 50, 20, 60, 30, 70, 60, 35, 15, 50, 25, 65, 40, 20, 55, 30, 45, 65]
    x_constant = 3
    for i in range(len(y_body_magenta)):
        fill_rect(x + x_constant * 5, y + y_body_magenta[i], 5, 5, colors[9])
        if i != len(y_body_magenta) - 1:
            if y_body_magenta[i] > y_body_magenta[i + 1]:
                x_constant += 1


def draw_cat_leg(x, y, variety):
    if variety == "front":
        x_diff_f = [0, 15, 5, 10, 15]
        y_diff_f = [0, 0, 5, 5, 5]
        for i in range(len(x_diff_f)):
            fill_rect(x + x_diff_f[i], y + y_diff_f[i], 5, 5, "black")
        fill_rect(x + 5, y, 5, 5, colors[0])
        fill_rect(x + 10, y, 5, 5, colors[0])
    elif variety == "back":
        x_diff_b = [5, 10, 15, 5, 10]
        y_diff_b = [10, 10, 10, 15, 15]
        x_leg_black = [10, 5, 10, 15, 0, 20, 0, 15, 0, 5, 10]
        y_constant = 0
        for i in range(len(x_leg_black)):
            fill_rect(x + x_leg_black[i], y + y_constant * 5, 5, 5, "black")
            if i != len(x_leg_black) - 1:
                if x_leg_black[i] > x_leg_black[i + 1]:
                    y_constant += 1
        for i in range(len(x_diff_b)):
            fill_rect(x + x_diff_b[i], y + y_diff_b[i], 5, 5, colors[0])
    elif variety == "tail":
        x_diff_t = [5, 10, 15, 10, 15, 20, 25, 30]
        y_diff_t = [5, 5, 5, 10, 10, 10, 10, 15]
        x_leg_black = [5, 10, 15, 20, 0, 20, 25, 30, 0, 5, 30, 10, 15, 20, 25, 25, 30]
        y_constant = 0
        for i in range(len(x_leg_black)):
            fill_rect(x + x_leg_black[i], y + y_constant * 5, 5, 5, "black")
            if i != len(x_leg_black) - 1:
                if x_leg_black[i] >= x_leg_black[i + 1]:
                    y_constant += 1
        for i in range(len(x_diff_t)):
            fill_rect(x + x_diff_t[i], y + y_diff_t[i], 5, 5, colors[0])


def nyan_cat():
    fill_rect(0, 0, 320, 222, colors[1])
    draw_star(20, 30, "small")
    draw_star(140, 190, "medium")
    draw_star(250, 40, "large")
    draw_rainbow(0, 60)
    draw_cat_body(105, 65)
    draw_cat_head(155, 90)
    draw_cat_leg(190, 155, "front")
    draw_cat_leg(165, 155, "front")
    draw_cat_leg(115, 155, "front")
    draw_cat_leg(90, 140, "back")
    draw_cat_leg(70, 105, "tail")


nyan_cat()