火。检查矩形列表是否与播放器矩形发生碰撞

时间:2017-06-12 02:13:19

标签: python pygame

我知道我需要一个循环来检查子弹列表是否击中了玩家。 我已尝试在线研究2小时参考代码,但都使用精灵和课程。

#Bullet Collision with players

for i in range(len(bullets_2)):
 #player is a rectangle style object
    if bullets_2[i].colliderect(player):
        player_health -= 10

可悲的是,我的计算机科学老师还没有教过关于精灵或课程的课程,所以让我们避免这种情况。

我尝试使用上面的代码检查列表是否与矩形播放器发生冲突。

如果敌方玩家的子弹击中了玩家,上述代码的目的是让游戏远离健康栏。

编辑:

我只有大约8天的时间来完成这个游戏

TLDR:

如何检查列表是否与矩形碰撞。

1 个答案:

答案 0 :(得分:0)

As in the comment, here's the code.

Here's the images I am using

import pygame, time, sys
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((800,600))
clock = pygame.time.Clock()

class playerClass(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("player.png").convert()
        self.image.set_alpha(196)
        self.rect = self.image.get_rect()
        self.rect.y = 260
        self.rect.x = 500
    def update(self):
        pass

class bulletClass(pygame.sprite.Sprite):
    def __init__(self, speed, starty):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("bullet.png").convert()
        self.rect = self.image.get_rect()
        self.rect.y = starty
        self.rect.x = 0
        self.speed = speed
    def update(self):
        self.rect.x += self.speed

gameExit = False
player = playerClass()
bullet1 = bulletClass(7,265)
bullet2 = bulletClass(10,295)
bullet3 = bulletClass(7,325)
bulletSprites = pygame.sprite.RenderPlain((bullet1, bullet2, bullet3))
playerSprites = pygame.sprite.RenderPlain((player))

bulletRectList = [bullet1.rect, bullet2.rect, bullet3.rect]

while not gameExit:
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    screen.fill((255,255,255))

    bulletSprites.update()
    bulletSprites.draw(screen)

    playerSprites.update()
    playerSprites.draw(screen)

    collidedBulletList = player.rect.collidelistall(bulletRectList)

    if len(collidedBulletList) > 0:
        for i in collidedBulletList:
            print(i)


    pygame.display.update()
    clock.tick(10)

In this code, if you want to add a bullet just declare a new object

bullet4 = bulletClass(speed, yCoordinateToBeginWith)

and append it to bulletSprites and the bulletRectList and you are done. Using sprites simplifies this. Making your code sprite friendly would be difficult at the beginning but appending it is definitely easy afterwards.

相关问题