我的代码应该在计算机随机选择的11个、15个或19个精灵中产生,其中一个在移动,然后停止工作。我不关心看到精灵移动,只要它们确实改变了x坐标。他们应该直接跳到新的位置。我使用的是python 2.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
发布于 2014-06-26 07:37:15
仍然有很多工作要做,但至少令牌正在移动。
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
https://stackoverflow.com/questions/24419525
复制相似问题