Le but est d’amener votre avion à la position (200,200,0)
La difficulté est que nous sommes dans un espace à 3 dimensions et qu’un missile vous poursuit…
Touche 7 et 1 pour augmenter ou diminuer la vitesse sur l’axe des “X”
Touche 8 et 2 pour augmenter ou diminuer la vitesse sur l’axe des “Y”
Touche 9 et 3 pour augmenter ou diminuer la vitesse sur l’axe des “Z”
Au début du jeu votre avion est en X=0, Y=0, Z=255 (point blanc en haut à gauche de l’écran)
Le missile est noir et à la position X=200, Y=200 et Z=0 (là où vous devez aller)
Attention à ne pas sortir de l’écran ou de vous faire rattraper par le missile sinon votre avion explose !
Vous pouvez régler la difficulté en modifiant la valeur de diff. Mettre par exemple 0.4
Notre avion a explosé !
Remarquez que la couleur de l’avion passe du blanc (loin, par exemple Z = 255) au magenta (proche, par exemple Z = 0)
from kandinsky import * from math import sqrt from random import * def decors(): for i in range(201): for j in range(201): set_pixel(i,j,color(180,180,240)) draw_string("AVION", 210,1) draw_string("MISSILE", 210,80) def boum(t,x,y): for i in range(-5,6): for j in range(-5,6): if random()<.3 :set_pixel(x+i,y+j,color(255,0,0) if random()<.5 else 65535) draw_string(t, 210,192) def carre(x,y,c): for i in range(0,3): for j in range(0,3): set_pixel(x+i,y+j,c) def coord(v,y): for l,c in enumerate("XYZ"): draw_string(c+"="+str(v[l])+" "*5,210,y+20*l) def dist(x1,y1,z1,x2,y2,z2): return sqrt((x1-x2)**2+(y1-y2)**2+(z1-z2)**2) def jeu(): decors() xm,ym,zm = 198,198,0 xj,yj,zj = 0,0,255 vx,vy,vz = 0,0,0 fin = False diff=0.7 # entre 0.5 et 1 while not(fin): coord([xj,yj,zj],20) coord([xm,ym,zm],99) z = min(abs(zj),255) carre(xj,yj,color(255,z,255)) carre(xm,ym,0) n=input() if n=="7": vx=min(vx+2,10) elif n=="1": vx=max(vx-2,-10) elif n=="8": vy=min(vy+2,10) elif n=="2": vy=max(vy-2,-10) elif n=="9": vz=min(vz+2,10) elif n=="3": vz=max(vz-2,-10) xj+=vx yj+=vy zj+=vz if dist(xj,yj,zj,200,200,0)<15: fin=True boum("GAGNE !!", 220,192) else: d = dist(xj,yj,zj,xm,ym,zm) draw_string("DIST="+str(int(d))+" "*5,210,170) if d<10 or xj<0 or xj>200 or yj<0 or yj>200: fin=True boum("BOOM !!",xj,yj) else: xm=int(xm+diff*(xj-xm)/sqrt(d)+.5) ym=int(ym+diff*(yj-ym)/sqrt(d)+.5) zm=int(zm+diff*(zj-zm)/sqrt(d)+.5)