Вывожу игровое поле на консоль. Пользователь изменяет его, делая ход. Как считать эти изменения из консоли?
Пыталась считать с помощью stringIO. Почему-то функция getvalue() возвращает пустую строку (предполагаю, что дело в выводе управляющей последовательности). Подскажите, пожалуйста, как считать всё игровое поле после изменения его игроком? P.S. Будете тестировать - заранее ставьте раскладку qwerty, иначе по игровому полю перемещаться не получится
from pynput import keyboard
import os
import sys
from io import StringIO
def get_player(player = 0):
player+=1
if player>3:
player = 1
return player
chars = ' ░█♫'
player = get_player()
def printA():
os.system('cls' if os.name == 'nt' else 'clear')
print('Нажмите A,W,S или D, чтобы перемещаться по игровому полю\nНажмите Q чтобы сделать ход')
print(f'Ход {player}-го игрока')
for i in range(5):
print(a[i][0], a[i][1], a[i][2], a[i][3], a[i][4])
sys.stdout.write("\033[A") # вверх
def readA():
old_stdout = sys.stdout
sys.stdout = buffer = StringIO()
whatWasPrinted = buffer.getvalue()
sys.stdout = old_stdout
print(whatWasPrinted) # Why not to print it?
a = [['_'] * 5, ['_'] * 5, ['_'] * 5, ['_'] * 5, ['_'] * 5]
printA()
x, y = 0, 0
def on_press(key):
global player
global x
global y
try:
if (key.char == 'A' or key.char == 'a') and x>=0:
sys.stdout.write("\033[2D")#влево
x-=1
elif (key.char == 'W' or key.char == 'w') and y<4:
sys.stdout.write("\033[A")#верх
y+=1
elif (key.char == 'D' or key.char == 'd') and x<4:
sys.stdout.write("\033[2C")#вправо
x+=1
elif (key.char == 'S' or key.char == 's') and y>=0:
sys.stdout.write("\033[B")#вниз
y-=1
elif key.char == 'Q' or key.char == 'q':
player = get_player(player)
sys.stdout.write(chars[player])
sys.stdout.write("\033[C")
readA()
#printA()
#print(listener.running)
except AttributeError:
pass
with keyboard.Listener(on_press) as listener:
listener.join()