poursuite.py

Created by schraf

Created on October 08, 2018

1.61 KB

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)