Advertisement
jukaukor

hoipertelu_pygame.py

Feb 16th, 2023
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. # merimies hoipertelee kapakasta (0,0) kohti laivaa
  2. # 0.5 metriä laivaa kohti satunnaissuunnassa -30 <= kulma <= 30 , tn = 0.5
  3. # 0.25 metriä laivaa kohti satunnaissuunnassa 120 < kulma <= 240 , tn = 0.3
  4. # Juhani Kaukoranta 16.2.2023
  5. import random,pygame,math,time
  6. pygame.font.init()
  7. font = pygame.font.Font('freesansbold.ttf', 24)
  8. (width,height) = (1280,720) # piirtoalue
  9. sk = 30 # skaalauskerroin
  10. screen = pygame.display.set_mode((width, height))
  11. black = (0,0,0)
  12. yellow =(255,255,0)
  13. red = (255,0,0)
  14. screen.fill(black)
  15. pygame.display.set_caption("Hoipertelija kulkee kapakasta kohti laivaa: ")
  16. pygame.draw.circle(screen,red,(380,500),20,width=3)
  17. n=100 # parametri hoipertijan askeleille
  18. def hoipertelu(n):
  19. pygame.time.delay(3000)
  20. matka = 0 # metriä
  21. timer = 0
  22. (x,y) = (400.0,500.0) # lähtöpaikka
  23. askelia = 0
  24. r = 5 # kulkijaympyrän säde
  25. otsikkotxt = font.render("Juopunut hoipertelee kapakasta kohti laivaa " +str(n)+ " askelta", True, yellow, black)
  26. screen.blit(otsikkotxt,(100,100))
  27.  
  28.  
  29. for i in range(1,n+1):
  30. timer += 1 # tulostus varten 1 = 1/100 sekuntia
  31. arvo = random.random() # arpoo suuntautuuko kohti vai pois
  32. (xed,yed) = (x,y) # askel xed -> x, yed -> muistiin piirtamistä varten
  33. if arvo <= 0.7 :
  34. kulma = random.uniform(-math.pi/6,math.pi/6) # laivaa kohti
  35. askelpituus = 0.5
  36. (x1,y1) = (askelpituus*math.cos(kulma),askelpituus*math.sin(kulma))
  37. x += sk*x1 # laivaa kohti suunnassa -30...+30 astetta
  38. y += sk*y1
  39. matka += math.sqrt(x1**2 + y1**2) # metriä
  40. askelia += 1 # askelten kokonaismäärä
  41. else:
  42. kulma = random.uniform(4*math.pi/6+0.01, 8*math.pi/6) # poispäin laivasta
  43. askelpituus = 0.25
  44. (x1,y1) = (askelpituus*math.cos(kulma),askelpituus*math.sin(kulma))
  45.  
  46. x += sk*x1 # laivasta pois suunnassa 120...240
  47. y += sk*y1
  48. matka += math.sqrt(x1**2 + y1**2) # kumulatiivinen matka metriä
  49. askelia = askelia +1 # askelten kokonaismäärä
  50.  
  51. time.sleep(0.2) # yhden sekunnin viive --> simuloinnin kesto n/2 sekunti
  52.  
  53. matkatxt0 = font.render("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",True,black,black)
  54. matkatxt = font.render("matka = "+str(round(10*matka)/10)+" m ", True, yellow, black)
  55. screen.blit(matkatxt0,(100,200)) # puhdistetaan matkatietoja
  56. screen.blit(matkatxt,(100,200))
  57. askeltxt0 = font.render("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",True,black,black)
  58. askeltxt = font.render("askelia = "+str(askelia)+" m", True, yellow, black)
  59. screen.blit(askeltxt0,(100,250)) # puhdistetaan askeltietoja
  60. screen.blit(askeltxt,(100,250))
  61. if x >= 1200:
  62. break
  63.  
  64.  
  65. pygame.draw.line(screen,red,(xed,yed),(x,y),2)
  66. pygame.draw.circle(screen, yellow,(x,y),r)
  67. pygame.display.flip()
  68. #ruudun päivytyksen viive vakioidaan
  69. pygame.time.delay(2)
  70. pygame.draw.circle(screen,black,(x,y),r)
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement