defenseurs en herbe (Carnot 2026, Terminale)

Il était une fois un chevalier, qui habitait dans un château. Il vivait paisiblement une vie solitaire autour de rien, quand un jour un portail apparue devant son château. De la des monstres en apparurent. Il due alors protéger son domaine avec des tours pouvant tirer et tuer ses monstres,

Pour faire bouger le personnage:

  • Fleche du haut = allez en haut
  • Fleche du bas = allez en bas
  • Fleche de gauche = allez a gauche
  • Fleche de droite = allez a droite

Pour quitter le jeu appuyer sur "Q"

Code Python
import pyxel


# taille de la fenetre 128x128 pixels
pyxel.init(128, 128, title="Nuit du Code")
pyxel.load("theme.pyxres")
tour=[]
piece=[]

class Joueur:
    def __init__(self, tete_x, tete_y):
        self.tete_x = tete_x
        self.tete_y = tete_y
        self.sprite = None
        self.direction = None

    def mouvement(self):
        if pyxel.btn(pyxel.KEY_UP):
            self.tete_y -= 1
        if pyxel.btn(pyxel.KEY_DOWN):
            self.tete_y += 1
        if pyxel.btn(pyxel.KEY_LEFT):
            self.tete_x -= 1
        if pyxel.btn(pyxel.KEY_RIGHT):
            self.tete_x += 1

    def draw(self):
        self.sprite = pyxel.blt(self.tete_x, self.tete_y, 0, 41, 1, 7, 7, 0)

    def update(self):
        self.mouvement()


class Ennemi:
    def __init__(self, ennemi_x, ennemi_y, vie, direction):
        self.ennemi_x=ennemi_x
        self.ennemi_y=ennemi_y
        self.vie = vie
        self.direction = direction

    def ennemi_mouvement(self):
        if (self.ennemi_x==60 and self.ennemi_y==13*8) or (self.ennemi_x==14*8 and self.ennemi_y==4*8) or (self.ennemi_x==10*8 and self.ennemi_y==6*8):
            self.direction="g"

        if (self.ennemi_x==16 and self.ennemi_y==8*10) or (self.ennemi_x==11*8 and self.ennemi_y==13*8) or (self.ennemi_x==2*8 and self.ennemi_y==4*8):
            self.direction="d"

        if (self.ennemi_x==16 and self.ennemi_y==128-8*3) or (self.ennemi_x==14*8 and self.ennemi_y==13*8) or (self.ennemi_x==16 and self.ennemi_y==6*8) or (self.ennemi_x==7*8 and self.ennemi_y==4*8):
            self.direction="h"

        if (self.ennemi_x==11*8 and self.ennemi_y==10*8) or (self.ennemi_x==10*8 and self.ennemi_y==4*8):
            self.direction="b"

        if self.direction == "h":
            self.ennemi_y-=1
        if self.direction == "b":
            self.ennemi_y+=1
        if self.direction == "g":
            self.ennemi_x-=1
        if self.direction == "d":
            self.ennemi_x+=1

    def touche(self):
        self.vie-=25
        if self.vie==0:
            ennemi.pop()
            pièce.append[self.ennemi_x,self.ennemi_y]

class Tower:
    def __init__(self, tower_x, tower_y):
        self.tower_x=tower_x
        self.tower_y=tower_y

    def tir(self, ennemi_x, ennemi_y):
        if -20<ennemi_x-self.tower_x<20 and -20<ennemi_y-self.tower_y<20:
            Ennemi.touche()

def placer(self):
    if pyxel.btn(pyxel.KEY_T):
        tour.append[pyxel.MOUSE_POS_X,pyxel.MOUSE_POS_Y]


def vague(numero):
    for i in range (numero):
        if pyxel.frame_count%30:
            ennemi.append[60,114]


class Chateau:
    def __init__(self, vie, coord_x, coord_y):
        self.vie = vie
        self.coord_x = coord_x
        self.coord_y = coord_y
        self.sprite = None

    def prend_degat(self):
        ...

    def draw(self):
        self.sprite = pyxel.blt(48, 2, 0, 0, 40, 32, 16, 0, scale = 1.2)


class Jeu:
    def __init__(self, hauteur, largeur):
        self.fond = pyxel.bltm(0, 0, 0, 0, 0, 128, 128)
        self.hauteur = hauteur
        self.largeur = largeur
        self.joueur = Joueur(64, 64)
        self.chateau = Chateau(3, 48, 2)
        self.ennemi = Ennemi(60, 114, 100, "h")
        self.score_kill = 0
        self.score_piece = 0
        self.tower_list = []
        self.ennemi_list = []
        self.visible = True


    def draw(self):
        pyxel.cls(0)

        self.fond = pyxel.bltm(0, 0, 0, 0, 0, 128, 128)

        ##a changer
        #portail
        pyxel.blt(56,112,0,48,40,16,16,0)
        #piece
        pyxel.blt(3, 11, 0, 34, 18, 4, 4, 0)
        pyxel.text(9, 10, str(self.score_piece), 0)
        pyxel.blt(self.ennemi.ennemi_x, self.ennemi.ennemi_y, 0, 24, 0, 7, 8, 0)
        #hearts
        pyxel.blt(3, 3, 0, 49, 17, 6, 5, 1)
        pyxel.blt(10, 3, 0, 49, 17, 6, 5, 1)
        pyxel.blt(17, 3, 0, 49, 17, 6, 5, 1)
        pyxel.text(90, 3,"Score:" + str(self.score_kill), 0)

        self.joueur.draw()
        self.chateau.draw()
        pyxel.mouse(self.visible)

    def placer(self):
        if pyxel.btn(pyxel.KEY_T):
            tour.append[pyxel.MOUSE_POS_X, pyxel.MOUSE_POS_Y]

    def update(self):
        self.joueur.update()
        self.ennemi.ennemi_mouvement()
        if pyxel.btn(pyxel.KEY_Q):
            quit()

    def run(self):
        pyxel.run(self.update, self.draw)


jeu = Jeu(128, 128)
jeu.run()