from random import choice from time import monotonic, sleep from gint import * from MagicImg import * typecarte = ["COEUR", "PIQUE", "CARREAU", "TREFLE"] imagescartes = [cartecoeur, cartepique, cartecarreau, cartetrefle] couleurs = ["ROUGE", "NOIR"] SPEED = 1/2 WIDTHCARD, HEIGHTCARD = 15, 25 DX = 38 FACTORMONOTONIC = 1E9 InvertedMode = False # mode dans lequel les contrôles sont inversés MadnessMode = False # mode dans lequel le sens est aléatoire backgroundcolor = C_RGB(0,31,0) Conveyors = [] Buckets = [] lastdrop = monotonic() lastswitch = monotonic() lastchangemode = monotonic() level_timings = [ 3, 2.5, 2, 1.5, 1, 0.75, 0.5, 0.25] level_points = [100, 200, 300, 500, 800, 1000, 1500, 2000] def clamp_speed( currentspeed ): nextspeed = currentspeed * 1.5 if nextspeed>=4 : return 4 else: return int(nextspeed) class carte: def __init__(self, Xstart, Ystart): self.X, self.Y = DX+Xstart, Ystart self.type = choice( typecarte ) self.speedX = 0.5 self.speedY = 1 self.tokill = False def draw(self, clear=0): if clear==1: drect(int(self.X-WIDTHCARD/2),int(self.Y-HEIGHTCARD-1),int(self.X+WIDTHCARD/2),self.Y,backgroundcolor) elif self.type=="COEUR": dimage(int(self.X-WIDTHCARD/2),int(self.Y-HEIGHTCARD-1),cartecoeur) elif self.type=="CARREAU": dimage(int(self.X-WIDTHCARD/2),int(self.Y-HEIGHTCARD-1),cartecarreau) elif self.type=="PIQUE": dimage(int(self.X-WIDTHCARD/2),int(self.Y-HEIGHTCARD-1),cartepique) elif self.type=="TREFLE": dimage(int(self.X-WIDTHCARD/2),int(self.Y-HEIGHTCARD-1),cartetrefle) return def update(self, tapis, seaux): global vies, score for t in tapis: if self.X >= t.Xmin and self.X <= t.Xmax and self.Y == t.Y: self.X += t.sens self.speedX, self.speedY = t.sens, 0 return for s in seaux: if self.X >= s.Xmin and self.X <= s.Xmax and self.Y == s.Y: if s.color == "ROUGE" and self.type in ["CARREAU","COEUR"]: score += 10 self.tokill = True elif s.color == "NOIR" and self.type in ["PIQUE","TREFLE"]: score += 10 self.tokill = True else: vies -= 1 self.tokill = True return self.X += self.speedX self.speedY = clamp_speed(max(self.speedY,1)) self.Y += self.speedY class tapis: def __init__(self, X, Y, sens): self.Xmin, self.Xmax, self.Y = DX+X, DX+X+64, Y self.sens = SPEED self.framecount = 0 def draw( self ): image = (int(self.framecount/3)) % 4 dsubimage(self.Xmin,self.Y,tapisroulant,image*16,0,16,16) dsubimage(self.Xmin+16,self.Y,tapisroulant,image*16,16,16,16) dsubimage(self.Xmin+32,self.Y,tapisroulant,image*16,16,16,16) dsubimage(self.Xmin+48,self.Y,tapisroulant,image*16,32,16,16) if self.sens>0: self.framecount += 1 dsubimage(self.Xmin+16,self.Y,fleches,0,0,16,16) dsubimage(self.Xmin+32,self.Y,fleches,0,0,16,16) else: self.framecount -= 1 dsubimage(self.Xmin+16,self.Y,fleches,16,0,16,16) dsubimage(self.Xmin+32,self.Y,fleches,16,0,16,16) return def inverse( self ): self.sens = -self.sens def goleft( self ): global InvertedMode, MadnessMode self.sens = -SPEED if not InvertedMode else SPEED if MadnessMode: self.sens = SPEED*choice([1,-1]) def goright( self ): global InvertedMode, MadnessMode self.sens = SPEED if not InvertedMode else -SPEED if MadnessMode: self.sens = SPEED*choice([1,-1]) class seaux: def __init__(self, Xmin, Xmax, Y, color): self.Xmin, self.Xmax, self.Y = DX+Xmin, DX+Xmax, Y self.color = color def draw( self ): if self.color=="ROUGE": dimage(self.Xmin,self.Y, chapeaurouge) else: dimage(self.Xmin,self.Y, chapeaunoir) return def drawtitre(): global lastswitch,lastchangemode,exitToOS,InvertedMode,MadnessMode,backgroundcolor mode = 0 sortie = False while not sortie and not exitToOS: ev = pollevent() if ev.type == KEYEV_DOWN and ev.key == KEY_EXE: if mode==0: InvertedMode=False MadnessMode=False backgroundcolor=C_RGB(0,31,0) elif mode==1: InvertedMode=True MadnessMode=False backgroundcolor=C_RGB(31,0,0) elif mode==2: InvertedMode=False MadnessMode=True backgroundcolor=C_RGB(31,0,31) sortie = True if ev.type == KEYEV_DOWN and ev.key == KEY_UP: tick = monotonic() if tick-lastchangemode>0.2*FACTORMONOTONIC: lastchangemode=tick mode -=1 mode = mode % 3 if ev.type == KEYEV_DOWN and ev.key == KEY_DOWN: tick = monotonic() if tick-lastchangemode>0.2*FACTORMONOTONIC: lastchangemode=tick mode +=1 mode = mode % 3 if ev.type == KEYEV_DOWN and ev.key == KEY_5: # Boss Exit :D exitToOS = True exit = True dimage(0,0,titre) dimage(20, 120+32*mode, choice(imagescartes)) dupdate() sleep(0.05) def drawbackground( ): dclear(backgroundcolor) for i in range(8): dimage( 5, 3 + i*28, choice(imagescartes)) dimage( 376, 3 + i*28, choice(imagescartes)) def drawlife( Xbase, Ybase ): global vies for i in range(5): if i<=vies-1: dimage(Xbase+i*16,Ybase,vierouge) else: dimage(Xbase+i*16,Ybase,vienoire) def drawscore( Xbase, Ybase ): global score scoretodraw=str(score) for i in range(len(scoretodraw)): num = ord(scoretodraw[len(scoretodraw)-i-1])-ord('0') drect(Xbase-16*i,Ybase,Xbase-16*(i+1),Ybase+16, backgroundcolor) dsubimage(Xbase-16*i,Ybase,numbers,num*16,0,16,16) def drawlevel( Xbase, Ybase ): global niveau for i in range(niveau): dimage(Xbase-i*16,Ybase,lapin) def getlevelfromscore( score ): global niveau level=0 for level in range(8): if score0.2*FACTORMONOTONIC: lastswitch=tick for t in Conveyors: t.goleft() if ev.type == KEYEV_DOWN and (ev.key == KEY_RIGHT or ev.key == KEY_F6): tick = monotonic() if tick-lastswitch>0.2*FACTORMONOTONIC: lastswitch=tick for t in Conveyors: t.goright() if ev.type == KEYEV_DOWN and ev.key == KEY_5: exitToOS = True def checkdrops(): global lastdrop tick=monotonic() level=getlevelfromscore(score) if tick-lastdrop>getdeltatimefromlevel(level)*FACTORMONOTONIC: lastdrop=tick popcarte() def createlevel(): tapis1 = tapis(128, 50, 1) Conveyors.append(tapis1) tapis2 = tapis(83, 100, 1) Conveyors.append(tapis2) tapis3 = tapis(173, 100, 1) Conveyors.append(tapis3) tapis4 = tapis(38, 150, 1) Conveyors.append(tapis4) tapis5 = tapis(128, 150, 1) Conveyors.append(tapis5) tapis6 = tapis(218, 150, 1) Conveyors.append(tapis6) seau1 = seaux(5,45,170,"ROUGE") Buckets.append(seau1) seau2 = seaux(95,135,170,"NOIR") Buckets.append(seau2) seau3 = seaux(185,225,170,"ROUGE") Buckets.append(seau3) seau4 = seaux(275,315,170,"NOIR") Buckets.append(seau4) def drawendgame(): global lastswitch,lastchangemode,exitToOS sortie = False mode = 0 while not sortie and not exitToOS: ev = pollevent() if ev.type == KEYEV_DOWN and ev.key == KEY_EXE: sortie = True if ev.type == KEYEV_DOWN and ev.key == KEY_5: # Boss Exit :D exitToOS = True exit = True if ev.type == KEYEV_DOWN and ev.key == KEY_LEFT: tick = monotonic() if tick-lastchangemode>0.2*FACTORMONOTONIC: lastchangemode=tick mode -=1 mode = mode % 2 if ev.type == KEYEV_DOWN and ev.key == KEY_RIGHT: tick = monotonic() if tick-lastchangemode>0.2*FACTORMONOTONIC: lastchangemode=tick mode +=1 mode = mode % 2 drawbackground() dimage(48, 50, fin) dimage(30+180*mode, 150, choice(imagescartes) ) dimage(176+180*mode, 150, choice(imagescartes) ) drawscore( 250, 90 ) drawlevel( 250, 115 ) dupdate() sleep(0.05) if mode==1: exitToOS = True createlevel() exitToOS = False while not exitToOS: score = 0 vies = 5 niveau = 0 Cards = [] drawtitre() drawbackground() drect( 40, 210, 356, 224, C_RGB(20,10,5) ) popcarte() while vies>0 and not exitToOS: checkkeys() checkdrops() drawlife( 50, 10 ) drawscore( 350, 10 ) drawlevel( 350, 30 ) for t in Conveyors: t.draw() for c in Cards: c.draw(clear=1) c.update(Conveyors,Buckets) if not c.tokill: c.draw() Cards = [card for card in Cards if not card.tokill] for b in Buckets: b.draw() dupdate() print(f"VOUS AVEZ PERDU TOUTES VOS VIES") print(f"{niveau=}") print(f"{score=}") drawendgame()