Крестики-Нолики на Java #java #программирование #javaдляначинающих

preview_player
Показать описание
#Java #УрокиJava #JavaДляНачинающих

_________________________________________________________________________
tags:

java, java tutorial, learn java, java tutorial for beginners, programming, java programming, tutorial, java full course, java beginner lesson, coding with john, java for beginners, how to code, java programming tutorial, программирование, джава, navin, java language, java placement, webdev, oracle, java coding, lesson, how to learn java, java programming for beginners, java course, how to code java, app development, java basics, java beginner, software engineer, programmer, learn java programming, learn java code, should you learn java, разработка, java code, developer, cloud, java virtual machine, how to code in java, learn to code java for beginners, learn java for beginners, jvm, jdk, java programming, java, как стать программистом, программирование, изучение языков программирования, менторинг программирование, разработка, курсы программирования онлайн, programming, программист, android, языки программирования, it, джава, java для начинающих, it курсы, front-end, программирование на java, java start, обучение java, develop, java уроки для начинающих, изучение java, code blog, выбор языка программирование, java программирование, начало программирование, javascript, уроки java, java уроки, программирование для начинающих, back-end, design, backend, как стать программистом с нуля, coding, java junior, java для чайников, программирование на java с нуля, как стать программистом самостоятельно, прямой эфир о java, как выучить java, как выучить java самостоятельно, как стать джавистом, java с нуля, java уроки с нуля, что учить java, язык программирования java, курсы программирования, js, сравнение, java tutorial for beginners, программирование с нуля, разработчик, курс java, как стать java разработчиком, уроки, джаваскрипт, python, для начинающих
Рекомендации по теме
Комментарии
Автор

📌ССЫЛКА НА TELEGRAM В ОПИСАНИИ ПРОФИЛЯ

vision_journal
Автор

from random import randint as ri
class Cell:
def __init__(self):
self.value = 0

def __bool__(self):
return self.value == 0

class TicTacToe:
FREE_CELL = 0 # свободная клетка
HUMAN_X = 1 # крестик (игрок - человек)
COMPUTER_O = 2 # нолик (игрок - компьютер)

def __init__(self):
self.pole = tuple(tuple(Cell() for i in range(3)) for j in range(3))
self.__is_human_win = False
self.__is_computer_win = False
self.__is_draw = False
self.init()

def init(self):
for i in range(3):
for j in range(3):
self.pole[i][j].value = self.FREE_CELL

def human_go(self):
while True:
print('Введите координаты клетки, которую нужно заполнить: два числа от 0 до 2 через пробел')
try:
r, c = map(int, input().split())
r, c = self.check((r, c))
if self.pole[r][c].value != self.FREE_CELL:
raise ValueError('клетка уже занята')
else:
self.pole[r][c].value = self.HUMAN_X
break
except:
print('Некорректный ввод, введите координаты клетки заново')
self.check_win()

def computer_go(self):
while True:
try:
r, c = ri(0, 2), ri(0, 2)
if self.pole[r][c].value != self.FREE_CELL:
raise ValueError('клетка уже занята')
else:
self.pole[r][c].value = self.COMPUTER_O
break
except ValueError:
continue
except IndexError:
continue
self.show()
self.check_win()

def __bool__(self):
return not any((self.__is_human_win, self.__is_computer_win, self.__is_draw))

def check(self, item):
if type(item) != tuple or len(item) != 2:
raise IndexError('некорректно указанные индексы')
for i in item:
if not(0 <= i < 3):
raise IndexError('некорректно указанные индексы')
return item[0], item[1]

def check_win(self):
self.__is_human_win = False
self.__is_computer_win = False
self.__is_draw = False
for i in range(3):
if self.pole[i][0].value == self.pole[i][1].value == self.pole[i][2].value == self.HUMAN_X:
self.__is_human_win = True
if self.pole[i][0].value == self.pole[i][1].value == self.pole[i][2].value == self.COMPUTER_O:
self.__is_computer_win = True
if self.pole[0][i].value == self.pole[1][i].value == self.pole[2][i].value == self.HUMAN_X:
self.__is_human_win = True
if self.pole[0][i].value == self.pole[1][i].value == self.pole[2][i].value == self.COMPUTER_O:
self.__is_computer_win = True
if self.pole[0][0].value == self.pole[1][1].value == self.pole[2][2].value == self.HUMAN_X:
self.__is_human_win = True
if self.pole[0][0].value == self.pole[1][1].value == self.pole[2][2].value == self.COMPUTER_O:
self.__is_computer_win = True
if self.pole[0][2].value == self.pole[1][1].value == self.pole[2][0].value == self.HUMAN_X:
self.__is_human_win = True
if self.pole[0][2].value == self.pole[1][1].value == self.pole[2][0].value == self.COMPUTER_O:
self.__is_computer_win = True
if self.__is_human_win:
self.__is_human_win = True
if self.__is_computer_win:
self.__is_computer_win = True
if self.__is_draw:
self.__is_draw = True
return self.__is_human_win, self.__is_computer_win, self.__is_draw

def __getitem__(self, item):
r, c = self.check(item)
return self.pole[r][c].value

def __setitem__(self, item, value):
r, c = self.check(item)
if self.pole[r][c]:
self.pole[r][c].value = value
else:
raise ValueError('клетка уже занята')
self.check_win()

def show(self):
for i in range(3):
for j in range(3):
print(self.pole[i][j].value, end=' ')
print()

@property
def is_human_win(self):
return self.__is_human_win

@is_human_win.setter
def is_human_win(self, is_human_win):
if is_human_win:
self.__is_human_win = True
else:
self.__is_human_win = False

@property
def is_computer_win(self):
return self.__is_computer_win

@is_computer_win.setter
def is_computer_win(self, is_computer_win):
if is_computer_win:
self.__is_computer_win = True
else:
self.__is_computer_win = False

@property
def is_draw(self):
return self.__is_draw

@is_draw.setter
def is_draw(self, is_draw):
if is_draw:
self.__is_draw = True
else:
self.__is_draw = False

ismism