2016-09-12 5 views
0

Этот код первоначально предназначался для ввода пользователем, однако я хочу, чтобы он произвольно создавал многоугольник, а не вручную сам выбирал очки.
Я, скорее всего, сделаю цикл for, а не цикл while, поэтому вам не нужно упоминать об этом.Создание генератора случайных координат

import pygame 
from pygame.locals import * 
from sys import exit 
import random 
from random import * 

pygame.init() 
screen = pygame.display.set_mode((640, 480), 0, 32) 
points = [] 


while True: 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      exit() 
     point1 = randint(0,639) 
     point2 = randint(0,479) 
     points = (str(randint(0,639)), str(randint(0,479))) 

    screen.fill((255,255,255)) 

     if len(points) >= 3: 
      pygame.draw.polygon(screen, (0,255,0), points) 
     for point in points: 
      pygame.draw.circle(screen, (0,0,255), point, 5) 

      pygame.display.update() 

Что я пытаюсь сделать, это сделать рандомизатор координатной точки.
По какой-то причине он несовместим с этим кодом. Я пробовал и другие вещи, и остатки этих попыток могут быть видны.
Сегмент I изменен с for event in pygame.event.get на screen.fill((255,255,255)).
Исходный код был таким:

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

    if event.type == MOUSEBUTTONDOWN: 
     points.append(event.pos) 

    screen.fill((255,255,255)) 

Когда я запускаю программу, я получаю сообщение об ошибке в

Traceback (most recent call last): 
    File "H:/Documents/it/Python/manual_box drawer.py", line 26, in <module> 
    pygame.draw.circle(screen, (0,0,255), point, 5) 
TypeError: must be 2-item sequence, not int 

.

+0

'point' является' int', а не '2-item sequence' ... что смущает об этом? –

+0

Это очень очевидно, но (из-за серьезной нужности) я не совсем понимаю, как сделать последовательность из 2 предметов. Возможно, что-то пропустил в чтении. – Ben

+1

Просто подумайте, что на самом деле делает «за точку в точках». Итерирование по списку. И возврат одного элемента, потому что вы использовали 'points =', а не 'points + =' –

ответ

0

Я думаю, что это

points = (str(randint(0,639)), str(randint(0,479))) 

Должно быть написано, как это (дополнительная запятая делает кортеж). Вам нужно добавить в список points, а не переустанавливать переменную.

points.append((point1, point2,)) 

Тогда вы можете перебираем points и сделать их, как вы уже пытаетесь сделать.

+0

Хорошо, кроме использования вашего 'for point in points:' предложение, я внедрил ваше предложение, и оно работает. – Ben

+0

Вам не нужно, чтобы перебирать весь список и рисовать все точки? –

Смежные вопросы