python pygame实战1: 小球碰撞balls collision

学了点基础, 开始实战吧, 先做个小球碰撞的小游戏:

import pygame
import random
import numpy as np

SCREEN_WIDTH =500
SCREEN_HEIGHT = 400  
FPS = 50
       
class circle(pygame.sprite.Sprite):        
    def __init__(self, screen,r=20):  
        pygame.sprite.Sprite.__init__(self)  
        self.r=r
        self.screen=screen
        self.color=(random.randrange(50,255),random.randrange(50,255),random.randrange(50,255))
        self.image = pygame.Surface((2*r,2*r))
        self.image.set_colorkey((20,120,20))
        self.image.fill((20,120,20))
        self.rect=self.image.get_rect()
        self.rect.x = random.randrange(SCREEN_WIDTH-self.rect.width) 
        self.rect.y = random.randrange(SCREEN_HEIGHT-self.rect.height)
        pygame.draw.circle(self.image,self.color,(self.r,self.r),self.r) 
        self.radius=r  #this makes ".collide_circle" to detect using circle,rather than rect
        self.speedx = random.randrange(1,5)
        self.speedy = random.randrange(1,5) 
    def update(self):
        self.rect.move_ip(self.speedx, self.speedy)
        self.v=np.array([self.speedx,self.speedy])
        if (self.rect.y<=0 or self.rect.y>=SCREEN_HEIGHT-self.rect.height):
            self.speedy=-self.speedy
        if self.rect.x<=0 or self.rect.x>=SCREEN_WIDTH-self.rect.width:
            self.speedx=-self.speedx
        self.screen.blit(self.image, self.rect)
            
     
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((SCREEN_WIDTH , SCREEN_HEIGHT))
c1=circle(screen,30)
balls=pygame.sprite.Group()
for i in range(10):
    c=circle(screen)
    balls.add(c)
run=True
while pygame.sprite.spritecollideany(c1,balls): #避免一开始就碰撞在一起
    c1=circle(screen,30)
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run=False
    c=pygame.sprite.spritecollideany(c1,balls)
    if c:    
        #exchange the speed of c1, and c2
        c1.speedy,c.speedy=c.speedy,c1.speedy
        c1.speedx,c.speedx=c.speedx,c1.speedx
        screen.fill((220, 0, 220))                   
    else:
        screen.fill((0,0,0))
    c1.update()
    balls.update()
    pygame.display.update()
    clock.tick(FPS)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值