Bijfah 2021-02-17 08:12 采纳率: 0%
浏览 34

在下11岁,自学Python两年半(还是萌新),用pygame库制作沙滩排球时遇到了碰撞问题,求解决

#main

import pygame, sys, random

size = (800, 600)

speeds = (-0.1, 0.1)

pygame.init()

screen = pygame.display.set_mode(size)

class Ball:

    def __init__(self, screen, size, x, y):

        self.screen = screen

        self.size = size

        self.ball_list = ball_list

        self.ballfile = pygame.image.load('ball.png')

        self.rect = self.ballfile.get_rect()

        self.x = x

        self.y = y

        self.xspeed = random.choice(speeds)

        self.yspeed = random.choice(speeds)

    def move(self):

        self.x += self.xspeed

        self.y += self.yspeed

        self.iscollied = False

        self.rect.left = self.x

        self.rect.top = self.y

        if self.x <= 0 or self.x >= size[0]-70:

            self.xspeed = -1 * self.xspeed

        if self.y <= 0 or self.y >= size[1]-75:

            self.yspeed = -1 * self.yspeed

        self.screen.blit(self.ballfile, (self.x, self.y))

    def point(self):

        self.xspeed = -1 * self.xspeed

        self.yspeed = -1 * self.yspeed

    def collidefind(self):

        self.iscollied = not(self.iscollied)

ball_list = []

for j in range(int(size[0] / 200) - 1):

    for i in range(int(size[1] / 200) - 1):

        ball = Ball(screen, size, j * 200 + 20, i * 200 + 20)

        ball_list.append(ball)

def collide():

    global ball_list

    for ball in ball_list:

        ball_list.remove(ball)

        for balls in ball_list:

            if ball.rect.colliderect(balls.rect):

                if not(ball.iscollied):

                    ball.point()

                    ball.collidefind()

            else:

                if ball.iscollied:

                    ball.collidefind()

        ball_list.append(ball)

while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            pygame.quit()

            sys.exit()

    for balls in ball_list:

        balls.move()

    collide()

    pygame.display.update()

    screen.fill((0, 0, 0))

ball.png是这样的:

抠图抠的不好,有点“其貌不扬”。

求大神们帮帮我

  • 写回答

1条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2021-02-17 08:23
    关注

    请详细描述一些你碰到的 “碰撞问题” 是什么,你尝试了什么解决方法?

    评论

报告相同问题?

悬赏问题

  • ¥15 有关类的报错,在模块里调用另一个模块的方法下的变量时出错
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格
  • ¥15 kali linux用wget archive.kali.org/archive-key.asc指令下载签名无效(失败)
  • ¥15 openHarmony 利用c++程序在dayu210开发板上实现拉取RTSP视频流并且在屏幕上显示
  • ¥15 GD32H757的can通信配置
  • ¥20 nist随机数测试的问题
  • ¥20 帮我解决这个项目,thank you各位程序员
  • ¥15 哪位能用ea软件做一下,有偿