0

我想做一些进化模拟的工作。第一部分是在 pygame 上制作独立移动的方块。这似乎工作,除了一个轻微的障碍!当使用 for 语句第 43 行时,它似乎并未将其应用于仅生成第一个方块的所有方块。所以一格按预期移动,其余的只是坐在那里无所事事..请帮助:D

import pygame, sys
from pygame.locals import *
import time
import random

pygame.init()

# set up the window
DISPLAYSURF = pygame.display.set_mode((500, 500), 0, 32)
pygame.display.set_caption('Drawing')

# set up the colors
BLACK = (  0,   0,   0)
WHITE = (255, 255, 255)
RED   = (255,   0,   0)
GREEN = (  0, 255,   0)
BLUE  = (  0,   0, 255)

# draw on the surface object
DISPLAYSURF.fill(BLACK)
robot_list=[]
counter =0
while counter < 26:
    x=random.randrange(1,500)
    x2 = x +6
    y= random.randrange(1,500)
    y2 = y +6
    robot_file=pygame.draw.polygon(DISPLAYSURF, WHITE, ((x, y), (x2, y), (x2, y2), (x, y2)))

    robot_list.append(robot_file)
    counter +=1

# run the game loop
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    for r in robot_list:
        time.sleep(0.1)
        pygame.draw.polygon(DISPLAYSURF, BLACK, ((x, y), (x2, y), (x2, y2), (x, y2)))
        rand2=random.randrange(1,6)
        rand1=random.randrange(-6,6)
        x += rand1
        x2+= rand1
        y+=rand2
        y2+=rand2

        pygame.draw.polygon(DISPLAYSURF, WHITE, ((x, y), (x2, y), (x2, y2), (x, y2)))
        pygame.display.update()

    pygame.display.update()
4

2 回答 2

1

很简单:您的代码中只有一个多边形。我不确定pygame.draw.polygon()返回的是什么;根据文档,它不会返回任何有用的东西。

您需要做的是将多边形的坐标放入列表中robot_file(顺便说一句,这是一个非常糟糕的列表名称),然后更新这些坐标。

于 2012-08-29T08:27:31.737 回答
0

它似乎并未将其应用于仅生成第一个正方形的所有正方形。

这里的问题是你没有任何类型的square。您只需使用绘图功能绘制一些东西。为了更好地理解这一点,也许只需创建一个从主循环中抽象出游戏对象的类。

例子:

class Polygon(object):
    def __init__(self):
       self.x = random.randrange(1,500)
       self.x2 = self.x + 6
       self.y = random.randrange(1,500)
       self.y2 = self.y + 6

    def move(self):
        rand2 = random.randrange(1,6)
        rand1 = random.randrange(-6,6)
        self.x += rand1
        self.x2 += rand1
        self.y += rand2
        self.y2 += rand2

    def draw(self, surface):
        pygame.draw.polygon(surface, WHITE, ((self.x, self.y), (self.x2, self.y), (self.x2, self.y2), (self.x, self.y2)))

for _ in xrange(26):
    robot_list.append(Polygon())

# run the game loop
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    for r in robot_list:
        r.move()
        r.draw(DISPLAYSURF)

    time.sleep(0.1)
    pygame.display.update()
于 2012-08-29T09:34:34.587 回答