Le script d’origine avec les explications est ici : https://my.numworks.com/python/schraf/blanche
Ajout d’un 4e jeu nommé “CARRE” et basé sur le jeu CERCLE de Blanche
Un carré de taille variable s’affiche ainsi qu’une jauge à gauche.
Appuyez sur +
ou -
pour définir le niveau de la force que vous voulez appliquer au lancer de votre balle. Appuyez ensuite sur EXE
pour la lancer. Celle-ci doit s’arrêter dans la zone orange, si ce n’est pas le cas vous avez 3 essais pour réussir à trouver la bonne force.
Remarque : Il est possible que la balle fasse plusieurs tours, ce n’est pas grave, il faut juste qu’elle s’arrête au bon endroit !
# Le carré est numéroté de 0 (en haut à gauche)
# et les n° font le tour dans le sens inverse
# des aiguilles d'une montre
# pos_carre cherche les coord (x,y) suivant le n° i
def pos_carre(i, cote):
i %= 4 * cote
if i <= cote: return 0,i
if i <= 2 * cote: return i - cote, cote
if i <= 3 * cote: return cote, 3 * cote - i
return 4 * cote - i, 0
# Dessin d'une balle pour le jeu 4
def boule4(c,cote,i):
x, y = pos_carre(i, cote)
boule(0, c, 115 - 11 * cote + 22 * x, 119 - 11 * cote + 22 * y)
def jeu4(niv):
essai = 0
# Facile = taille 4 ou 5 et Difficile = taille 3 à 5
cote = randint(niv - 1,4)
# La force que le joueur doit trouver
force = randint(3,16)
titre(0, "CARRE")
while essai < 3:
# Dessin du carré
for i in range(4 * cote):
boule4(RO if i > 3 * cote else WH, cote, i)
# La balle bleue à la position 0
boule4(BL, cote, 0)
# Dessin de la jauge à gauche
fill_rect(15,80,20,102,BL)
fill_rect(16,81,18,100,WH)
draw_string("+",20,60,BL)
draw_string("-",20,185,BL)
# Le joueur choisit la force
t,h = 0,0
while t != 2:
from kandinsky import * from random import choice, randint from ion import * from time import sleep,monotonic BL, WH, RO = (80,176,216), (248,252,248), (232,120,88) LAB = "123+-" TOUCHES = [KEY_ONE,KEY_TWO,KEY_THREE,KEY_PLUS,KEY_MINUS] NBJEUX = 4 PH = ["VOUS AVEZ PERDU !","BRAVO !","RATE !"] cles = [] pal = [[255,255,255],[169,233,249],[214,240,248],[81,178,222],[44,123,166],[144,169,183],[240,218,201],[250,205,168],[251,190,142],[200,155,133],[224,149,103],[141,96,76],[182,107,62],[29,67,106],[237,123,93],[100,123,137]] im = "A56B3CB2DCA2CA2BCABDECA2BFA56CB2C2B2DA5BCAB2DCA2C2A57C3ACB2CA4BCAB4A61C6B2A3C2A2C3BCA61C5B2CA2C2ACBC4A2CA59C5B2A2BCAB2A3C3FA59C3BCB3ACA2BCA2G2FD2A59C2ACBCB2C2ACFH2I3JFEA60C2AC3BAJIHKI7JA61DFGJ2CGKI2H3I6A61EJHIKHI3H2IK2J2K2IA61CFJI3HIHIKL2KJK4A62FL3KIHIKM3L4MKA62DJL2MKI2K2ML5MKA62DNL4IHIKMJ2L2KIHA62DNLJL2KHI2K4I2H2A61CDEJ2K2IH2IH8A61CDEJI3H3IH8A61CDEJI3H2I3H5I2A61CDELI3H3I4H2I2KA61BDENJI3HI3KI4K2A61BDENLKI3K4I3K2OA61BD2N2JKIK4I4K3A61BD2N3KI2K2I3K5A61BD2EN2PK2O6K4A61BD2EN2PGKO5K5A61BD2EN2EFJKO2K2I3K2A61CD3N2EFPJK2I5KMA61CBD2ENE3PHIH2I2KM2A61CBD2E6FI3K2M3A61CBD2E5PF2JL2M4A62B2DE4PF4PLM4A62B2D2E3PFG2JLK3M2A62B2D2E3PFH2J2K5A62CBD2E3FJHIJK4I2A62CBD2E3FJHJ2K3I3A62CB2D2E2FJ4K3I2HA62CB2D2E2FJ2L2K2I3GA62CB2D3F2JL2MK2I3GA62CB2D3F2JLMK2I3HCA62CB2D3F2L2K2I4GCA62CBD4F2L2KI4HABA62CBD4F2LKI5GCBA62B4DEPFJI5HGCBA61CB4DPFJKI4H2ACBA61B5DPFJI4H2GCB2A60CB5PFGHI5HGCB2A59CB2CBDF2JGH2I3H2ACB2A59CBCB2DFJGH2I4HGCB3A58C4BF3GH3I4HGCB3A57C4B2F2GH4I3HGACB3A57BC3BF2CGH3I3H2GC2BC2A56B2C3F3GH4I2HG3CB2C2A55CBC3BF2G2H6G3ACB2C2A55CBC2BFCG3H5G3A2CB" def aff_cles(): for i in range(len(cles)): draw_string(chr(254), 10+12*i,200,BL if cles[i] else RO) def visage(): r,i = 0,0 while r<len(im): s = im[r] n = "" r += 1 while r < len(im) and "9" >= im[r] >= "0": n += im[r] r += 1 nb = 1 if n == "" else int(n) c = pal[ord(s)-65] for j in range(nb): if s != "A": fill_rect(4*(i%80),2+4*(i//80),4,4,(c[0],c[1],c[2])) i += 1 sleep(.5) def key(t,duree = -1): dep = monotonic() while True: for (i, k) in enumerate(t): if keydown(k): return i if duree > 0 and monotonic() - dep > duree: return -1 def marge(txt): return 125 - 5 * len(txt) def titre(n, t): fill_rect(0,0,320,222,WH) fill_rect(0,20,250,25,BL) txt = ["ADRESSE","CHANCE","MES DEFIS"][n] draw_string(txt,marge(txt),23,WH,BL) draw_string(t,marge(t),50,BL) visage() aff_cles() def suite(rect = True): draw_string("EXE",110,190,BL) key([KEY_EXE]) draw_string(" ",110,190,WH,WH) if rect: fill_rect(0,80,240,20,WH) def vider(): for i in range(5): boule(i, WH) draw_string(LAB[i],35+40*i,155,BL) def parle(t): draw_string(t,marge(t),80,WH,BL) suite() def boule(n,c,d = 30, y = 130): x = d + 40 * n if c == WH: fill_rect(x,y,20,20,BL) fill_rect(x+1,y+1,18,18,WH) else: fill_rect(x,y,20,20,c) def jeu1(niv): titre(1, "COMBINAISON") blanche = [] essai = 0 numeros = list(range(5)) for i in range(3): v = choice(numeros) blanche.append(v) numeros.remove(v) gagne = False while True: vider() joueur = [] while len(joueur) != 3: t = key(TOUCHES) if t not in joueur: joueur.append(t) boule(t,BL) identiques = len([k for k in range(3) if joueur[k] in blanche]) essai += 1 if identiques == 3: parle(PH[1]) return 1 elif essai < niv: parle("BIEN = {}".format(identiques)) else: for i in blanche: draw_string(LAB[i],35+40*i,155,WH,RO) parle(PH[0]) return 0 def jeu2(niv): titre(0, "STOP CHUTE") essai = 0 while True: delai = randint(100,500) / 100 pos = choice(range(5)) vider() suite() sleep(delai) boule(pos,BL) t = key(TOUCHES,niv/10) essai += 1 if t == pos: parle(PH[1]) return 1 elif essai < 3: boule(pos,RO) parle(PH[2]) else: boule(pos,RO) parle(PH[0]) return 0 def bouge(pos,c,d): boule(pos,c,50,80) sleep(.1) boule(pos,WH,50,80) if pos <= 0 or pos >= 3: d *= -1 pos += d return [pos,d] def jeu3(niv): essai = 0 erreur = .2 if niv == 1 else .1 duree = randint(3,10) while essai < 3: titre(0, "SOUFFLE +") boule(0,RO,210,120) boule(0,BL,10,120) parle("{} s".format(duree)) t = monotonic() while not(keydown(KEY_PLUS)): True essai += 1 d = monotonic() - t n = int(20 * d / duree) for i in range(n): fill_rect(10 + 10 * i,120,20,20,BL) sleep(.2) if i != n-1: fill_rect(10 + 10 * i,120,20,20,WH) if abs(duree - d) < erreur: parle("{} {n:.1f} s".format(PH[1],n=d)) return 1 elif essai < 3: boule(0,RO,210,120) parle("{} {n:.1f} s".format(PH[2],n=d)) else: parle(PH[0]) return 0 def pos_carre(i, cote): i %= 4 * cote if i <= cote: return 0,i if i <= 2 * cote: return i - cote, cote if i <= 3 * cote: return cote, 3 * cote - i return 4 * cote - i, 0 def boule4(c,cote,i): x, y = pos_carre(i, cote) boule(0, c, 115 - 11 * cote + 22 * x, 119 - 11 * cote + 22 * y) def jeu4(niv): essai = 0 cote = randint(niv - 1,4) force = randint(3,16) titre(0, "CARRE") while essai < 3: for i in range(4 * cote): boule4(RO if i > 3 * cote else WH, cote, i) boule4(BL, cote, 0) fill_rect(15,80,20,102,BL) fill_rect(16,81,18,100,WH) draw_string("+",20,60,BL) draw_string("-",20,185,BL) t,h = 0,0 while t != 2: choix = [KEY_PLUS,KEY_MINUS,KEY_EXE] if h == 0: choix.remove(KEY_EXE) t = key(choix) sleep(.1) if t == 0: h = min(h + 4, 100) elif t == 1: h = max(h - 4, 0) fill_rect(16,81,18,100,WH) fill_rect(16,181 - h,18,h,BL) essai += 1 n = int(h * cote / force) for i in range(n): boule4(RO if i % (4 * cote) > 3 * cote else WH, cote, i) boule4(BL, cote, i + 1) sleep(.2) if (n % (4 * cote)) > 3 * cote: parle(PH[1]) return 1 elif essai < 3: suite() else: parle(PH[0]) return 0 def go(): global cles while True: titre(2,"Niveau 1 ou 2 ?") t = key([KEY_ONE,KEY_TWO]) niv = 4 - t defis = list(range(NBJEUX)) for i in range(4): n = choice(defis) defis.remove(n) cles.append(eval("jeu"+str(1 + n))(niv)) titre(2,"Vous gagnez") parle("{} cles".format(sum(cles))) cles = [] go()