私は、衝突をテストするためにPygame Rect Classを作成すると助けになると思います。彼らはbulletrect = pygame.rect.Rect(xpos, ypos, xsize, ysize)
を行うことによって作られています。コードの後半で、bulletrect.y +=
1,2または3を実行して下に移動できます。 bulletrect.x =
またはbulletrect.y =
を実行すると、円のxとyの位置が変更されます。画面に円を表示するには、pygame.draw.circle(screen, RED, (bullet_x, bullet_y), 20)
または他の円をpygame.draw.circle(screen, RED, bulletrect.center, 20)
に変更します。実際に衝突をチェックするには、衝突方法を使用してください:playerrect.colliderect(bulletrect)
。 コードは次のようになります。pygameのダウンロードとpygameのrectsについて学ぶために
import pygame
import random
BLACK = (0,0,0)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
pygame.init()
size = (700,700)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Dodger")
done = False
clock = pygame.time.Clock()
bulletrect1 = pygame.rect.Rect((350, 0, 20, 20))
bulletrect2 = pygame.rect.Rect((175, 0, 20, 20))
bulletrect3 = pygame.rect.Rect((525, 0, 20, 20))
circlerect = pygame.rect.Rect((350, 600, 20, 20))
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
circle.rect.x += 5
bulletrect1.rect.y += 1
bulletrect2.rect.y2 += 2
bulletrect3.rect.y3 += 3
screen.fill(BLACK)
pygame.draw.circle(screen, GREEN, (circlerect.center), 15)
pygame.draw.circle(screen, RED, (bulletrect1.center), 20)
pygame.draw.circle(screen, RED, (bulletrect2.center), 20)
pygame.draw.circle(screen, RED, (bulletrect3.center), 20)
if bulletrect1.y == 800:
bulletrect1.y = 0
bulletrect1.x = random.randint(20, 680)
if bulletrect2.y == 800:
bulletrect2.y = 0
bulletrect2.x = random.randint(20, 680)
if bulletrect3.y == 800:
bulletrect3.y = 0
bulletrect3.x = random.randint(20, 680)
if circlerect.x == 685:
circlerect.x = 15
if [bulletrect.colliderect(circlerect) for bulletrect in (bulletrect1, bulletrect2, bulletrect3)]
screen.fill(BLACK)
font = pygame.font.SysFont('Calibri',40,True,False)
text = font.render("GAME OVER",True,RED)
screen.blit(text,[0,0])
pygame.display.flip()
clock.tick(300)
pygame.quit()
もう一つの良いところは、Al Sweigarts free online book教育のpythonです。 Chapter 2は矩形を教える。
EDIT:
最後のコードは本当にここで働いていなかったが、いくつかの新しい改良コードです:ときに
import pygame
import random
BLACK = (0,0,0)
WHITE = (255,255,255)
GREEN = (0,255,0)
RED = (255,0,0)
BLUE = (0,0,255)
pygame.init()
size = (700,700)
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Dodger")
done = False
clock = pygame.time.Clock()
def resetpositions():
global bulletrect1, bulletrect2, bulletrect3, circlerect
bulletrect1 = pygame.rect.Rect((350, 0, 20, 20))
bulletrect2 = pygame.rect.Rect((175, 0, 20, 20))
bulletrect3 = pygame.rect.Rect((525, 0, 20, 20))
circlerect = pygame.rect.Rect((350, 600, 20, 20))
resetpositions()
while not done:
for event in pygame.event.get():
if event.type == pygame.QUIT:
done = True
if event.type == pygame.KEYDOWN:
circlerect.x += 5
bulletrect1.y += 1
bulletrect2.y += 2
bulletrect3.y += 3
screen.fill(BLACK)
pygame.draw.circle(screen, GREEN, (circlerect.center), 15)
pygame.draw.circle(screen, RED, (bulletrect1.center), 20)
pygame.draw.circle(screen, RED, (bulletrect2.center), 20)
pygame.draw.circle(screen, RED, (bulletrect3.center), 20)
if bulletrect1.y == 800:
bulletrect1.y = 0
bulletrect1.x = random.randint(20, 680)
if bulletrect2.y == 800:
bulletrect2.y = 0
bulletrect2.x = random.randint(20, 680)
if bulletrect3.y == 800:
bulletrect3.y = 0
bulletrect3.x = random.randint(20, 680)
if circlerect.x == 685:
circlerect.x = 15
if circlerect.collidelist((bulletrect1, bulletrect2, bulletrect3)) == 0:
screen.fill(BLACK)
font = pygame.font.SysFont('Calibri',40,True,False)
text = font.render("GAME OVER",True,RED)
screen.blit(text,[0,0])
pygame.display.update()
pygame.time.delay(3000)
resetpositions()
pygame.display.flip()
clock.tick(300)
私は)それが今、それは(pygame.display.updateを呼び出して変更しましたGAME OVERが画面に表示されます。また、ゲームオーバーがすぐに消えないように3秒間待つ。また、実際に動作します。 pygame.rect.Rectがどのような目的で使用されているかを明確に理解するために、2つのWebサイトを参照してください。それは多くの助けになります。
コードはまだ動作しません。まだ修正しようとしています。 pygame.rectはかなりの衝突のために作られたので、ウェブサイトに移動します。 – SnootierBaBoon
この問題を解決していただきありがとうございます –