Petit jeu qui oppose (ou associe) Flora, une planteuse de pissenlits, à Éole, qui maîtrise le vent.
Flora plante des pissenlits et son but est de remplir le plateau de pissenlits ou de leurs graines.
Éole souffle dans la direction qu’il souhaite et son but est d’empêcher Flora de remplir le plateau avec des pissenlits ou leurs graines.
Il est également possible de coopérer et d’œuvrer à deux pour remplir le plateau (en discutant d’une stratégie commune, ou sans communiquer).
On joue avec les flèches directionnelles et la touche OK (ou EXE).
Bon jeu !
# Jeu du pissenlit, Eole (dieu du vent) contre Flora (déesse des fleurs). # par Afyu, 11/2025 from kandinsky import * from ion import * from time import * from random import randint Palette=[(204,102,51),(204,204,153),(153,51,51),(204,153,102),(153,0,153),(0,255,255),(255,255,255),(102,102,102),(153,102,102),(102,102,51),(0,0,0),(255,255,204),(180,153,18),(255,204,153),(51,51,0)] Image_Sid=['EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE','EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE','EEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE','EEFFFFFFFFFFFFFFFFFFFFFFFEEEEEFFFFFGGGGGGGFFHFEE','EEFFFFFFFFFFFFFFFFFFFFFEEEEEGGEIFFGGGGGGGGGGGJGG','GGGGGFFFFFGGGGGGGFFFFFEEEEEEGGGEIFFFFFFFFHHFFFHE','EEHFFFFFFFFFGGGGGGGGGKKEEEEEIGIEEGFFFFFFFFFJFFHE','EHFFFFFFFFFFFFFFFFFLHKKEEEEEEEEEEEFFFFFFFFFFHFHE','EHFHFFFFFFFFFFFFFLLMJKEEEEEEEEEEEEIFFFFFFFMLGGGE','EHHFFFFFFFFFFFFLLLMMHKEEEEEEEEEEEEINLLLLLLLGGGGG','EHFLLMMMFFFFFLLLLMMMHEEEEEEEEEEEKEIILLLLLLLHKMLG','EHLGGGGMMMMLLLLLLLLMHOEEEKKEEEEKEEEILLLLLLLMKHLG','EGGGGGGGMMLLLLLLLLLMJOEEEEKEEEEEEEONNLLLLMMMHLGG','EGGMHHMLMMLLLLLLLLLMIOOEEEEEEEEEOOINLLLLMHMMHLLE','EGLHKKHLLMLLMMMMMLMMMHOOEEEEOOIIIINNLLMHOJMMOOEE','ELLHKKHMMLMMMMMMMMMMMMIIIIIIIIIINNNNMMOOOMMIHFEE','ELLLLLLMMLIOOOOHIMMMMMMMNNNNNNNNNMMHOKOOMMMHFFEE','EELLLLHHMMIIIOKKOOIHIMMMMMMMNMMMIHOKKOOMMMHHFFEE','EEHHJJOOMMMIINOKKKOOOJHOMGGGGGGGHKKKOIMMMHHJHFEE','EEFOOOOOMMMMHIIOKKKKKKKKMGGGGMGGJKKOIIMMJHHFFHEE','EEFFFJOOHMMMMMIIOKKKKKKKHLGGGMGLJKKIIMMMHHGHGGHG','EEFFFHFJHMMMMMMIIOKKKKKKKMGGLMMHKKONMMMKIFGGJGGG','EEFFKFFMJHMMMMMMMIOKKKKKKKMLLKKKKKNNMMMIMHFFFHEE','EEFHFFFJHHJHMMMMMMNOKKKKKKKKKKKKKONMMMMIFJFFFHEE','EEFHFFFHFHHHMMMMMMMIOKKKKKKKKKKKKINMMMMMFFFFFFEE','EEGGGGGGGMOHJMMMMMMNMKKKKKKKKKKKONNLMMMMFFFFFFEE','EEFFFFFFFFHHHMMMMMMMNJKKKOOOOOOKHNLLMMMFFFFFFFEE','EEFFFFFFFFFHHHMMMMMMMNOKKOOOIIIOGNLLLMMFFFFFFFEE','EEFFFFFFFFFFHHMMMMMMMNMKOOIINNNHLNLLLMMFGGGGGGEE','EEFFFFFFFFFFFJMMMMMMMMLIOIINNNIGLNLLLMMMGGGGGGEE','EEFFFFFFFFFFFMJMMMMMMMNLINNNNLINNLLLLLMMFFFFFFEE','GGGGGGGGGGGFFFMHMMMMMMMNNMGLGGNNNLLLLLMMFFFFFFEE','GGGGGGGGGGGFFFFHMMMMMMMMNNNMNNLNNLLLLLMLFFFFFFEE','EEFFFFFFFFFFFFFMHMMMMMMMMNNNLNNMLLLLLLMMFFGGGGGG','EEFFFFFFFFFFFFHFMHMMMMMMMMINNNIMLLLLLLLMFFFFFFEE','EEFFFFFFFFFFFFFFFMMMMMMMMMMIIIMLLLLLLLLMLFFFFFEE','EEFFFFFFFFFFFFFFFFHMMMMMMLLLMLLLLLLLLLLMMFFFFFEE','EEFFFFFFFFFFFFFFFFMMMMMMLLLLLLLLLLLLLLLLMMFFFFEE','EEFFFFFGGGGGGGGGFFFMMMMMMLLLLLLLLLLLLLLLMMLFFFEE','EEFFFFFGGGGGGGGGFFFFHMMMMLLLLLLLLLLLLLLLLGGGGGEE','EEFFFFFFFFFFFFFFFFFFMHMMMMLLLLLLLLLLLLLLLLMMLFEE','EEFFFFFFFFFFFFFFFFFFFMMMMMMLLLLLLLLLLLLLLLLMMLEE','EEGGGGGFFFFFFFFFFFFFFMJMMMMLLLLLLLLLLLLLLLLLMMEE','EEGGGGGFFFFFFFFFFFFFFFMHMMMMLLLLLLLLLLLLLLLLLMML','EEFFFFFFFFFFFGGGGGGGGGGHHMMMMMLLLLLLLLLLLLLLLLMM','EEFFFFFFFFFFFFFFFFFFFFFMHMMMMMMLLLLLLLLLLLLLLLMM','EEEEEEEEEEEEEEEEEEEEEEEEMJMMMMMMLLLLLLLLLLLLLLMM','EEEEEEEEEEEEEEEEEEEEEEEEEHHHMMMMMMLLLLLLLLLLLLLM'] Image_moulin=['GGGGGGGGKK','GGGGGGKKKA','GGGGGKKKAA','GGGKKKAKAA','GGKAKAKAAA','GKAKAAKAAA','KAKAAKAAAA','KKAAAKAAAA','GKAAKAAAKK','GGKAKAAAKA','GGKKKKKKKK','GGKBBBKBBB','GGKBKBKBKK','GGKBKBKBKK','GGKKBBKBKK','GKBBKBKBBB','GKBBBKKKKK','GKBKBKBBBB','GKBKBKBBKK','GKBBBKBBKK','GKKBBKBBKK','KBBKBKBBBB','KBBBKKKKKK','KBBBKBBBBB','KBBBKBBBBB','KBBBKBBBKC','KBBBKBBKKK','GKBBKBBCKC','GGKBKBBKKK','GGGKKBBCKC','GGGGKKKGGG'] Image_pale=['CCCC','CDCD','CCCC','CDCD','CCCC','CDCD','CCCC','CDCD','CCCC','CDCD','CCCC','CGGG','CGGG'] Image_pale_oblique=['GGGGGGGGCGG','GGGGGGGCDCG','GGGGGGCDCDC','GGGGGCDCDCG','GGGGCDCDCGG','GGGCDCDCGGG','GGCDCDCGGGG','GCDCDCGGGGG','CGCDCGGGGGG','GGGCGGGGGGG'] def affichage_sid(x,y): for ligne in range(len(Image_Sid)): for colonne in range(len(Image_Sid[0])): set_pixel(x+colonne,y+ligne,Palette[ord(Image_Sid[ligne][colonne])-65]) def affichage_moulin(x,y): if mode_dessin: for ligne in range(len(Image_moulin)): for colonne in range(len(Image_moulin[0])): set_pixel(x+colonne,y+ligne,Palette[ord(Image_moulin[ligne][colonne])-65]) set_pixel(x+18-colonne,y+ligne,Palette[ord(Image_moulin[ligne][colonne])-65]) def affichage_pales(x,y,mode_effacer=0): if mode_dessin: for ligne in range(len(Image_pale)): for colonne in range(len(Image_pale[0])): clr=Palette[ord(Image_pale[ligne][colonne])-65] if clr!=(255,255,255): set_pixel(x+colonne,y-13+ligne,(clr,"w")[mode_effacer]) set_pixel(x-colonne,y+13-ligne,(clr,"w")[mode_effacer]) set_pixel(x+13-ligne,y+colonne,(clr,"w")[mode_effacer]) set_pixel(x-13+ligne,y-colonne,(clr,"w")[mode_effacer]) def affichage_pales_obliques(x,y,mode_effacer=0): if mode_dessin: for ligne in range(len(Image_pale_oblique)): for colonne in range(len(Image_pale_oblique[0])): # par Afyu, 11/2025 clr=Palette[ord(Image_pale_oblique[ligne][colonne])-65] if clr!=(255,255,255): set_pixel(x+1+colonne,y-9+ligne,(clr,"w")[mode_effacer]) set_pixel(x-1-colonne,y+9-ligne,(clr,"w")[mode_effacer]) set_pixel(x+9-ligne,y+1+colonne,(clr,"w")[mode_effacer]) set_pixel(x-9+ligne,y-1-colonne,(clr,"w")[mode_effacer]) def dessine_curseur(Xc,Yc,clr): x=Xp+1+20*Xc y=Yp+1+20*Yc fill_rect(x,y,18,1,clr) # haut fill_rect(x,y+18,19,1,clr) # bas fill_rect(x,y,1,19,clr) # gauche fill_rect(x+18,y,1,18,clr) # droite def dessine_plateau(x,y): for rang in range(N+1): fill_rect(x,y+20*rang,N*20+1,1,"b") fill_rect(x+20*rang,y,1,N*20+1,"b") def dessine_pissenlit(Xc,Yc): x=Xp+10+20*Xc y=Yp+10+20*Yc vert_fonce=(0,150,0) # en mode dessin if mode_dessin: fill_rect(x-1,y-4,3,4,vert_fonce) fill_rect(x,y,1,7,vert_fonce) fill_rect(x-7,y+2,5,1,vert_fonce) fill_rect(x+3,y+2,5,1,vert_fonce) fill_rect(x-7,y+3,4,1,vert_fonce) fill_rect(x+4,y+3,4,1,vert_fonce) fill_rect(x-7,y+4,6,1,vert_fonce) fill_rect(x+2,y+4,6,1,vert_fonce) fill_rect(x-7,y+5,5,1,vert_fonce) fill_rect(x+3,y+5,5,1,vert_fonce) set_pixel(x-7,y+6,vert_fonce) set_pixel(x+7,y+6,vert_fonce) fill_rect(x-5,y+6,4,1,vert_fonce) fill_rect(x+2,y+6,4,1,vert_fonce) set_pixel(x-5,y+7,vert_fonce) set_pixel(x+5,y+7,vert_fonce) fill_rect(x-3,y+7,7,1,vert_fonce) fill_rect(x-2,y+8,5,1,vert_fonce) sleep(0.3) jaune_fonce=(250,220,0) fill_rect(x-2,y-6,5,2,jaune_fonce) for k in range(3): set_pixel(x-2+2*k,y-4,jaune_fonce) sleep(0.3) fill_rect(x-2,y-7,5,1,jaune_fonce) fill_rect(x-3,y-6,1,3,jaune_fonce) fill_rect(x+3,y-6,1,3,jaune_fonce) for k in range(2): set_pixel(x-2+4*k,y-3,jaune_fonce) sleep(0.3) fill_rect(x-4,y-6,9,6,jaune_fonce) for k in range(2): fill_rect(x-5+10*k,y-4,1,2,jaune_fonce) fill_rect(x-2,y,5,1,jaune_fonce) sleep(0.3) for k in range(11): vert_fonce=(250-25*k,220-7*k,0) # jaune_fonce=(250,220,0) fill_rect(x-1,y-3,3,2,vert_fonce) fill_rect(x,y-1,1,2,vert_fonce) gris=(250-3*k,220,22*k) fill_rect(x-2,y-7,5,1,gris) fill_rect(x-4,y-6,9,3,gris) for k in range(2): fill_rect(x-5+10*k,y-4,1,2,gris) for k in range(2): fill_rect(x-4+6*k,y-3,3,3,gris) fill_rect(x-2+3*k,y-1,2,2,gris) sleep(0.1) # en mode pas dessin else: for i in (-1,0,1): for j in (-1,0,1): for k in range(7-2*i**2*j**2): set_pixel(x+k*i,y+k*j,vert_fonce) def coup_de_vent_pissenlit(Xc,Yc): x=Xp+10+20*Xc y=Yp+10+20*Yc set_pixel(0,0,(220,220,220)) cible=get_pixel(0,0) set_pixel(0,0,"w") if mode_dessin: if get_pixel(x,y-7)==cible: fill_rect(x-2,y-7,5,1,"w") fill_rect(x-3,y-6,7,1,"w") fill_rect(x-2,y-5,5,1,"w") fill_rect(x-1,y-4,3,1,"w") elif get_pixel(x-2,y-4)==cible: fill_rect(x-4,y-6,9,1,"w") fill_rect(x-4,y-5,9,1,"w") fill_rect(x-3,y-4,7,1,"w") elif get_pixel(x-3,y-3)==cible: fill_rect(x-5,y-4,11,1,"w") fill_rect(x-5,y-3,3,1,"w") fill_rect(x+3,y-3,3,1,"w") set_pixel(x-4,y-2,"w") set_pixel(x+4,y-2,"w") elif get_pixel(x-2,y)==cible: fill_rect(x-4,y-3,3,4,"w") fill_rect(x+2,y-3,3,4,"w") fill_rect(x-1,y-1,1,2,"w") fill_rect(x+1,y-1,1,2,"w") def dessine_graine(Xc,Yc,mode_rose_des_vents=0,clr="gray"): x=(Xp+10,Xr)[mode_rose_des_vents]+(20+mode_rose_des_vents*(10-9*Xc**2*Yc**2))*Xc y=(Yp+10,Yr)[mode_rose_des_vents]+(20+mode_rose_des_vents*(10-9*Xc**2*Yc**2))*Yc # en mode dessin if mode_dessin: if clr=="gray": gris=(150,150,150) elif clr=="w": gris="w" else: gris=(0,0,0) # noir for k in range(-4,4): set_pixel(x+k,y-k,gris) set_pixel(x-1,y-4,gris) set_pixel(x+1,y-4,gris) fill_rect(x,y-3,1,2,gris) set_pixel(x+4,y-1,gris) set_pixel(x+4,y+1,gris) fill_rect(x+2,y,2,1,gris) # en mode pas dessin else: if clr=="gray": vert="g" elif clr=="w": vert="w" else: vert=(0,150,0) fill_rect(x-2,y-1,5,3,vert) fill_rect(x-1,y-2,3,5,vert) def dessine_rose_des_vents(): for i in (-1,0,1): for j in (-1,0,1): if (i,j)!=(0,0): dessine_branche(i,j,"brown") def dessine_branche(dirX,dirY,clr,dessin_fleche=False): # en mode dessin : if mode_dessin: if dirX*dirY==0: fill_rect(Xr+(dirX==-1),Yr+(dirY==-1),(1,22*dirX)[dirX],(1,22*dirY)[dirY],clr) for k in range(5): fill_rect(Xr+(k+1)*dirX+(dirX==-1)+(k+1)*dirY,Yr-(k+1)*dirX+(k+1)*dirY+(dirY==-1),(1,(19-4*k)*dirX)[dirX],(1,(19-4*k)*dirY)[dirY],clr) set_pixel(Xr+k*dirX-k*dirY,Yr+k*dirX+k*dirY,clr) fill_rect(Xr+(5+3*k)*dirX+(dirX==-1)-(5-k)*dirY,Yr+(5-k)*dirX+(5+3*k)*dirY+(dirY==-1),(1,3*dirX)[dirX],(1,3*dirY)[dirY],clr) else: # diagonales fill_rect(Xr+(5+(3-(dirX==-1))*(dirY==dirX))*dirX,Yr+(5+(3-(dirY==-1))*(dirX!=dirY))*dirY,(1,3*dirX)[dirX==dirY],(1,3*dirY)[dirY!=dirX],clr) for k in range(8): fill_rect(Xr+(6+k)*dirX+(dirX==-1)*(dirY==-1),Yr+(6+k)*dirY+(dirX==1)*(dirY==-1),(1,(5-k//2)*dirX)[dirX==dirY],(1,(5-k//2)*dirY)[dirY!=dirX],clr) for k in range(5): fill_rect(Xr+(10+k,5+2*k)[dirY==dirX]*dirX+(dirX==-1)*(dirY==-1),Yr+(5+2*k,10+k)[dirX==dirY]*dirY+(dirX==1)*(dirY==-1),(1,2*dirX)[dirX==dirY],(1,2*dirY)[dirY!=dirX],clr) #fill_rect(Xr+k*dirX+(dirX==-1)+k*dirY,Yr-k*dirX+k*dirY+(dirY==-1),(1,(23-4*k)*dirX)[dirX],(1,(23-4*k)*dirY)[dirY],clr) #fill_rect(Xr+2*dirX+(dirX==-1)+2*dirY,Yr-2*dirX+2*dirY+(dirY==-1),(1,15*dirX)[dirX],(1,15*dirY)[dirY],"b") # en mode pas dessin : else: T=20 for k in range(1,T*(1-0.3*dirX**2*dirY**2)): # branche set_pixel(Xr+k*dirX,Yr+k*dirY,clr) if dessin_fleche: for k in range(4+dirX**2*dirY**2): # flèche d=int(T*(1-0.3*dirX**2*dirY**2)-1) if (dirX,dirY) in ((1,0),(-1,0)): coeff1X,coeff2X,coeff1Y,coeff2Y=-dirX,-dirX,-1,1 elif (dirX,dirY) in ((0,1),(0,-1)): coeff1X,coeff2X,coeff1Y,coeff2Y=-1,1,-dirY,-dirY else: coeff1X,coeff2X,coeff1Y,coeff2Y=-dirX,0,0,-dirY set_pixel(Xr+d*dirX+k*coeff1X,Yr+d*dirY+k*coeff1Y,clr) set_pixel(Xr+d*dirX+k*coeff2X,Yr+d*dirY+k*coeff2Y,clr) mode_dessin=1 fill_rect(0,0,320,222,"w") draw_string("Dandelions",110,70,"purple") draw_string("(Pissenlits)",100,95,"purple") draw_string("Valider avec OK",85,135,"purple") for k in range(2): fill_rect(60,49+k*122,200,1,"g") N=5 Xp,Yp=70,81#(242-20*N)//2,40+(182-20*N)//2 # permet d'aller jusqu'à un plateau de 9×9 cases Xr,Yr=Xp+174,Yp+10 # centre de la rose des vents Xm,Ym=70,75 # position du moulin orientation_pales=0 dessine_rose_des_vents() for k in (-2,10): for l in (-3,5): if keydown(KEY_OK) or keydown(KEY_EXE):break dessine_pissenlit(k,l) #coup_de_vent_pissenlit(k,l) if k==-2: dessine_branche(1,0,"g") coup_de_vent_pissenlit(k,l) for i in range(1,12): dessine_graine(k+i,l) if orientation_pales: # effacer affichage_pales_obliques(Xm+9,Ym+9,1) affichage_moulin(Xm,Ym) affichage_pales(Xm+9,Ym+9) else: affichage_pales(Xm+9,Ym+9,1) affichage_moulin(Xm,Ym) affichage_pales_obliques(Xm+9,Ym+9) orientation_pales=1-orientation_pales if keydown(KEY_OK) or keydown(KEY_EXE):break sleep(0.2) dessine_branche(1,0,"brown") elif l==5: for kb in (-2,10): dessine_branche(0,-1,"g") coup_de_vent_pissenlit(kb,l) for i in range(1,8): dessine_graine(kb,l-i) if orientation_pales: # effacer affichage_pales_obliques(Xm+9,Ym+9,1) affichage_moulin(Xm,Ym) affichage_pales(Xm+9,Ym+9) else: affichage_pales(Xm+9,Ym+9,1) affichage_moulin(Xm,Ym) affichage_pales_obliques(Xm+9,Ym+9) orientation_pales=1-orientation_pales if keydown(KEY_OK) or keydown(KEY_EXE):break sleep(0.2) dessine_branche(0,-1,"brown") while not (keydown(KEY_OK) or keydown(KEY_EXE)):1 while keydown(KEY_OK) or keydown(KEY_EXE):1 while 1: fill_rect(0,0,320,222,"w") draw_string("Présentation",100,10,(80,150,50)) Regles=(("La déesse Flora plante des","pissenlits et le dieu Eole","dirige le vent qui en répand","les graines. Flora veut recou-","vrir le plateau de pissenlits","ou de graines tandis qu'Eole","essaye de l'en empêcher.","","Il est possible de coopérer !"),\ ("Par défaut, la partie se","déroule en 7 tours :","7 pissenlits plantés et","7 coups de vent soufflés.")) # joueur ou IA pour chacun des deux for i in range(2): draw_string("Présentation",100,10,(80,150,50)) for k in range(len(Regles[i])): draw_string(Regles[i][k],15,33+3+18*k,"b") #draw_string("Page "+str(i+1)+"/2 → OK",120,200,(80,150,50)) if i==0: Xp,Yp=60,71 # au lieu de 71, 81 pour l'écran d'accueil dessine_pissenlit(3,-1) Xp,Yp=65,66 dessine_graine(4,3) draw_string("→ OK",270,200,(80,150,50)) #draw_string("Page 1/2 → OK",120,200,(80,150,50)) while not (keydown(KEY_OK) or keydown(KEY_EXE)):1 while keydown(KEY_OK) or keydown(KEY_EXE):1 if i==1: #draw_string("Page 1/2 → OK",120,200,(80,150,50)) draw_string("Taille du plateau : ",15,33+3+18*5,"purple") draw_string("< >",215,33+3+18*5,"orange") N=5 chg=1 while not (keydown(KEY_OK) or keydown(KEY_EXE)): if chg: draw_string(str(N),230,33+3+18*5,"w") N=(N+chg-3)%7+3 draw_string(str(N),230,33+3+18*5,"b") sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) while keydown(KEY_OK) or keydown(KEY_EXE):1 draw_string("Nombre de tours : ",15,33+3+18*6,"purple") draw_string("< >",195,33+3+18*6,"orange") Nb_tours=6 chg=1 while not (keydown(KEY_OK) or keydown(KEY_EXE)): if chg: draw_string(str(Nb_tours),210,33+3+18*6,"w") Nb_tours=(Nb_tours+chg-2)%7+2 draw_string(str(Nb_tours),210,33+3+18*6,"b") sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) while keydown(KEY_OK) or keydown(KEY_EXE):1 draw_string("Affichage : ",15,33+3+18*7,"purple") draw_string("< >",135,33+3+18*7,"orange") Xp,Yp=54,78 mode_dessin=0 chg=1 while not (keydown(KEY_OK) or keydown(KEY_EXE)): if chg: draw_string(("symboles"," dessins")[mode_dessin],150-5*mode_dessin,33+3+18*7,"w") fill_rect(235,33+3+18*7-3,35,20,"w") # efface les deux motifs mode_dessin=1-mode_dessin draw_string(("symboles"," dessins")[mode_dessin],150-5*mode_dessin,33+3+18*7,"b") dessine_pissenlit(9,4) dessine_graine(10,4) sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) while keydown(KEY_OK) or keydown(KEY_EXE):1 draw_string("Flora (pissenlits) : ",15,33+3+18*8,"purple") draw_string("< >",225,33+3+18*8,"orange") Flora_IA=1 chg=1 while not (keydown(KEY_OK) or keydown(KEY_EXE)): if chg: draw_string(("humain","hasard")[Flora_IA],240,33+3+18*8,"w") Flora_IA=1-Flora_IA draw_string(("humain","hasard")[Flora_IA],240,33+3+18*8,"b") sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) while keydown(KEY_OK) or keydown(KEY_EXE):1 draw_string("Eole (vent) : ",15,33+3+18*9,"purple") draw_string("< >",155,33+3+18*9,"orange") Eole_IA=1 chg=1 while not (keydown(KEY_OK) or keydown(KEY_EXE)): if chg: draw_string(("humain","hasard")[Eole_IA],170,33+3+18*9,"w") Eole_IA=1-Eole_IA draw_string(("humain","hasard")[Eole_IA],170,33+3+18*9,"b") sleep(0.2) chg=keydown(KEY_RIGHT)-keydown(KEY_LEFT) draw_string("→ OK",270,200,(80,150,50)) while keydown(KEY_OK) or keydown(KEY_EXE):1 fill_rect(0,0,320,222,"w") #Nb_tours=7 #N=8 Xp,Yp=(222-20*N)//2,40+(182-20*N)//4 # permet d'aller jusqu'à un plateau de 9×9 cases Xr,Yr=Xp+20*N+(320-Xp-20*N)//2,Yp+5*N # centre de la rose des vents #x,y=50,50 Plateau=[["." for k in range(N)] for l in range(N)] dessine_plateau(Xp,Yp) directions_utilisees=[(0,0)] dessine_rose_des_vents() for i in range(Nb_tours): # joueur Pissenlit place un pissenlit draw_string(" Choisir une case à planter ",20,3,"g") if Flora_IA: Xc=randint(0,N-1) Yc=randint(0,N-1) while Plateau[Yc][Xc]=="P": # tant qu'on a choisi une case déjà plantée Xc=randint(0,N-1) Yc=randint(0,N-1) dessine_curseur(Xc,Yc,"g") sleep(0.5) else: Xc,Yc=0,1 chgX,chgY=0,-1 while not ((keydown(KEY_EXE) or keydown(KEY_OK)) and Plateau[Yc][Xc]!="P"): if chgX or chgY: dessine_curseur(Xc,Yc,"w") Xc=(Xc+chgX)%N Yc=(Yc+chgY)%N dessine_curseur(Xc,Yc,"gr"[Plateau[Yc][Xc]=="P"]) sleep(0.2) chgX=keydown(KEY_RIGHT)-keydown(KEY_LEFT) chgY=keydown(KEY_DOWN)-keydown(KEY_UP) while keydown(KEY_EXE) or keydown(KEY_OK):1 # dessine un pissenlit Plateau[Yc][Xc]="P" dessine_graine(Xc,Yc,0,"w") # on efface une éventuelle graine déjà présente dessine_pissenlit(Xc,Yc) dessine_curseur(Xc,Yc,"w")# on efface le curseur # joueur Vent choisit une direction pour le vent draw_string("Choisir la direction du vent",20,3,"brown") if Eole_IA: dirX=randint(-1,1) dirY=randint(-1,1) while (dirX,dirY)==(0,0) or (dirX,dirY) in directions_utilisees: dirX=randint(-1,1) dirY=randint(-1,1) dessine_branche(dirX,dirY,"gr"[(dirX,dirY) in directions_utilisees]) sleep(0.5) else: dirX,dirY=0,1 while not ((keydown(KEY_EXE) or keydown(KEY_OK)) and ((dirX,dirY) not in directions_utilisees)): if chgX or chgY: dessine_branche(dirX,dirY,"w",1) # on efface la flèche dessine_branche(dirX,dirY,"brown",(dirX,dirY) in directions_utilisees) #dessine_rose_des_vents() dirX,dirY=chgX,chgY dessine_branche(dirX,dirY,"gr"[(dirX,dirY) in directions_utilisees],1) # avec la flèche sleep(0.3) chgX=keydown(KEY_RIGHT)-keydown(KEY_LEFT) chgY=keydown(KEY_DOWN)-keydown(KEY_UP) #dessine_branche(dirX,dirY,"r") dessine_graine(dirX,dirY,1) # mode rose des vents directions_utilisees.append((dirX,dirY)) while keydown(KEY_EXE) or keydown(KEY_OK):1 #draw_string(str(dirX)+" "+str(dirY)+" ",230,140,"r") # on applique la direction du vent choisie orientation_pales=0 Xm,Ym=Xp+10*N-9-(10*N+20)*dirX,Yp+10*N-12-(10*N+20)*dirY # position du moulin for ligne in range(N): for colonne in range(N): if Plateau[ligne][colonne]=="P": # si la case contient un pissenlit coup_de_vent_pissenlit(colonne,ligne) d=0 while 0<=ligne+d*dirY<=N-1 and 0<=colonne+d*dirX<=N-1: if Plateau[ligne+d*dirY][colonne+d*dirX]!="P": if orientation_pales: # effacer affichage_pales_obliques(Xm+9,Ym+9,1) affichage_moulin(Xm,Ym) affichage_pales(Xm+9,Ym+9) else: affichage_pales(Xm+9,Ym+9,1) affichage_moulin(Xm,Ym) affichage_pales_obliques(Xm+9,Ym+9) orientation_pales=1-orientation_pales Plateau[ligne+d*dirY][colonne+d*dirX]="G" # on sème une graine dessine_graine(colonne+d*dirX,ligne+d*dirY,0,"noir") # on dessine les nouvelles graines en noir sleep(0.2) d+=1 # on efface le moulin fill_rect(Xm-4,Ym-4,27,36,"w") for ligne in range(N): for colonne in range(N): if Plateau[ligne][colonne]=="G": dessine_graine(colonne,ligne) # on redessine les nouvelles graines en gris dessine_branche(dirX,dirY,"brown",1) # on réaffiche la branche en marron, en ajoutant la flèche draw_string(" "*32,0,3,"w") draw_string(" "*32,0,22,"w") if any("." in ligne for ligne in Plateau): draw_string("Le dieu Eole a gagné.",55,3,"brown") draw_string("La déesse Flora a perdu.",40,22,"g") else: draw_string("Le dieu Eole a perdu.",55,3,"brown") draw_string("La déesse Flora a gagné.",40,22,"g") sleep(2) affichage_sid(Xr-24,Yr+40) draw_string("Oh, un",Xr-30,Yr+95,"b") draw_string("pissenlit !",Xr-55,Yr+115,"b") while not (keydown(KEY_EXE) or keydown(KEY_OK)):1 while keydown(KEY_EXE) or keydown(KEY_OK):1