Advertisement
jukaukor

pomppivapallo.py

Sep 13th, 2021
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. # Kappale heitetään vaakasuoraan, putoaa lattiaan, pomppii
  2. # ja menettää koko ajan liike-energiaansa
  3. # Juhani Kaukoranta 13.9.2021
  4. import pygame, math
  5.  
  6. pygame.font.init()
  7. font = pygame.font.Font('freesansbold.ttf', 24)
  8. (width,height) = (2000,1200) # näytön koko pikseleinä
  9. screen = pygame.display.set_mode((width, height))
  10. black = (0,0,0)
  11. blue =(0,0,255)
  12. yellow =(255,255,0)
  13. red = (255,0,0)
  14. magenta = (255,0,255)
  15. screen.fill(black)
  16. pygame.display.set_caption("Vaakasuoraan heitetty pallo putoaa ja pomppii")
  17. sk = 100 # skaalaus matem-koordinaatistosta pygame-koordinaatistoon
  18. (origox,origoy) = (100,1000) # pygamen koordinaatiston origo
  19. r = 4 # heitettävän pallon säde
  20. pygame.draw.line(screen,red,(origox,origoy-100),(origox+1600,origoy-100),2) # x-akseli,maa
  21. pygame.draw.line(screen,red,(origox+1600,origoy-100),(origox+1600,origoy-800),2) # oikea reuna
  22. pygame.draw.line(screen,red,(origox,origoy-100),(origox,origoy-800),2) # vasen reuna
  23. pygame.draw.line(screen,red,(origox,origoy-800),(origox+1600,origoy-800),2) # yläreuna
  24. pygame.draw.line(screen,magenta,(origox+100,origoy-100),(origox+100,origoy-500),4) # lähtöpaalu
  25. pygame.draw.circle(screen,yellow,(origox+101,origoy-500),r) # pallo
  26. pygame.display.flip()
  27. pygame.time.delay(2000)
  28. pygame.draw.circle(screen,black,(origox+101,origoy-500),r) # pallo lähtee lentämään
  29. # huom! Pygamen oordinaatiston y kasvaa alaspäin, matematiikan y kasvaa ylöspäin
  30. # matemaattisen lasusekkeet laskevat matem. koordinaatistossa
  31. # kuvat piirretään Pygamen koordinaatistossa
  32. v0 = 3.5 # alkunopeus
  33. g = -9.80665 # putouskiihtyvyys (alas y-suunnassa)
  34. t0 = 0.0 # aloitusaika
  35. r = 4# kpl esittävän pallon säde
  36. (x,y) = (2,5) # lähtöpaikka metreinä
  37. e = 0.95 # pallon kimmoisuusaste pomppauksessa
  38. vx = v0 # pallon alkunopeus x-suunnassa (vaakasuunta)
  39. vy = 0 # pallon pystynopeus
  40. Dt = 1/100.0 # aika-askel sekunteina
  41. N = 4000 # N*Dt simuloinnin askelien maksimi
  42. pomppuja = 0 # keskeyttää kun pomppuja yli 15
  43.  
  44. for j in range (0,N) : # simulointi alkaa
  45. vy = vy +g*Dt/2 # huom! g negatiivinen, osoittaa alas, päivittää nopeuden y-suunnassa
  46. x = x + vx*Dt # koordinaattien päivitys, matkalisäys = nopeus*aikaväli
  47. y = y + vy*Dt
  48. pygame.draw.circle(screen, yellow,(origox+ sk*x,origoy- sk*y),r) # kpl putoaa vapaasti
  49. pygame.display.flip() # näytetään kpl
  50. pygame.time.delay(4)
  51. pygame.draw.circle(screen, black,(origox+ sk*x,origoy - sk*y),r) # kpl putoaa vapaasti
  52. pygame.time.delay(4)
  53. if origoy - sk*y >= origoy-100-r-1 : # pomppaa x-akselilta (pygamen koordinaatit)
  54. # x-suuntainen eli vaakasuuntainen pomppunopeus säilyy pomppujen aikana
  55. vy = e*abs(vy) # pystysuuntainen pomppunopeuden komponentti muuttuu
  56. pomppuja += 1 # pomppulaskuri
  57. if origox+ sk*x >= origox+1600-r-1 and y > 0 : #pomppaa oikeasta reunasta
  58. # vertailu Pygamen koordinaateilla
  59. vx = -e*abs(vy) # vy säilyy,vx pomppaa takaisin
  60. pomppuja += 1
  61. if origox+ sk*x <= origox+100+2+r and y > 0 : #pomppaa paalusta
  62. # vertailu Pygamen koordinaateilla
  63. vx = e*abs(vy) # vy säilyy,vx pomppaa takaisin
  64. pomppuja += 1
  65. if y < 0 or pomppuja > 15: #lopetetaan
  66. break
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement