Отображать время обратного отсчета в терминальной игре в той же строке, где пользователь вводит данные.Python

Программы на Python
Ответить
Anonymous
 Отображать время обратного отсчета в терминальной игре в той же строке, где пользователь вводит данные.

Сообщение Anonymous »

Я пытаюсь применить таймер обратного отсчета в своей игре в крестики-нолики. Поскольку эта игра запускается на терминале, у меня есть несколько проблем в этой реализации, потому что текущая реализация показывает, что таймер работает на той же строке, где должен быть пользователь, который должен ввести, в каком квадранте сетки он хочет играть. Я пытаюсь показать таймер, работающий до конца, не мешая строке, в которой пользователь вводит свою игру. Возможно ли это на терминале? Если да, то как я могу его применить?
tic_tac_toe.py
from bot import Bot
import time
import threading

class TicTacToe:
def __init__(self):
self.board = [" "] * 9
self.x = "x"
self.o = "o"

def display_grid(self):
print(f"""
1 |2 |3
{self.board[0]} | {self.board[1]} | {self.board[2]}
_____|_____|_____
4 |5 |6
{self.board[3]} | {self.board[4]} | {self.board[5]}
_____|_____|_____
7 |8 |9
{self.board[6]} | {self.board[7]} | {self.board[8]}
| |
""")

def highlight_win(self, a, b, c):
if b == a + 1:
self.board[a], self.board, self.board[c] = "-", "-", "-"
elif b == a + 3:
self.board[a], self.board, self.board[c] = "|", "|", "|"
elif a == 0 and c == 8:
self.board[a], self.board, self.board[c] = "\\", "\\", "\\"
elif a == 2 and c == 6:
self.board[a], self.board, self.board[c] = "/", "/", "/"

def check_win_row(self, player):
for i in range(0, 9, 3):
if self.board == self.board[i+1] == self.board[i+2] == player:
self.highlight_win(i, i+1, i+2)
return True

return False

def check_win_column(self, player):
columns = [[0, 3, 6], [1, 4, 7], [2, 5, 8]]
for col in columns:
if self.board[col[0]] == self.board[col[1]] == self.board[col[2]] == player:
self.highlight_win(col[0], col[1], col[2])
return True
return False

def check_win_diagonals(self, player):
diagonals = [[0, 4, 8], [2, 4, 6]]
for dialgonal in diagonals:
if self.board[dialgonal[0]] == self.board[dialgonal[1]] == self.board[dialgonal[2]] == player:
self.highlight_win(dialgonal[0], dialgonal[1], dialgonal[2])
return True
return False

def check_win(self, player):
if self.check_win_row(player) or self.check_win_column(player) or self.check_win_diagonals(player):
print(f"{player} wins!!!")
return True
return False

class GameController:
def __init__(self):
self.game = TicTacToe()
self.adversary = Bot()
self.timer_active = True

def get_play(self, player):
while True:
try:
play = input(f"{player}'s turn: ")
if play.isdigit() and 1

Подробнее здесь: https://stackoverflow.com/questions/792 ... ters-input
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»