Пытаюсь написать консольную игру в PyCharm, а он отказывается перемещать каретку по тому, что уже было выведено на консоль
На это:
import os
import curses
import sys
#a - двумерный массив 4х5
def printA():
os.system('cls' if os.name == 'nt' else 'clear')
for i in range(5):
print(a[i][0], a[i][1], a[i][2], a[i][3], a[i][4])
curses.setupterm()#возврат каретки на строку выше
os.write(sys.stdout.fileno(), curses.tigetstr('cuu1')) # Upline(cursor up)
PyCharm выдаёт такое:
Traceback (most recent call last): File "C:\Users\79107\PycharmProjects\pythonProject\main.py", line 17, in os.write(sys.stdout.fileno(), curses.tigetstr('cuu1')) # Upline(cursor up) TypeError: a bytes-like object is required, not 'NoneType'
Хотя в repl it всё работает (там у меня проблемы с библиотекой keyboard). Пожалуйста, подскажите, как в PyCarm двигать каретку вверх по уже выведенному тексту так, чтобы этот текст можно было менять.
Ответы (1 шт):
Автор решения: Ирина Мухомор
→ Ссылка
Действительно, дело было в функциях из библиотеки curses. Нашла управляющие последовательности и начала перемещать каретку с их помощью - заработало
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


