Я пытаюсь применить таймер обратного отсчета в своей игре в крестики-нолики. Поскольку эта игра запускается на терминале, у меня есть несколько проблем в этой реализации, потому что текущая реализация показывает, что таймер работает на той же строке, где должен быть пользователь, который должен ввести, в каком квадранте сетки он хочет играть. Я пытаюсь показать таймер, работающий до конца, не мешая строке, в которой пользователь вводит свою игру. Возможно ли это на терминале? Если да, то как я могу его применить?
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
Отображать время обратного отсчета в терминальной игре в той же строке, где пользователь вводит данные. ⇐ Python
Программы на Python
1734376239
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[b], self.board[c] = "-", "-", "-"
elif b == a + 3:
self.board[a], self.board[b], self.board[c] = "|", "|", "|"
elif a == 0 and c == 8:
self.board[a], self.board[b], self.board[c] = "\\", "\\", "\\"
elif a == 2 and c == 6:
self.board[a], self.board[b], self.board[c] = "/", "/", "/"
def check_win_row(self, player):
for i in range(0, 9, 3):
if self.board[i] == 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
Подробнее здесь: [url]https://stackoverflow.com/questions/79285746/display-countdown-time-in-terminal-game-in-the-same-line-where-user-enters-input[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия