パンダの休日

雑多な書き残し

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Pythonでキーイベント取得する方法を調べたのでメモ。
外部ライブラリを用いずに非アクティブ状態でもキーボードの状態を取得できるようにしてあります。
キーボードの「←」「→」キーで標準出力を変化させるテスト。
ctypesを使ってwindllから関数を借りてきて使います。
WindowsのGetAsyncKeyState関数に仮想キーコードと呼ばれる数を渡すとその対応するキーの状態がよく分からない整数で返ってきます。
その整数を2進数表記した16桁目が1であれば押されている0なら押されていないという意味らしいです。
渡す数は普通の10進数intでもいいのですが仮想キーコード表が16進表記のため16進数で定数にしてあります。
9行目のgetkey関数では2進16桁目のみが1である16進数の0x8000を&演算子で繋いで0か32768かをブール判定で真偽に変えています。
getkeyの真偽を if に渡してポジションを動かしています。
「←」「→」で移動、「↓」で終了します。
os.system("cls")などでコンソールをクリアさせればテトリスとかも作れそうです。


import ctypes
import time

WIDTH = 80
LEFT = 0x25
RIGHT = 0x27
DOWN = 0x28

def getkey(key):
return(bool(ctypes.windll.user32.GetAsyncKeyState(key)&0x8000))

def line000(pos):
pl = [(pos)%WIDTH, (pos+1)%WIDTH, (pos+2)%WIDTH]
rettxt = ""
for i in range(WIDTH):
if i in pl:
rettxt += "0"
else:
rettxt += "-"
return(rettxt)

def main():
POS = 0
while True:
if getkey(LEFT):
POS =(POS-1)%WIDTH
if getkey(RIGHT):
POS =(POS+1)%WIDTH
print(line000(POS))
time.sleep(0.03)
if getkey(DOWN):
break

if __name__ == '__main__':
main()




keytest.png

スポンサーサイト

shader

Author:shader
多趣味飽き性に振り回されて色々やってます。

直接連絡したい方は御気軽にメールしてください。 3日以内には返信させて頂きます。

名前:
メール:
件名:
本文:

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。