Python/Pygame为什么不';我的精灵不动了吗?

Python/Pygame为什么不';我的精灵不动了吗?,python,python-2.7,pygame,sprite,Python,Python 2.7,Pygame,Sprite,我的代码应该在计算机随机选择的11、15或19个精灵中生成,其中一个正在移动,然后停止工作。我不在乎看到精灵移动,只要它们确实在改变x坐标。他们应该跳到新的位置。我正在使用Python2.7和pygame。如果你看到我的代码有问题,我很想听听!一般来说,我对编码还不熟悉,我希望能做得更好。谢谢 我的代码如下: import pygame, sys from pygame.locals import * import pygame import time import random pygame

我的代码应该在计算机随机选择的11、15或19个精灵中生成,其中一个正在移动,然后停止工作。我不在乎看到精灵移动,只要它们确实在改变x坐标。他们应该跳到新的位置。我正在使用Python2.7和pygame。如果你看到我的代码有问题,我很想听听!一般来说,我对编码还不熟悉,我希望能做得更好。谢谢 我的代码如下:

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

pygame.init()

screen = pygame.display.set_mode((720, 480))

gray = pygame.Color(220, 220, 220)
black = pygame.Color(0, 0, 0)
blue = pygame.Color(0, 0, 255)
red = pygame.Color(255, 0 ,0)
white = pygame.Color(255, 255, 255)


t_delta = 0
t_target = 60*15
t_start = time.time()

g=0

#f = open("results", "a")
#f.write("trial number, answer, reaction time, correct answer, number of balls in left circle at response, number of balls in middle circle at response, number of balls in right circle at response\n")
#f.close()

class tokens(pygame.sprite.Sprite):
    def __init__(self, color, width, height):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([width, height])
        self.image.fill(color)

        self.rect = self.image.get_rect()

token_list = pygame.sprite.Group()

'''t_end = time.time() + 60*15
while time.time() < t_end: (other method for determining 15 minute timer)'''

while t_delta < t_target:

    screen.fill(gray)
    pygame.draw.rect(screen, black, Rect((30,140), (200,200)))
    pygame.draw.rect(screen, black, Rect((260,140), (200,200)))
    pygame.draw.rect(screen, black, Rect((490,140), (200,200)))
    pygame.display.update()
    #draws three squares on screen

    if len(token_list) == 0:
        n = random.randint(1,3)
        if n == 1:
            n=11
        elif n == 2:
            n = 15
        elif n == 3:
            n = 19
    #chooses amount of tokens

    x_coords = [265, 305, 345, 385, 425, 265, 305, 345, 385, 425, 265, 305, 345, 385, 425, 265, 305, 345, 385] 
    y_coords = [170, 170, 170, 170, 170, 210, 210, 210, 210, 210, 250, 250, 250, 250, 250, 290, 290, 290, 290]
    # initial x y coords for token 

    left_score = 0
    right_score = 0

    if len(token_list) < n:
        for i in range(0,n):
            token = tokens((255,120,0), 20, 20)
            token.rect.x = x_coords[i-1]
            token.rect.y = y_coords[i-1]

            token_list.add(token)



    if len(token_list) == n:
        token_list.draw(screen)
        pygame.display.update()
        for i in token_list:
            token_direction = random.randint(1,2)
            if token_direction == 1:
                token.rect.x -= 230
                pygame.display.update()
                left_score += 1
                time.sleep(1)

            if token_direction == 2:
                token.rect.x += 230
                pygame.display.update()
                right_score += 1
                time.sleep(1)

    for event in pygame.event.get():
        if event.type == KEYDOWN:
            g+=1
            keys = pygame.key.get_pressed()
            if keys[pygame.K_LEFT]:
                answer = "left"
                #f = open("results", "a")
                #f.write(str(g) + ", left\n")
                #f.close()
                pygame.draw.rect(screen, blue, Rect((30,140), (200,200)))
                print("You picked left!")
                pygame.display.update()
                time.sleep(1)
                screen.fill(black)
                token_list.empty()
                pygame.display.update()
                time.sleep(1)

            elif keys[pygame.K_RIGHT]:
                answer = "right"
                #f = open("results", "a")
                #f.write(str(g) + ", right\n")
                #f.close()
                pygame.draw.rect(screen, blue, Rect((490,140), (200,200)))
                print("You picked right!")
                pygame.display.update()
                time.sleep(1)
                screen.fill(black)
                token_list.empty()
                pygame.display.update()
                time.sleep(1)

        t_delta = time.time() - t_start
import pygame,sys
从pygame.locals导入*
导入pygame
导入时间
随机输入
pygame.init()
screen=pygame.display.set_模式((720480))
灰色=pygame.Color(220220220)
黑色=pygame.Color(0,0,0)
蓝色=pygame.Color(0,0255)
红色=pygame.Color(255,0,0)
白色=pygame.Color(255、255、255)
t_delta=0
t_目标=60*15
t_start=time.time()
g=0
#f=开放(“结果”,“a”)
#f、 写下(“试验编号、答案、反应时间、正确答案、反应时左圆圈的球数、反应时中圆圈的球数、反应时右圆圈的球数\n”)
#f、 关闭()
类令牌(pygame.sprite.sprite):
定义初始值(自身、颜色、宽度、高度):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface([宽度,高度])
self.image.fill(颜色)
self.rect=self.image.get_rect()
token_list=pygame.sprite.Group()
''t_end=time.time()+60*15
而time.time()
当t_delta
还有很多工作要做,但至少代币正在移动

import pygame
from pygame.locals import *

import random

#----------------------------------------------------------------------

class Tokens(pygame.sprite.Sprite):

    def __init__(self, color, x, y, width, height):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([width, height])
        self.image.fill(color)

        self.rect = self.image.get_rect(x=x, y=y)

#----------------------------------------------------------------------

# constants (uppercase names)

GRAY  = (220, 220, 220)
BLACK = (  0,   0,   0)
BLUE  = (  0,   0, 255)
RED   = (255,   0,   0)
WHITE = (255, 255, 255)

#----------------------------------------------------------------------

f = open("results", "a")
f.write("trial number, answer, reaction time, correct answer, number of balls in left circle at response, number of balls in middle circle at response, number of balls in right circle at response\n")
f.close()

g = 0

# initial x y coords for token 

x_coords = [265, 305, 345, 385, 425, 265, 305, 345, 385, 425, 265, 305, 345, 385, 425, 265, 305, 345, 385] 
y_coords = [170, 170, 170, 170, 170, 210, 210, 210, 210, 210, 250, 250, 250, 250, 250, 290, 290, 290, 290]

#----------------------------------------------------------------------

# start program

pygame.init()

screen = pygame.display.set_mode((720, 480))

clock = pygame.time.Clock()

state_reset = True

current_time = pygame.time.get_ticks()
end_time = current_time + 60*15*1000 # ms

# --- mainloop ---

while current_time < end_time:

    if state_reset:
        # chooses amount of tokens

        tokens_to_move = random.choice( (11,15,19) )

        tokens_left = 0
        tokens_right = 0

        # create tokens

        tokens_list = []
        tokens_group = pygame.sprite.Group()

        for i in range(tokens_to_move):
            token = Tokens((255,120,0), x_coords[i], y_coords[i], 20, 20)
            tokens_list.append( token )
            tokens_group.add( token )

        move_speed = 1000

        current_time = pygame.time.get_ticks()
        time_to_move = current_time + move_speed # ms

        selected_side = None

        state_selected = False
        state_reset = False


    # --- DRAWS ---

    screen.fill(GRAY)

    pygame.draw.rect(screen, BLACK, Rect((30,140), (200,200)))
    pygame.draw.rect(screen, BLACK, Rect((260,140), (200,200)))
    pygame.draw.rect(screen, BLACK, Rect((490,140), (200,200)))

    if state_selected:
        if selected_side == 'left':
            pygame.draw.rect(screen, BLUE, Rect((30,140), (200,200)))

        elif selected_side == 'right':
            pygame.draw.rect(screen, BLUE, Rect((490,140), (200,200)))

    tokens_group.draw(screen)

    pygame.display.update()

    # --- CHANGES ---

    if state_selected:
        if selected_time <= current_time:
            state_selected = False

    # moves token

    if tokens_to_move:
        if time_to_move <= current_time:
            time_to_move = current_time + move_speed
            tokens_to_move -= 1
            print 'tokens_to_move:', tokens_to_move
            if random.randint(1,2) == 1:
                tokens_list[tokens_to_move].rect.x -= 230
                tokens_left += 1
            else:
                tokens_list[tokens_to_move].rect.x += 230
                tokens_right += 1
    else:
        state_reset = True

    # --- EVENTS ---

    for event in pygame.event.get():
        if event.type == KEYDOWN:
            g += 1

            if event.key == K_ESCAPE:
                pygame.quit()
                exit()

            elif event.key == pygame.K_SPACE:
                print 'reset'
                state_reset = True

            if not selected_side:
                if event.key == K_LEFT:
                    answer = "left"
                    f = open("results", "a")
                    f.write(str(g) + ", left\n")
                    f.close()
                    selected_side = 'left'
                    print("You picked left!")
                    selected_time = current_time + 1000 # ms
                    move_speed = 0.1
                    state_selected = True

                elif event.key == K_RIGHT:
                    answer = "right"
                    f = open("results", "a")
                    f.write(str(g) + ", right\n")
                    f.close()
                    selected_side = 'right'
                    print("You picked right!")
                    selected_time = current_time + 1000 # ms
                    move_speed = 0.1
                    state_selected = True


    # --- CLOCK ---

    clock.tick(20) # 20 FPS 

    current_time = pygame.time.get_ticks()
    #print 'current_time:', current_time
导入pygame
从pygame.locals导入*
随机输入
#----------------------------------------------------------------------
类令牌(pygame.sprite.sprite):
定义初始值(自身、颜色、x、y、宽度、高度):
pygame.sprite.sprite.\uuuuu init\uuuuuuu(自我)
self.image=pygame.Surface([宽度,高度])
self.image.fill(颜色)
self.rect=self.image.get_rect(x=x,y=y)
#----------------------------------------------------------------------
#常量(大写名称)
灰色=(220,220,220)
黑色=(0,0,0)
蓝色=(0,0255)
红色=(255,0,0)
白色=(255,255,255)
#----------------------------------------------------------------------
f=开放(“结果”,“a”)
f、 写下(“试验编号、答案、反应时间、正确答案、反应时左圆圈的球数、反应时中圆圈的球数、反应时右圆圈的球数\n”)
f、 关闭()
g=0
#令牌的初始x y坐标
x_coords=[265305345385385425265305345385425265345345345345345345345345385]
y_coords=[170170170170210210210210210250250250250250250250250250290290290290290290290]
#----------------------------------------------------------------------
#启动程序
pygame.init()
screen=pygame.display.set_模式((720480))
clock=pygame.time.clock()
状态重置=真
当前时间=pygame.time.get_ticks()
结束时间=当前时间+60*15*1000毫秒
#---主回路---
当前时间<结束时间:
如果状态_重置:
#选择代币的数量
代币移动=随机选择((11,15,19))
剩下的代币