Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.96 KB | None | 0 0
  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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement