2017-08-14 52 views
0

我在位置(0,0)有一個塊。定期(比如每1秒)塊的y座標將隨機更新+/- 1。如何管理定期更新的實時輸入

而且每次用戶輸入一個字符(+/-)時,用戶輸入的x座標將會更新+/- 1。

如果它只是x座標,我可以創建一個while循環,當input()獲取一個值時,它將運行到下一個迭代中。 (?可隨時上門)

但我怎麼能處理這兩種定期更新以及實時輸入

+1

如果你問:「如何在沒有無限制地阻止鍵盤輸入的情況下輪詢鍵盤輸入,直到用戶點擊Enter?」,[getch](https://docs.python.org/3/library/msvcrt.html#msvcrt .getch)可能是一個選項。 – Kevin

+1

[可能來自終端的python中檢測鍵盤輸入的最簡單方法是什麼?](https://stackoverflow.com/questions/13207678/whats-the-simplest-way-of-detecting-keyboard-input-in -python-from-the-terminal) – EsotericVoid

+0

@Kevin Ive玩過簡單的終端遊戲(如俄羅斯方塊),用Python編寫,其中更新(以俄羅斯方塊爲例,主要形狀下降一個單位)每隔'x'秒發生一次所以,但是隻要用戶輸入一個字符(我猜測使用getch),形狀就可以向側面移動。更新可以使用一些與時間相關的模塊定期完成。但是如何將其與用戶的輸入整合? –

回答

1

Threading是你的朋友:

import time 
from threading import Thread 


# This defines the thread that handles console input 
class UserInputThread(Thread): 
    def __init__ (self): 
     Thread.__init__(self) 

    # Process user input here: 
    def run(self): 
     while True: 
      text = input("input: ") 
      print("You said", text) 
      # Exit the thread 
      if text == "exit": 
       return 


console_thread = UserInputThread() 
console_thread.start() 

while True: 
    time.sleep(5) 
    print("function") 
    # If the thread is dead, the programme will exit when the current iteration of the while loop ends. 
    if not console_thread.is_alive(): 
     break 

UserInputThread在運行背景並處理用戶輸入。 print("function")可以是您在主線程中需要執行的任何邏輯。

+0

哦,謝謝這有助於很多! –