Käyttäjän työkalut

Sivuston työkalut


tormays

Erot

Tämä näyttää erot valitun ja nykyisen version kesken tästä sivusta.

Linkki vertailunäkymään

tormays [2012/11/29 06:57]
moversti luotu
tormays [2015/08/13 04:20]
Rivi 1: Rivi 1:
-====== Suorakaiteiden törmäys ====== 
  
-Verrataan x- ja y-koordinaatteja. 
-<code python> 
-# -*- coding: utf-8 -*- 
-import pygame 
-  
-naytto = pygame.display.set_mode((640,​ 400)) 
-pygame.display.set_caption("​Laatikoiden törmäys"​) 
-  
-def main(): 
-    laatikko1_x = 100 
-    laatikko1_y = 50 
- 
-    laatikko1_korkeus = 100 
-    laatikko1_leveys = 100 
-  
-    laatikko2_x = 250 
-    laatikko2_y = 100 
- 
-    laatikko2_korkeus = 50 
-    laatikko2_leveys = 50 
- 
-    while True: 
-        tapahtuma = pygame.event.poll() 
-        if tapahtuma.type == pygame.QUIT:​ 
-            break 
-  
-        naytto.fill((0,​ 0, 0)) 
-        pygame.draw.rect(naytto,​ (255, 0, 0), (laatikko1_x,​ laatikko1_y,​ laatikko1_korkeus,​ laatikko1_leveys)) 
-  
-        if tapahtuma.type == pygame.KEYDOWN:​ 
-            if tapahtuma.key == pygame.K_RIGHT:​ 
-                laatikko2_x = laatikko2_x + 10 
-            if tapahtuma.key == pygame.K_LEFT:​ 
-                laatikko2_x = laatikko2_x - 10 
-            if tapahtuma.key == pygame.K_DOWN:​ 
-                laatikko2_y = laatikko2_y + 10 
-            if tapahtuma.key == pygame.K_UP:​ 
-                laatikko2_y = laatikko2_y - 10 
- 
-        tormaa = False 
- 
-        # Testataan ensin, ovatko laatikoiden x-koordinaatit päällekkäin. Jos ovat, niin testataan y-koordinaatit 
- 
-        if laatikko1_x < laatikko2_x + laatikko2_leveys and laatikko2_x < laatikko1_x + laatikko1_leveys:​ 
-            if laatikko1_y < laatikko2_y + laatikko2_korkeus and laatikko2_y < laatikko1_y + laatikko1_korkeus:​ 
-                tormaa = True        ​ 
- 
-        if (tormaa): 
-            pygame.draw.circle(naytto, ​ (0,255,0), (10, 10), 5) 
-        else: 
-            pygame.draw.circle(naytto, ​ (255,0,0), (10, 10), 5) 
-            ​ 
-        pygame.draw.rect(naytto,​ (255, 255, 0), (laatikko2_x,​ laatikko2_y,​ laatikko2_korkeus,​ laatikko2_leveys)) 
-  
-        pygame.display.flip() 
-  
-main() 
-</​code>​ 
- 
-====== Pallon ja suorakaiteen törmäys ====== 
- 
-Ei ole helpoimpia tapauksia. 
- 
-<code python> 
-# -*- coding: utf-8 -*- 
-import pygame 
-import math 
-  
-naytto = pygame.display.set_mode((640,​ 400)) 
-pygame.display.set_caption("​Piirtäminen"​) 
-  
-def main(): 
-    pallo_x = 300 
-    pallo_y = 200 
-    pallo_sade = 40 
- 
-    laatikko_x = 100 
-    laatikko_y = 50 
- 
-    laatikko_korkeus = 100 
-    laatikko_leveys = 100 
-  
-    while True: 
-        tapahtuma = pygame.event.poll() 
-        if tapahtuma.type == pygame.QUIT:​ 
-            break 
-  
-        naytto.fill((0,​ 0, 0)) 
-        pygame.draw.rect(naytto,​ (255, 0, 0), (laatikko_x,​ laatikko_y, laatikko_korkeus,​ laatikko_leveys)) 
-  
-        if tapahtuma.type == pygame.KEYDOWN:​ 
-            if tapahtuma.key == pygame.K_RIGHT:​ 
-                pallo_x = pallo_x + 10 
-            if tapahtuma.key == pygame.K_LEFT:​ 
-                pallo_x = pallo_x - 10 
-            if tapahtuma.key == pygame.K_DOWN:​ 
-                pallo_y = pallo_y + 10 
-            if tapahtuma.key == pygame.K_UP:​ 
-                pallo_y = pallo_y - 10 
-# Törmäyksen laskenta otettu sivulta http://​stackoverflow.com/​questions/​401847/​circle-rectangle-collision-detection-intersection/​402010#​402010 ​ 
-        tormaa = False 
- 
-        #lasketaan keskipisteiden etäisyys toisistaan 
-        pallon_etaisyys_x = math.fabs(pallo_x - (laatikko_x + laatikko_leveys/​2)) 
-        pallon_etaisyys_y = math.fabs(pallo_y - (laatikko_y + laatikko_korkeus/​2)) 
- 
-        if (pallon_etaisyys_x > laatikko_leveys/​2 + pallo_sade):​ 
-            tormaa = False 
-        elif (pallon_etaisyys_y > laatikko_korkeus/​2 + pallo_sade):​ 
-            tormaa = False 
-        elif pallon_etaisyys_x <= laatikko_leveys/​2.0:​ 
-            tormaa = True 
-        elif pallon_etaisyys_y <= laatikko_korkeus/​2:​ 
-            tormaa = True 
-        else:    ​ 
-            nurkan_etaisyyden_nelio = (pallon_etaisyys_x - laatikko_leveys/​2)**2 + (pallon_etaisyys_y - laatikko_korkeus/​2)**2 
-            if (nurkan_etaisyyden_nelio <= pallo_sade**2):​ 
-                tormaa = True 
- 
-        if (tormaa): 
-            pygame.draw.circle(naytto, ​ (0,255,0), (10, 10), 5) 
-        else: 
-            pygame.draw.circle(naytto, ​ (255,0,0), (10, 10), 5) 
-            ​ 
-        pygame.draw.circle(naytto,​ (255, 255, 0), (pallo_x, pallo_y), pallo_sade) 
-  
-        pygame.display.flip() 
-  
-main() 
-</​code>​ 
tormays.txt · Viimeksi muutettu: 2015/08/13 04:20 (ulkoinen muokkaus)