SHARE
TWEET

Untitled

a guest Feb 19th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from marioGraphics import *
  2.  
  3. #initialization
  4. dead = False
  5. win = False
  6. n = 3
  7. d = Designer(900,900,-100,100,100,-100)
  8. d.show()
  9.  
  10. #variabili di preparazione
  11. ready = False
  12. intens = 1
  13. direzione = 0
  14.  
  15. #global variables to be shown everywhere (aka images and objects in the viewport)
  16. pianeta = Image("./imgs/pianeta.png",0,0,0.70)
  17. asteroide = Image("./imgs/asteroide.png",90,80,0.25)
  18.  
  19. radius = Circle(pianeta, 80)
  20. arrowdir = Segment(asteroide,asteroide.x-10,asteroide.y)
  21. gauge = Image("./imgs/1.png",-80,-80,0.25)
  22.  
  23.    
  24. def setup():
  25.     #disegnaml
  26.     disegna()
  27.  
  28.     #preparazione, aspettiamo la decisione
  29.     preparazione()
  30.    
  31.    
  32.  
  33.        
  34.    
  35.  
  36.     #condizione d'uscita
  37.     if(dead or win):
  38.         d.freeze()
  39.         d.destroy()
  40.         del d
  41.  
  42.  
  43. def disegna():
  44.     global d
  45.     d.draw(arrowdir)
  46.     d.draw(radius)
  47.     d.draw(gauge)
  48.    
  49.     d.draw(pianeta)
  50.     d.draw(asteroide)
  51.  
  52. def gaugeanimation():
  53.     #disegna il gauge in base al valore di intens
  54.     global d
  55.     global gauge
  56.     global intens
  57.  
  58.     if(intens==1):
  59.         gauge = Image("./imgs/1.png",-80,-80,0.25)
  60.         gauge.draw(d)
  61.  
  62.  
  63.     if(intens==2):
  64.         gauge = Image("./imgs/2.png",-80,-80,0.25)
  65.         gauge.draw(d)
  66.  
  67.  
  68.     if(intens==3):
  69.         gauge = Image("./imgs/3.png",-80,-80,0.25)
  70.         gauge.draw(d)
  71.  
  72.  
  73.     if(intens==4):
  74.         gauge = Image("./imgs/4.png",-80,-80,0.25)
  75.         gauge.draw(d)
  76.  
  77.    
  78.    
  79.  
  80. def preparazione():
  81.      global ready
  82.      global intens
  83.      global direzione
  84.      while(not ready):
  85.          if d.key:
  86.             if d.key=="Return":
  87.                 #siamo pronti!!!
  88.                 ready = True
  89.             if d.key=="Right":
  90.                 #aumenta angolo
  91.                 direzione=0.01
  92.             if d.key=="Left":
  93.                 #diminuisci angolo
  94.                 direzione=-0.01
  95.             if d.key=="Up":
  96.                 #aumenta intensità
  97.                 if(intens<4):
  98.                     intens+=1
  99.             if d.key=="Down":
  100.                 #diminuisci intensità
  101.                 if(intens>1):
  102.                     intens-=1
  103.          update()
  104.          direzione=0
  105.      lancio()
  106.  
  107. def update():
  108.     global arrowdir   #aggiorna le cose che deve aggiornare
  109.     global radius
  110.     d.tick(0.00000000001)
  111.     arrowdir.rotate(direzione)
  112.     arrowdir.redraw(d)
  113.     radius.redraw(d)
  114.     gaugeanimation()
  115.    
  116. def lancio():
  117.     global arrowdir
  118.     global asteroide
  119.     global d
  120.     global intens
  121.     global radius
  122.    
  123.     traiettoria = Line(arrowdir)
  124.     estremo = Point(-100,traiettoria.ordinate(-100))
  125.     #incremento nella direzione in cui è puntato
  126.     if(arrowdir.b.x<arrowdir.a.x):
  127.         incremento = 0.18*intens
  128.     else:
  129.         incremento = -0.18*intens
  130.  
  131.    
  132.     #finchè non entra nell'orbita del pianeta
  133.     while(checktraiettoria()):
  134.         asteroide = asteroide.projection(estremo,incremento)
  135.         d.tick(0.01)
  136.         asteroide.draw(d)
  137.        
  138.            
  139.  
  140.     orbita(estremo,incremento)
  141.        
  142. def checktraiettoria():
  143.     global asteroide
  144.     global radius
  145.     global d
  146.     #controllo che non vada fuori subito
  147.    
  148.     if(not (asteroide.distance(radius.c)>=radius.r)):
  149.         return False
  150.     if(asteroide.x>100 or asteroide.x <-100 or asteroide.y<-100 or asteroide.y>100):
  151.          d.freeze()
  152.          d.destroy()
  153.          del d
  154.          return False
  155.     return True
  156.        
  157.  
  158.    
  159. def orbita(estremo,incremento):
  160.     #entra in orbita
  161.     global asteroide
  162.     global radius
  163.     global dead
  164.     global d
  165.     accelerazione = 1
  166.     mod = 1 #modulazione velocità tangenziale data dal campo gravitazionale
  167.     correzione = 0
  168.    
  169.    
  170.    
  171.     #controllo orbita
  172.  
  173.     while(asteroide.distance(radius.c)<radius.r and not dead and asteroide.distance(radius.c)>radius.r/3):
  174.  
  175.         #rapporto incrementale per calcolare la tangente (usando punto precedente) e quindi muoverlo in due componenti: verso il centro e lungo la tangente
  176.         segmento = Segment(radius.c,asteroide)
  177.         puntoora = Point(asteroide.x,asteroide.y)
  178.         asteroide = asteroide.projection(estremo,incremento*mod-correzione/2)
  179.         asteroide = asteroide.projection(radius.c,(accelerazione/150)*(radius.r/segmento.b.distance(segmento.a)))
  180.        
  181.         d.tick(0.00001)
  182.         asteroide.draw(d)
  183.        
  184.         puntodopo = Point(asteroide.x,asteroide.y)
  185.         traiettoria = Line(puntoora, puntodopo)
  186.         d.draw(traiettoria)
  187.        
  188.         #correzione direzione tangente
  189.         if(puntoora.x>puntodopo.x):
  190.             estremo = Point(-100,traiettoria.ordinate(-100))
  191.         else:
  192.             estremo = Point(100,traiettoria.ordinate(100))
  193.  
  194.         #correzione modulazione
  195.         correzione+=0.001*mod
  196.        
  197.         mod = (radius.r/segmento.b.distance(segmento.a))
  198.         print(traiettoria.angle())
  199.      
  200.        
  201.        
  202.        
  203.        
  204.        
  205.     #è uscito dall'orbita (da fare)
  206.    
  207.    
  208.    
  209.    
  210.    
  211.    
  212.    
  213.    
  214.  
  215.  
  216. setup()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top