python数独游戏
数独游戏
- 前言
- 开始
- 献上代码
- 代码剖析
- 项目github
- 作者
前言
开始
献上代码
from tkinter.messagebox import *
from pygame.locals import *
from random import *
import tkinter as tk
import pygame
base = tk.Tk()
base.geometry('0x0')
base.resizable(False,False)
pygame.init()
def gen_sudoku():def list_roll(ls,n):new = list(ls)for i in range(n):new.append(new.pop(0))return news = [i for i in range(1,10)]n = [0,3,6,1,4,7,2,5,8]shuffle(s)sudoku = []for i in range(9):row = list_roll(s,n[i])sudoku.append(row)return sudoku
def gen_question(sudoku):res = [[j for j in i] for i in sudoku]n = randint(21,56)for i in range(n):x = randint(0,8)y = randint(0,8)while(res[x][y] == None):x = randint(0, 8)y = randint(0, 8)res[x][y] = Nonereturn res
def show_sudoku(surf,sudoku,s,e):font = pygame.font.Font('songti SC.TTF',100)for i in range(len(sudoku)):for j in range(len(sudoku[i])):if((j,i) == s):color = ((255,255,255),(65,105,225))elif((j,i) in e):color = ((227,23,13),(0,0,0))else:color = ((255,255,255),(0,0,0))if(sudoku[i][j] == None):t = font.render(' ', True, color[0],color[1])else:t = font.render(str(sudoku[i][j]),True,color[0],color[1])t = pygame.transform.scale(t,(64,64))surf.blit(t,(64 * j,64 * i))pygame.draw.rect(surf,(255,255,255),Rect((64 * j,64 * i),(64,64)),1)
def main():scr = pygame.display.set_mode((576,576),DOUBLEBUF)ans = gen_sudoku()ques = gen_question(ans)selected = Noneerrors = []while(1):pygame.display.update()show_sudoku(scr,ques,selected,errors)if(ques == ans):pygame.display.update()returnfor ev in pygame.event.get():if(ev.type == QUIT):exit()elif(ev.type == MOUSEBUTTONDOWN):x,y = ev.pos[0] // 64,ev.pos[1] // 64if(ques[y][x] == None or (x,y) in errors):selected = (x,y)elif(ev.type == KEYDOWN):if(ev.unicode not in '123456789' or (not ev.unicode) or (not selected)):continueques[selected[1]][selected[0]] = int(ev.unicode)if(ans[selected[1]][selected[0]] != ques[selected[1]][selected[0]]):errors.append(selected)if(ans[selected[1]][selected[0]] == ques[selected[1]][selected[0]] and selected in errors):errors.remove(selected)
if(__name__ == '__main__'):main()showinfo('Congratulations!','Congratulations!You\'done it!')
只有83行,还是那么优秀的我啊
代码剖析
from tkinter.messagebox import *
from pygame.locals import *
from random import *
import tkinter as tk
import pygame
base = tk.Tk()
base.geometry('0x0')
base.resizable(False,False)
pygame.init()
导入库并初始化
def gen_sudoku():def list_roll(ls,n):new = list(ls)for i in range(n):new.append(new.pop(0))return news = [i for i in range(1,10)]n = [0,3,6,1,4,7,2,5,8]shuffle(s)sudoku = []for i in range(9):row = list_roll(s,n[i])sudoku.append(row)return sudoku
生成数独
思路见这篇文章
def gen_question(sudoku):res = [[j for j in i] for i in sudoku]n = randint(21,56)for i in range(n):x = randint(0,8)y = randint(0,8)while(res[x][y] == None):x = randint(0, 8)y = randint(0, 8)res[x][y] = Nonereturn res
随机再数独上挖空,生成谜题
def show_sudoku(surf,sudoku,s,e):font = pygame.font.Font('songti SC.TTF',100)for i in range(len(sudoku)):for j in range(len(sudoku[i])):if((j,i) == s):color = ((255,255,255),(65,105,225))elif((j,i) in e):color = ((227,23,13),(0,0,0))else:color = ((255,255,255),(0,0,0))if(sudoku[i][j] == None):t = font.render(' ', True, color[0],color[1])else:t = font.render(str(sudoku[i][j]),True,color[0],color[1])t = pygame.transform.scale(t,(64,64))surf.blit(t,(64 * j,64 * i))pygame.draw.rect(surf,(255,255,255),Rect((64 * j,64 * i),(64,64)),1)
显示数独
def main():scr = pygame.display.set_mode((576,576),DOUBLEBUF)ans = gen_sudoku()ques = gen_question(ans)selected = Noneerrors = []
初始化变量:
- 窗口对象
- 数独答案
- 谜题
- 选择的空
- 错误位置
while(1):pygame.display.update()show_sudoku(scr,ques,selected,errors)if(ques == ans):pygame.display.update()returnfor ev in pygame.event.get():if(ev.type == QUIT):exit()elif(ev.type == MOUSEBUTTONDOWN):x,y = ev.pos[0] // 64,ev.pos[1] // 64if(ques[y][x] == None or (x,y) in errors):selected = (x,y)elif(ev.type == KEYDOWN):if(ev.unicode not in '123456789' or (not ev.unicode) or (not selected)):continueques[selected[1]][selected[0]] = int(ev.unicode)if(ans[selected[1]][selected[0]] != ques[selected[1]][selected[0]]):errors.append(selected)if(ans[selected[1]][selected[0]] == ques[selected[1]][selected[0]] and selected in errors):errors.remove(selected)
这里分开剖析
while(1):pygame.display.update()show_sudoku(scr,ques,selected,errors)if(ques == ans):pygame.display.update()return
加载数独并检查是否已经完成
for ev in pygame.event.get():if(ev.type == QUIT):exit()elif(ev.type == MOUSEBUTTONDOWN):x,y = ev.pos[0] // 64,ev.pos[1] // 64if(ques[y][x] == None or (x,y) in errors):selected = (x,y)elif(ev.type == KEYDOWN):if(ev.unicode not in '123456789' or (not ev.unicode) or (not selected)):continueques[selected[1]][selected[0]] = int(ev.unicode)if(ans[selected[1]][selected[0]] != ques[selected[1]][selected[0]]):errors.append(selected)if(ans[selected[1]][selected[0]] == ques[selected[1]][selected[0]] and selected in errors):errors.remove(selected)
处理:
- 点击(x)退出
- 鼠标按下将选择的位置改为按下位置
- 键盘按下将选择的位置的数改为按下的。如果输错了,将选择位置添加到
error
里。如果将本来错误的改对了,将选择位置从error
里将位置删去
if(__name__ == '__main__'):main()showinfo('Congratulations!','Congratulations!You\'done it!')
运行并输出完成的提示语。
项目github
github传送门
作者
hit-road
拜拜,下课!
回到顶部
python数独游戏相关推荐
- python数独游戏源代码_使用Python编写数独游戏自动出题程序
数独是一个很好玩的游戏,可以锻炼推理能力.下面的代码可以自动生成数独游戏题目. from random import shuffle, randrange def generate(): # 初始网格 ...
- python数独游戏源代码100行_python实现自动解数独小程序
跟朋友最近聊起来数独游戏,突发奇想使用python编写一个自动计算数独解的小程序. 数独的规则不再过多阐述,在此描述一下程序的主要思路: (当前程序只针对于简单的数独,更复杂的还待深入挖掘) 1.计算 ...
- python数独游戏源代码100行_python实现解数独程序代码
偶然发现linux系统附带的一个数独游戏,打开玩了几把.无奈是个数独菜鸟,以前没玩过,根本就走不出几步就一团浆糊了. 于是就打算借助计算机的强大运算力来暴力解数独,还是很有乐趣的. 下面就记录一下我写 ...
- python可以数独游戏吗_简单实现python数独游戏
网上看到一个python写的数独,很好玩,分享给大家. import random import itertools from copy import deepcopy def make_board( ...
- python数独游戏源代码_数独源程序py
#!/usr/bin/python #coding=utf-8 #sudoku # import random class sudoku(object): def __init__(self): se ...
- 使用Python编写数独游戏自动出题程序
数独是一个很好玩的游戏,可以锻炼推理能力.下面的代码可以自动生成数独游戏题目. from random import shuffle, randrange def generate(): # ...
- 让Python程序自动玩数独游戏,秒变最强大脑!
游戏界面如下图所示 当然这类玩数独游戏的网站很多,现在我们先以该网站为例进行演示.希望能用Python实现自动计算并填好数独游戏! 大概效果能像下面这样就好啦
- 9 9简单的数独游戏python_如何使用tkinter GUI python创建9*9数独生成器?
如何使用python和tkinter创建9*9数独生成器?,如何将其生成到gui?在 我试过这些:import random numbers = [1,2,3,4,5,6,7,8,9] def reg ...
- 使用Python编写程序求解数独游戏答案
问题描述:数独盘面是个九宫,每一宫又分为九个小格.在这八十一格中给出一定的已知数字和解题条件,利用逻辑和推理,在其他的空格上填入1-9的数字.使1-9每个数字在每一行.每一列和每一宫中都只出现一次,所 ...
- python可以数独游戏吗_学习python编程如何一键做出数独游戏答案 | k12教育网
在学习python编程如何一键做出数独游戏答案之前,我们需要知道什么是Python? Python指的是Python编程语言(用于编写被认为是有效Python代码的语法规则)和Python解释器软件, ...
最新文章
- [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.13
- iOS一些推荐的学习路径发展
- Orchard Core一分钟搭建ASP.NET Core CMS
- 在Twitter上使用Apache Mesos和Apache Aurora进行资源调度和任务启动
- Random Forest算法参数解释及调优
- ARP和RARP报头结构
- 还来一篇说下json_value 以及 json_query 的应用 (3)
- Educational Codeforces Round 7
- 台达伺服电机编码器改功率刷功率软件
- Django-ftpserver 的两个坑
- Win10 安装 Rational Rose 教程(带超详细图文)
- 网站SEO实践之 - 网站关键词库扩展的几种方法
- word快捷键复制粘贴无法使用
- 创宇区块链|Inverse Finance 安全事件分析
- JZ38 字符串的排列
- Python爬虫之Requests模块巩固深入案例
- http/https接口调用
- Elasticsearch Java Client创建索引
- CSS2:宽度与高度疑难点解析
- js实现匹配到文字设置为红色