gpt4 book ai didi

Python Pygame随机绘制不重叠的圆圈

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:25 26 4
gpt4 key购买 nike

我是 python 的新手,似乎遗漏了一些东西。
我想在 pygame 显示器上随机绘制圆圈,但前提是圆圈彼此不重叠。
我相信我必须找到所有圆心之间的距离,并且只有当距离大于 circle radius * 2 时才绘制它。

我尝试了很多不同的方法,但都没有成功,我总是得到相同的结果 - 绘制的圆圈重叠。

#!/usr/bin/env python

import pygame, random, math

red = (255, 0, 0)
width = 800
height = 600
circle_num = 10
tick = 2
speed = 5

pygame.init()
screen = pygame.display.set_mode((width, height))

class circle():
def __init__(self):
self.x = random.randint(0,width)
self.y = random.randint(0,height)
self.r = 100

def new(self):
pygame.draw.circle(screen, red, (self.x,self.y), self.r, tick)

c = []
for i in range(circle_num):
c.append('c'+str(i))
c[i] = circle()
for j in range(len(c)):
dist = int(math.hypot(c[i].x - c[j].x, c[i].y - c[j].y))
if dist > int(c[i].r*2 + c[j].r*2):
c[j].new()
pygame.display.update()

else:
continue

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()

最佳答案

您没有检查所有其他圈子。我添加了一个变量 shouldprint 如果任何其他圆圈太近,它会被设置为 false。

import pygame, random, math

red = (255, 0, 0)
width = 800
height = 600
circle_num = 20
tick = 2
speed = 5

pygame.init()
screen = pygame.display.set_mode((width, height))

class circle():
def __init__(self):
self.x = random.randint(0,width)
self.y = random.randint(0,height)
self.r = 100

def new(self):
pygame.draw.circle(screen, red, (self.x,self.y), self.r, tick)

c = []
for i in range(circle_num):
c.append('c'+str(i))
c[i] = circle()
shouldprint = True
for j in range(len(c)):
if i != j:
dist = int(math.hypot(c[i].x - c[j].x, c[i].y - c[j].y))
if dist < int(c[i].r*2):
shouldprint = False
if shouldprint:
c[i].new()
pygame.display.update()

while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()

关于Python Pygame随机绘制不重叠的圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46702987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com