Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # merimies hoipertelee kapakasta (0,0) kohti laivaa
- # 0.5 metriä laivaa kohti satunnaissuunnassa -30 <= kulma <= 30 , tn = 0.5
- # 0.25 metriä laivaa kohti satunnaissuunnassa 120 < kulma <= 240 , tn = 0.3
- # Juhani Kaukoranta 16.2.2023
- import random,pygame,math,time
- pygame.font.init()
- font = pygame.font.Font('freesansbold.ttf', 24)
- (width,height) = (1280,720) # piirtoalue
- sk = 30 # skaalauskerroin
- screen = pygame.display.set_mode((width, height))
- black = (0,0,0)
- yellow =(255,255,0)
- red = (255,0,0)
- screen.fill(black)
- pygame.display.set_caption("Hoipertelija kulkee kapakasta kohti laivaa: ")
- pygame.draw.circle(screen,red,(380,500),20,width=3)
- n=100 # parametri hoipertijan askeleille
- def hoipertelu(n):
- pygame.time.delay(3000)
- matka = 0 # metriä
- timer = 0
- (x,y) = (400.0,500.0) # lähtöpaikka
- askelia = 0
- r = 5 # kulkijaympyrän säde
- otsikkotxt = font.render("Juopunut hoipertelee kapakasta kohti laivaa " +str(n)+ " askelta", True, yellow, black)
- screen.blit(otsikkotxt,(100,100))
- for i in range(1,n+1):
- timer += 1 # tulostus varten 1 = 1/100 sekuntia
- arvo = random.random() # arpoo suuntautuuko kohti vai pois
- (xed,yed) = (x,y) # askel xed -> x, yed -> muistiin piirtamistä varten
- if arvo <= 0.7 :
- kulma = random.uniform(-math.pi/6,math.pi/6) # laivaa kohti
- askelpituus = 0.5
- (x1,y1) = (askelpituus*math.cos(kulma),askelpituus*math.sin(kulma))
- x += sk*x1 # laivaa kohti suunnassa -30...+30 astetta
- y += sk*y1
- matka += math.sqrt(x1**2 + y1**2) # metriä
- askelia += 1 # askelten kokonaismäärä
- else:
- kulma = random.uniform(4*math.pi/6+0.01, 8*math.pi/6) # poispäin laivasta
- askelpituus = 0.25
- (x1,y1) = (askelpituus*math.cos(kulma),askelpituus*math.sin(kulma))
- x += sk*x1 # laivasta pois suunnassa 120...240
- y += sk*y1
- matka += math.sqrt(x1**2 + y1**2) # kumulatiivinen matka metriä
- askelia = askelia +1 # askelten kokonaismäärä
- time.sleep(0.2) # yhden sekunnin viive --> simuloinnin kesto n/2 sekunti
- matkatxt0 = font.render("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",True,black,black)
- matkatxt = font.render("matka = "+str(round(10*matka)/10)+" m ", True, yellow, black)
- screen.blit(matkatxt0,(100,200)) # puhdistetaan matkatietoja
- screen.blit(matkatxt,(100,200))
- askeltxt0 = font.render("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",True,black,black)
- askeltxt = font.render("askelia = "+str(askelia)+" m", True, yellow, black)
- screen.blit(askeltxt0,(100,250)) # puhdistetaan askeltietoja
- screen.blit(askeltxt,(100,250))
- if x >= 1200:
- break
- pygame.draw.line(screen,red,(xed,yed),(x,y),2)
- pygame.draw.circle(screen, yellow,(x,y),r)
- pygame.display.flip()
- #ruudun päivytyksen viive vakioidaan
- pygame.time.delay(2)
- pygame.draw.circle(screen,black,(x,y),r)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement