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)

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.