Python Pygame随机绘制不重叠的圆圈 [英] Python Pygame randomly draw non overlapping circles

查看:628
本文介绍了Python Pygame随机绘制不重叠的圆圈的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Im very new to python and seem to be missing something.
I want to randomly draw circles on a pygame display but only if the circles don't overlap each other.
I believe I must find the distance between all circle centers and only draw it if the distance is bigger than circle radius * 2.

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

I've tried many different things but all without success, I always get the same result - circles drawn overlapping.

#!/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.

You did not check against all other circles. I added a variable shouldprint which gets set to false if any other circle is too close.

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随机绘制不重叠的圆圈的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆