Найти - Пользователи
Полная версия: крестики нолики
Начало » Центр помощи » крестики нолики
1
Erik_CartMan
#глобальные константы
X = X
O = O
EMPTY =  
TIE = “Ничья”
NUM_SQUARES = 9
def display_instruct():
“”“Выводит на экран инструкцию для игрока.”“”
print(
“”“
Добро пожаловать на ринг грандиознейших интеллектуальных состязаний всех времен.
Твой мозг и мой процессор сойдутся в схватке за доской игры ”Крестики - нолики“.)
Чтобы сделать ход, введите число от 0 до 8. Числа однозначно соответствуют полям доски - так, как показано ниже:
0 | 1 | 2
———
3 | 4 | 5
———
6 | 7 | 8
Приготовься к бою, жалкий белковый человечишка. Вот - вот начнется решающее сражение.\n”“”)
def ask_yes_no(question):
“”“Задает вопрос с ответом ‘Да’ или ‘Нет’.”“”
response = None
while response not in (y, n):
response = input(question).lower()
return response
def ask_number(question, low, high):
“”“Просит ввести число из диапазона.”“”
response = None
while response not in range(low, high):
response = int(input(question))
return response
def pieces():
“”“Определяет принадлежность первого хода.”“”
go_first = ask_yes_no(“Хочешь оставить за собой первый ход? (y/n): )
if go_first == y:
print(\nНу что ж, даю тебе фору: играй крестиками.)
human = X
computer = 0
else:
print(\nТвоя удаль тебя погубит… Буду начинать я.)
computer = X
human = O
return computer, human
def new_board():
“”“Создает новую игровую доску.”“”
board = 
for square in range(NUM_SQUARES):
board.append(EMPTY)
return board
def display_board(board):
“”“Отображает игровую доску на экране.”“”
print(\n\t, board, |, board, |, board)
print(\t, “———”)
print(\n\t, board, |, board, |, board)
print(\t, “———”)
print(\n\t, board, |, board, |, board)
def lagal_moves(board):
“”“Создает список доступных ходов.”“”
moves = 
for square in range(NUM_SQUARES):
if board == EMPTY:
moves.append(square)
return moves
def winner(board):
“”“Определяет победителя в игре.”“”
WAYS_TO_WIN = ((0,1,2),
(3,4,5),
(6,7,8),
(0,3,6),
(1,4,7),
(2,5,8),
(0,4,8),
(2,4,6))
for row in WAYS_TO_WIN:
if board[row] == board[row] == board[row] != EMPTY:
winner = board[row]
return winner
if EMPTY not in board:
return TIE
return None
def human_move(board, human):
“”“Получает ход человека”“”
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number(“Твой ход. Выбери одно из полей (0 - 8):, 0, NUM_SQUARES)
if move not in legal:
print(\nСмешной человек! Это поле уже занято. Выбери другое.\n)
print(“Ладно…”)
return move
def computer_move(board, computer, human):
“”“Делает ход за компьютерного противника.”“”
#создадим рабочую копию доски, потому что функция будет менять некоторые значения в списке
board = board
# поля от лучшего к худшему
BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)
print(“Я выберу поле номер”, end =  )
for move in legal_moves(board):
board = computer
# если следующий ходом может победить компьютер, выберем этот ход
if winner(board) == computer:
print(move)
return move
# выполнив проверку, отменим внесенные изменения
board = EMPTY
for move in legal_moves(board):
board = human
# если следующим ходом может победить человек, блокируем ход
if winner(board) == human:
print(move)
return move
# выполнив проверку, отменим внесенные изменения
board = EMPTY
# поскольку следующим ходом ни одна сторона не может победить, выберем лучшее из доступных полей
for move in BEST_MOVES:
if move in legal_moves(board):
print(move)
return move
def next_turn(turn):
“”“Осуществляет переход хода”“”
if turn == X:
return 0
else:
return X
def congrat_winner(the_winner, computer, human):
“”“Поздравляем победителя игры.”“”
if the_winner != TIE:
print(“Три”, the_winner, “в ряд!\n)
else:
print(“Ничья!\n)
if the_winner == computer:
print(“Как я и предсказывал, победа в очередной раз осталоась за мной.\n 
“Вот еще один довод в пользу того, что компьютеры превосходят людей решительно во всем.)
elif the_winner == human:
print(“О нет, этого не может быть! Неужели ты как - то сумел перехитрить меня, белковый? \n)
elif the_winner == TIE:
print(“Тебе несказанно повезло, дружок: ты сумел свести игру вничью. \n)
def main():
display_instruct()
computer, human = pieces()
turn = X
board = new_board()
display_board(board)
while not winner(board):
if turn == human:
move = human_move(board, human)
board = human
else:
move = computer_move(board, computer, human)
board = computer
display_board(board)
turn = next_turn(turn)
the_winner = winner(board)
congrat_winner(the_winner, computer, human)
main()
input(\n\nНажмите Enter, чтобы выйти.)
Сам код программы!
Функция def human_move(board, human): не работает из за не правильного определения legal = legal_moves(board) подскажите где еще ошибки и как их исправить

пример из книги Майкла Доусона
FishHook
Питоний код без отступов, серьезно?
Erik_CartMan
http://python.su/forum/topic/29388/ во вложении файл
ampermetr
404
рабочий вариант игры,уже не помню откуда списал
import random
#крестики-нолики
X = "X"
O = "O"
EMPTY = " "
TIE = "ничья"
NUM_SQUARES = 9
def main():
	return 0
def display_instruct():
	print ("""
	0 | 1 | 2
	---------
	3 | 4 | 5
	---------
	6 | 7 | 8
	""")
def ask_yes_no(question):
	response = None
	while response not in ("y", "n"):
		response = input (question).lower()
	return response
	
def ask_number(question, low, high):
	response = None
	while response not in range(low, high):
		response = int(input(question))
	return response
def pieces():
	go_first = ask_yes_no("Кто будет ходить первым?\n")
	if go_first == "y":
		print ("Ваш ход!")
		human = X
		computer = O
	else:
		print ("Начинаю")
		human = O
		computer = X
	return computer, human
	
def new_board():
	board = []
	for square in range(NUM_SQUARES):
		board.append(EMPTY)
	return board
	
def display_board(board):
	print ("\n\t", board[0], " | ", board[1], " | ", board[2])
	print ("\t", "-----------")
	print ("\n\t", board[3], " | ", board[4], " | ", board[5])
	print ("\t", "-----------")
	print ("\n\t", board[6], " | ", board[7], " | ", board[8])
	print ("\t", "-----------\n")
	
def legal_moves(board):
	moves =[]
	for square in range(NUM_SQUARES):
		if board[square] == EMPTY:
			moves.append(square)
	return moves
	
def winner(board):
	WAYS_TO_WIN = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6))
	for row in WAYS_TO_WIN:
		if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
			winner = board[row[0]]
			return winner
		if EMPTY not in board:
			return TIE
	return None
	
def human_move(board, human):
	legal = legal_moves(board)
	move = None
	while move not in legal:
		move = ask_number("Ваш ход ", 0, NUM_SQUARES)
		if move not in legal:
			print ("\nПоле уже занято.\n")
	print ("OK.")
	return move
	
def computer_move(board, computer, human):
	#создаем копию доски
	board = board[:]
	# приоритет полей
	BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)
	print ("Ход на поле номер", end=" ")
	for move in legal_moves(board):
		board[move] = computer
		#если ход ведет к победе, то выбираем его
		if winner(board) == computer:
			print (move)
			return move
		board[move] = EMPTY
	for move in legal_moves(board):
		board[move] = human
		if winner(board) == human:
			print (move)
			return move
		board[move] = EMPTY
	for move in BEST_MOVES:
		if move in legal_moves(board):
			print (move)
			return move
def next_turn(turn):
	if turn == X:
		return O
	else:
		return X
		
def congrat_winner(the_winner, computer, human):
	if the_winner != TIE:
		print (the_winner, "побеждают\n")
	else:
		print ("Ничья")
	if the_winner == computer:
		print ("\nПобеда компьютера\n")
	elif the_winner == human:
		print ("\nПобеда игрока\n")
	elif the_winner == TIE:
		print ("\n Ничья")
def game():
	display_instruct()
	computer, human = pieces()
	turn = X
	board = new_board()
	display_board(board)
	while not winner(board):
		if turn == human:
			move = human_move(board, human)
			board[move] = human
		else:
			move = computer_move(board, computer, human)
			board[move] = computer
		display_board(board)
		turn = next_turn(turn)
	the_winner = winner(board)
	congrat_winner(the_winner, computer, human)
	
if __name__ == '__main__':
	main()
	game()
	input ("\nНажмите Enter, чтобы выйти")
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB