игра случайным образом расположенная по кругу - PullRequest
0 голосов
/ 27 мая 2018

Так что я все еще очень плохо знаком с Python и пытаюсь учиться на небольших проектах.Игра, которую я создаю, предназначена для проверки точности вашей мыши путем создания группы случайных кругов, на которые игрок должен щелкнуть в течение заданного промежутка времени.В конце игры он должен сообщить игроку их счет и сколько у них было ошибок.

Я использовал черепаху, чтобы попытаться сделать это, но я застрял:

import turtle
import random
t = turtle.Pen()

win = turtle.Screen()
win.bgcolor("lightgreen")
win.title("clicky")


def mycircle(red, green, blue):
    t.color(red, green, blue)
    t.begin_fill()
    x = random.randint(10,50)
    t.circle(x)
    t.end_fill()
    t.up()
    y = random.randint(0,360)
    t.seth(y) 
    if t.xcor() < -300 or t.xcor() > 300:
        t.goto(0, 0)
    elif t.ycor() < -300 or t.ycor() > 300:
        t.goto(0, 0)
    z = random.randint(0,100)
    t.forward(z)
    t.down()

for i in range(0, 20):
    a = random.randint(0,100)/100.0
    b = random.randint(0,100)/100.0
    c = random.randint(0,100)/100.0
    mycircle(a, b, c)

Основные проблемы, которые я пытался выяснить:

  • Как сделать так, чтобы круги появлялись дальше друг от друга?Они довольно часто пересекаются, и я хочу, чтобы этого избежать.

  • Как я могу сделать так, чтобы круги появлялись мгновенно, а не рисовались?

1 Ответ

0 голосов
/ 27 мая 2018

Как сделать так, чтобы круги появлялись дальше друг от друга?

Мы можем отслеживать уже созданные круги и следить за тем, чтобы их центры были как минимум в диаметре друг от друга.Ваша текущая логика размещения кругов слишком сложна и ошибочна.Давайте попробуем упростить его и убедиться, что круги полностью прорисованы в окне.

Как сделать так, чтобы круги появлялись сразу, а не рисовались?

Мыможет печать их, а не рисовать их.Однако, поскольку вы рисуете так мало кругов, мы можем сделать каждый круг черепахой.Это упрощает определение того, щелкнули ли вы по кругу, и его удаление.Я добавил код, который вы можете расширить, чтобы удалить любой кружок, на который вы нажали:

from turtle import Turtle, Screen
from random import random, randint

CURSOR_SIZE = 20

def my_circle(color):
    radius = randint(10, 50)

    circle = Turtle('circle', visible=False)
    circle.shapesize(radius / CURSOR_SIZE)
    circle.color(color)
    circle.penup()

    while True:
        nx = randint(2 * radius - width // 2, width // 2 - radius * 2)
        ny = randint(2 * radius - height // 2, height // 2 - radius * 2)

        circle.goto(nx, ny)

        for other_radius, other_circle in circles:
            if circle.distance(other_circle) < 2 * max(radius, other_radius):
                break  # too close, try again
        else:  # no break
            break

    circle.showturtle()

    circle.onclick(lambda x, y, t=circle: t.hideturtle())  # expand this into a complete function

    return radius, circle

screen = Screen()
screen.bgcolor("lightgreen")
screen.title("clicky")

width, height = screen.window_width(), screen.window_height()

circles = []

for _ in range(0, 20):
    rgb = (random(), random(), random())

    circles.append(my_circle(rgb))

screen.mainloop()

Одна проблема, которую вам нужно решить, - убедиться, что цвет вашего круга не слишком похож на (или так же, как) ваш цвет фона, иначе вы будете охотиться на невидимый круг.Кроме того, при необходимости мы могли бы ускорить процесс рисования кругов.

enter image description here

...