有没有办法在运行pygame时,我也可以运行控制台?

时间:2013-07-11 15:15:41

标签: python pygame livewires

我想知道在python中是否有一种方法,即我的games.screen.mainloop()中的图形片段正在运行,如果我可以通过raw_input()从控制台获取用户输入。< / p>

2 个答案:

答案 0 :(得分:4)

是的,请看下面的例子:

import pygame
import threading
import Queue

pygame.init()
screen = pygame.display.set_mode((300, 300))
quit_game = False

commands = Queue.Queue()

pos = 10, 10

m = {'w': (0, -10),
     'a': (-10, 0),
     's': (0, 10),
     'd': (10, 0)}

class Input(threading.Thread):
  def run(self):
    while not quit_game:
      command = raw_input()
      commands.put(command)

i = Input()
i.start()

old_pos = []

while not quit_game:
  try:
    command = commands.get(False)
  except Queue.Empty:
    command = None

  if command in m:
    old_pos.append(pos)
    pos = map(sum, zip(pos, m[command]))

  if pygame.event.get(pygame.QUIT):
    print "press enter to exit"
    quit_game = True

  pygame.event.poll()

  screen.fill((0, 0, 0))
  for p in old_pos:
      pygame.draw.circle(screen, (50, 0, 0), p, 10, 2)
  pygame.draw.circle(screen, (200, 0, 0), pos, 10, 2)
  pygame.display.flip()

i.join()

它会创建一个小红圈。您可以将 w a s d 输入到控制台中来移动它。

enter image description here

答案 1 :(得分:0)

关键是,如果你执行类似raw_input之类的操作,它将停止程序,直到输入输入为止,这将使程序停止每个循环以获取输入,但你可以执行{{1}之类的操作但是他们会打印每个循环

如果您想使用输入InputBox Module,这会在循环中的屏幕上弹出一个小输入框

如果您想从控制台进行操作,您可以尝试线程,我不熟悉但你可以查看Multi-threading Tutorial

这是一个可以帮助你的问题

Pygame writing to terminal

祝你好运! :)