zoukankan      html  css  js  c++  java
  • 碰撞检测

    import pygame
    import sys
    import math
    from pygame.locals import *
    from random import *
    
    class Ball(pygame.sprite.Sprite):
        def __init__(self, image, position, speed, bg_size):
            pygame.sprite.Sprite.__init__(self)
    
            self.image = pygame.image.load(image).convert_alpha()
            self.rect = self.image.get_rect()
            self.rect.left, self.rect.top = position
            self.speed = speed
            self.width, self.height = bg_size[0], bg_size[1]
    
        def move(self):
            self.rect = self.rect.move(self.speed)
    
            if self.rect.right < 0:
                self.rect.left = self.width
    
            elif self.rect.left > self.
                self.rect.right = 0
    
            elif self.rect.bottom < 0:
                self.rect.top = self.height
    
            elif self.rect.top > self.height:
                self.rect.bottom = 0
    def collide_check(item,target):
        col_balls = []
        for each in target:
            distance = math.sqrt(
                math.pow(item.rect.center[0] - each.rect.center[0],2)+
                math.pow(item.rect.center[1] - each.rect.center[1],2))
            if distance <= (item.rect.width + each.rect.width) / 2:
                col_balls.append(each)
    
        return col_balls
    
    def main():
        pygame.init()
    
        ball_image = "gray_ball.png"
        bg_image = "background.png"
    
        running = True
    
        bg_size = width, height = 1024, 681
        screen = pygame.display.set_mode(bg_size)
        pygame.display.set_caption("Play the ball - FishC Demo")
    
        background = pygame.image.load(bg_image).convert_alpha()
    
        balls = []
        group = pygame.sprite.Group()
        BALL_NUM = 5
        for i in range(5):
            position = randint(0, width-100), randint(0, height-100)
            speed = [randint(-10, 10), randint(-10, 10)]
            ball = Ball(ball_image, position, speed, bg_size)
            while pygame.sprite.spritecollide(ball,group,False):
                ball.rect.left,ball.rect.top = randint(0, width-100), randint(0, height-100)
            balls.append(ball)
            group.add(ball)
        clock = pygame.time.Clock()
    
        while running:
            for event in pygame.event.get():
                if event.type == QUIT:
                    sys.exit()
    
            screen.blit(background, (0, 0))
    
            for each in balls:
                each.move()
                screen.blit(each.image, each.rect)
            for i in range(BALL_NUM):
                item = balls.pop(i)
    
                if collide_check(item,balls):
                    item.speed[0] = -item.speed[0]
                    item.speed[1] = -item.speed[1]
                balls.insert(i,item)
                
            for each in group:
                group.remove(each)
    
                if pygame.sprite.spritecollide(each,group,False):
                    item.speed[0] = -item.speed[0]
                    item.speed[1] = -item.speed[1]
                group.add(ball)
            pygame.display.flip()
            clock.tick(30)
            
    
    if __name__ == "__main__":
        main()
  • 相关阅读:
    JAVA多态
    JAVA中的继承
    Nginx配置中root和alisa指定文件路径的区别
    NGINX配置详解
    Jenkins填坑之邮件模板分享
    jenkins填坑之HTML报告样式问题
    Jenkins填坑之仅获取本次构建的HTML报告作为附件发送邮件
    Jenkins填坑之发送邮件无法获取HTML报告作为附件
    jenkins填坑之邮件模板中的变量无法正常获取值
    Jenkins填坑之构建ant项目时,执行结果提示input file xxx.jtl does not exist
  • 原文地址:https://www.cnblogs.com/chenyang920/p/4926063.html
Copyright © 2011-2022 走看看