Простым способом с PostgreSQL было бы использовать array_agg
:
ms = Model.select('"Name", "Office", array_agg("Device") as "Devices"').group(:Name, :Office)
Это даст вам Model
s в ms
, и каждый из них будет иметь extra Devices
, который даст вам массивы строк устройств.
Или вы могли бы использовать string_agg
:
ms = Model.select('"Name", "Office", string_agg("Device", ',') as "Devices"').group(:Name, :Office)
, а методы Devices
предоставят вам строки вместо массивов.
Ни один из них не гарантирует какой-либо конкретный порядок для агрегации, но вы можете указать порядок , если хотите:
array_agg("Device" order by "Device")
string_agg("Device", ',' order by "Device" desc)
Положение полосы (barrect
), положение мяча (ballrect
) и скорость (speed
) должны быть установлены в исходное состояние после перезапуска игры: [119 ]
Создайте функцию, которая инициализирует игровые состояния:
def InitGame():
global ballrect, barrect, speed
speed = [2, 2]
ballrect = ball.get_rect()
barrect = bar.get_rect(center=(320,475))
Вызовите ее один раз при запуске:
screen = pygame.display.set_mode(size)
ball = pygame.image.load("intro_ball.gif")
bar = pygame.image.load("bar_low.gif")
over = pygame.image.load("game_over.gif")
overrect = over.get_rect(center=(width/2, height/2 ))
InitGame();
Вызовите ее снова, когда игра должна быть перезапущена. Я рекомендую не откладывать игру на pygame.time.delay()
. Подсчитайте время, когда игра должна быть перезапущена starttime
. Нарисуйте экран игры или экран «игра окончена» в зависимости от времени:
starttime = 0
while 1:
for event in pygame.event.get():
if event.type == pygame.QUIT: sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w:
# reset game and init the new start time
InitGame()
starttime = pygame.time.get_ticks() + 2000
if pygame.time.get_ticks() > starttime:
keys = pygame.key.get_pressed()
# [...]
screen.fill(black)
screen.blit(ball, ballrect)
screen.blit(bar, barrect)
else:
screen.fill(black)
screen.blit(over, overrect)
pygame.display.flip()