python可以数独游戏吗_如何用Python创建数独游戏

news/2024/10/19 21:33:11/

你可以生成一个随机数独解决方案板,在那里所有的数字都被填写,然后删除其中一些,以创建拼图。这将确保谜题始终有一个解决方案。确保它只有一个解决方案会更具挑战性(提示:一个9x9数独游戏必须至少留下17个数字)

下面的算法将立即为N<1000生成NxN随机数独解决方案板。base = 3

side = base*base

# pattern for a baseline valid solution

def pattern(r,c): return (base*(r%base)+r//base+c)%side

# randomize rows, columns and numbers (of valid base pattern)

from random import sample

def shuffle(s): return sample(s,len(s))

rBase = range(base)

rows = [ g*base + r for g in shuffle(rBase) for r in shuffle(rBase) ]

cols = [ g*base + c for g in shuffle(rBase) for c in shuffle(rBase) ]

nums = shuffle(range(1,base*base+1))

# produce board using randomized baseline pattern

board = [ [nums[pattern(r,c)] for c in cols] for r in rows ]

for line in board: print(line)

[6, 2, 5, 8, 4, 3, 7, 9, 1]

[7, 9, 1, 2, 6, 5, 4, 8, 3]

[4, 8, 3, 9, 7, 1, 6, 2, 5]

[8, 1, 4, 5, 9, 7, 2, 3, 6]

[2, 3, 6, 1, 8, 4, 9, 5, 7]

[9, 5, 7, 3, 2, 6, 8, 1, 4]

[5, 6, 9, 4, 3, 2, 1, 7, 8]

[3, 4, 2, 7, 1, 8, 5, 6, 9]

[1, 7, 8, 6, 5, 9, 3, 4, 2]

然后,您可以从数独解决方案中删除一些数字来创建拼图:squares = side*side

empties = squares * 3//4

for p in sample(range(squares),empties):

board[p//side][p%side] = 0

numSize = len(str(side))

for line in board: print("["+" ".join(f"{n or '.':{numSize}}" for n in line)+"]")

[6 . . . . 3 . . 1]

[. 9 . . . . . . 3]

[4 . 3 . . . 6 . .]

[. . . 5 9 . 2 . 6]

[. . . . . . . . .]

[. . 7 . . . . . 4]

[. . . . . . 1 7 .]

[. . 2 . . 8 . . .]

[. . 8 . . . . 4 2]

对于4x4到36x36的拼图,您可以制作一个更好的印刷板,如下所示:def expandLine(line):

return line[0]+line[5:9].join([line[1:5]*(base-1)]*base)+line[9:13]

line0 = expandLine("╔═══╤═══╦═══╗")

line1 = expandLine("║ . │ . ║ . ║")

line2 = expandLine("╟───┼───╫───╢")

line3 = expandLine("╠═══╪═══╬═══╣")

line4 = expandLine("╚═══╧═══╩═══╝")

symbol = " 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"

nums = [ [""]+[symbol[n] for n in row] for row in board ]

print(line0)

for r in range(1,side+1):

print( "".join(n+s for n,s in zip(nums[r-1],line1.split("."))) )

print([line2,line3,line4][(r%side==0)+(r%base==0)])

╔═══╤═══╤═══╦═══╤═══╤═══╦═══╤═══╤═══╗

║ 6 │ │ ║ │ │ 3 ║ │ │ 1 ║

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢

║ │ 9 │ ║ │ │ ║ │ │ 3 ║

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢

║ 4 │ │ 3 ║ │ │ ║ 6 │ │ ║

╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣

║ │ │ ║ 5 │ 9 │ ║ 2 │ │ 6 ║

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢

║ │ │ ║ │ │ ║ │ │ ║

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢

║ │ │ 7 ║ │ │ ║ │ │ 4 ║

╠═══╪═══╪═══╬═══╪═══╪═══╬═══╪═══╪═══╣

║ │ │ ║ │ │ ║ 1 │ 7 │ ║

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢

║ │ │ 2 ║ │ │ 8 ║ │ │ ║

╟───┼───┼───╫───┼───┼───╫───┼───┼───╢

║ │ │ 8 ║ │ │ ║ │ 4 │ 2 ║

╚═══╧═══╧═══╩═══╧═══╧═══╩═══╧═══╧═══╝


http://www.ppmy.cn/news/380140.html

相关文章

c 语言写数独游戏,经典数独游戏+数独求解器—纯C语言实现

【转】NGUI研究院之三种方式监听NGUI的事件方法(七) NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不 ... PHP解释器引擎执行流…

html数独游戏源代码,数独游戏求解程序(附源代码)

数独游戏规则 是一种源自18世纪末瑞士的数学智力拼图游戏。拼图是九宫格(即3格宽3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化。不少教育者…

C++实现数独游戏

问题描述: 数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个3X3粗线宫内的数字均含1-9,并且不重复。 例如&#xf…

winform数独C#的数独游戏

功能描述 winform数独C#的数独游戏 本程序基于.netframework使用C#语言开发,实现功能: 1、各个难度随机出题(New); 2、数独解题提示(Compute); 3、输入的合法性校验; 思路分享 说一下开发步骤及思路: 1、…

【数独】数独游戏-微信小程序开发流程详解

有没有玩过数独游戏呢,听说,它是一个能训练大脑思维的棋盘类游戏,游戏规则很简单,通过小程序来实现很容易,非常适合对数独游戏逻辑感兴趣的同学,选择它开发入门吧。 准备 会使用微信开发者工具&#xff0…

数独游戏-蓝桥杯-C语言,数独游戏_java_深搜+回溯

问题描述 你一定听说过“数独”游戏。 如【图1.png】,玩家需要根据99盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。 数独的答案都是唯一的,所以&#xff…

python数独游戏源代码_Python数独游戏源代码

Python数独游戏源代码 Python代码狂人 Python代码大全 Python数独游戏源代码、源程序共包括两个程序文件:main.py及build.py main.py import sys import pygame from pygame.color import THECOLORS as COLORS from ShuDu.build import * def draw_background(): # white back…

java 数独游戏_java数独游戏完整版分享

本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 自己写的数独游戏,共9关,代码如下: 1、DoShudu类用于产生数独数组 import java.util.Random; public class DoShudu {/** * @param args */ public static void main(String[] args) {// TODO Auto-g…