Python 9x9 数独游戏 - 随机生成,可玩,按规则输入数字
以下是一个基于 Python 的 9x9 数独游戏的代码示例:
import random
import os
def generate_board():
board = [[0] * 9 for _ in range(9)]
empty_count = random.randint(13, 21)
while empty_count > 0:
row = random.randint(0, 8)
col = random.randint(0, 8)
if board[row][col] == 0:
board[row][col] = ' '
empty_count -= 1
return board
def print_board(board):
for i in range(9):
if i % 3 == 0 and i != 0:
print('- - - + - - - + - - -')
for j in range(9):
if j % 3 == 0 and j != 0:
print('|', end=' ')
print(board[i][j], end=' ')
print()
def is_valid(board, num, row, col):
for i in range(9):
if board[row][i] == num or board[i][col] == num:
return False
start_row = (row // 3) * 3
start_col = (col // 3) * 3
for i in range(3):
for j in range(3):
if board[start_row + i][start_col + j] == num:
return False
return True
def solve_board(board):
for row in range(9):
for col in range(9):
if board[row][col] == ' ':
for num in range(1, 10):
if is_valid(board, num, row, col):
board[row][col] = num
if solve_board(board):
return True
board[row][col] = ' '
return False
return True
def play_game():
os.system('clear' if os.name == 'posix' else 'cls')
print('按 S 开始游戏')
input_key = input().lower()
if input_key != 's':
play_game()
board = generate_board()
solved_board = [row[:] for row in board]
solve_board(solved_board)
while True:
os.system('clear' if os.name == 'posix' else 'cls')
print('数独游戏')
print_board(board)
print('输入 C 结束游戏')
print('输入 R 重新生成数列')
print('输入行列数字和待填数字,如 3 4 5')
input_key = input().lower()
if input_key == 'c':
break
elif input_key == 'r':
board = generate_board()
solved_board = [row[:] for row in board]
solve_board(solved_board)
else:
try:
row, col, num = map(int, input_key.split())
if not (1 <= row <= 9 and 1 <= col <= 9 and 1 <= num <= 9):
raise ValueError
if board[row-1][col-1] != ' ':
print('�33[91m请输入符合规则的数字!�33[0m')
else:
if is_valid(board, num, row-1, col-1):
board[row-1][col-1] = num
else:
print('�33[91m请输入符合规则的数字!�33[0m')
except ValueError:
print('�33[91m请输入符合规则的数字!�33[0m')
os.system('clear' if os.name == 'posix' else 'cls')
print('完成的数列表:')
print_board(solved_board)
play_game()
请注意,这只是一个简单的示例,可能还有一些改进的空间,例如更好的用户界面和输入验证。你可以根据自己的需求进行修改和优化。
原文地址: https://www.cveoy.top/t/topic/o37B 著作权归作者所有。请勿转载和采集!