2016-09-12 3 views
0

Dieser Code wurde ursprünglich für die Benutzereingabe gedacht, ich möchte jedoch, dass er zufällig ein Polygon erstellt, anstatt manuell Punkte auszuwählen.
Ich mache es wahrscheinlich eine for-Schleife, anstatt eine while-Schleife, so dass Sie nicht erwähnen müssen.Erstellen eines Zufallskoordinatengenerators

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() 

Was ich versuche zu tun ist, um einen Koordinatenpunkt Randomizer zu machen.
Allerdings ist es aus irgendeinem Grund nicht mit diesem Code kompatibel. Ich habe auch andere Dinge ausprobiert, und Reste dieser Versuche können sichtbar sein.
Das von mir geänderte Segment geht von for event in pygame.event.get zu screen.fill((255,255,255)).
Der ursprüngliche Code war so:

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)) 

Wenn ich das Programm laufen, ich einen Bericht

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 

Fehler.

+0

'Punkt' ist eine' int', keine '2-Item-Sequenz' ... was ist daran verwirrend? –

+0

Soviel ist offensichtlich, aber ich verstehe nicht genau, wie man eine 2-Item-Sequenz macht (wegen schwerer Noobnität). Wahrscheinlich etwas in der Lesung verpasst. – Ben

+1

Denken Sie nur darüber nach, was 'for point in points' eigentlich macht. Iterieren über eine Liste. Und ein einzelnes Element zurückgeben, weil Sie 'points =' anstelle von 'point + =' –

Antwort

0

Ich denke, das

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

wie so geschrieben werden soll (das zusätzliche Komma macht ein Tupel). Sie müssen an die points Liste anhängen, anstatt die Variable neu zuzuweisen.

points.append((point1, point2,)) 

Dann können Sie Schleife über points und sie zeichnen wie Sie bereits zu tun versuchen.

+0

verwendet haben Nun, abgesehen von der Verwendung Ihres 'for point in points: 'Vorschlags habe ich Ihren Vorschlag implementiert und es funktioniert. – Ben

+0

Benötigen Sie das nicht, um über die gesamte Liste zu iterieren und alle Punkte zu zeichnen? –