Python 小游戏实战:打造视觉精美的数独小游戏

Python 小游戏实战:打造视觉精美的数独小游戏

在这里插入图片描述

Python 小游戏实战:打造视觉精美的数独小游戏

Python 小游戏实战:打造视觉精美的数独小游戏,数独是一款经典的逻辑推理数字游戏,通过填充数字 1-9 到 9x9 的网格中,使得每行、每列和每个 3x3 子网格都包含 1-9 的所有数字,不重复。本文将带大家使用 Python 的 Pygame 库实现一个视觉精美、交互友好的数独小游戏。

一、前言

    Python作为一门简洁、易读、功能强大的编程语言,其基础语法是入门学习的核心。掌握好基础语法,能为后续的编程实践打下坚实的基础。本文将全面讲解Python3的基础语法知识,适合编程初学者系统学习。Python以其简洁优雅的语法和强大的通用性,成为当今最受欢迎的编程语言。本专栏旨在系统性地带你从零基础入门到精通Python核心。无论你是零基础小白还是希望进阶的专业开发者,都将通过清晰的讲解、丰富的实例和实战项目,逐步掌握语法基础、核心数据结构、函数与模块、面向对象编程、文件处理、主流库应用(如数据分析、Web开发、自动化)以及面向对象高级特性,最终具备独立开发能力和解决复杂问题的思维,高效应对数据分析、人工智能、Web应用、自动化脚本等广泛领域的实际需求。

在这里插入图片描述

在这里插入图片描述

🥇 点击进入Python入门专栏,Python凭借简洁易读的语法,是零基础学习编程的理想选择。本专栏专为初学者设计,系统讲解Python核心基础:变量、数据类型、流程控制、函数、文件操作及常用库入门。通过清晰示例与实用小项目,助你快速掌握编程思维,打下坚实根基,迈出自动化办公、数据分析或Web开发的第一步。

🥇 点击进入Python小游戏实战专栏, 寓教于乐,用Python亲手打造经典小游戏!本专栏通过开发贪吃蛇、飞机大战、猜数字、简易版俄罗斯方块等趣味项目,在实践中掌握Python核心语法、面向对象编程、事件处理、图形界面(如Pygame)等关键技能,将枯燥的代码学习转化为可见的成果,让学习编程充满乐趣与成就感,快速提升实战能力。

🥇 点击进入Python小工具实战专栏,告别重复劳动,用Python打造效率神器!本专栏教你开发文件批量处理、自动邮件通知、简易爬虫、桌面提醒、密码生成器、天气查询等实用小工具。聚焦os、shutil、requests、smtplib、schedule等核心库,通过真实场景案例,快速掌握自动化脚本编写技巧,解放双手,显著提升工作与生活效率,让代码真正服务于你的日常。

🥇 点击进入Python爬虫实战专栏,解锁网络数据宝库!本专栏手把手教你使用Python核心库(如requests、BeautifulSoup、Scrapy)构建高效爬虫。从基础网页解析到动态页面抓取、数据存储(CSV/数据库)、反爬策略应对及IP代理使用,通过实战项目(如电商比价、新闻聚合、图片采集、舆情监控),掌握合法合规获取并利用网络数据的核心技能,让数据成为你的超能力。

🥇 点击进入Python项目实战专栏,告别碎片化学习,挑战真实项目!本专栏精选Web应用开发(Flask/Django)、数据分析可视化、自动化办公系统、简易爬虫框架、API接口开发等综合项目。通过需求分析、架构设计、编码实现、测试部署的全流程,深入掌握工程化开发、代码复用、调试排错与团队协作核心能力,积累高质量作品集,真正具备解决复杂问题的Python实战经验。


✨ 正文开始

数独是一款经典的逻辑推理数字游戏,通过填充数字1-9到9x9的网格中,使得每行、每列和每个3x3子网格都包含1-9的所有数字,不重复。本文将带大家使用Python的Pygame库实现一个视觉精美、交互友好的数独小游戏。

二、开发准备

2.1 所需环境

  • Python 3.6+
  • Pygame库(用于图形界面和交互)

2.2安装依赖

首先确保安装了Pygame库,如果没有安装,可以使用pip命令安装:

pip install pygame 

三、项目结构设计

我们将项目分为两个主要文件:

  • main.py:负责游戏界面渲染和用户交互
  • build.py:负责数独谜题的生成和验证逻辑

这种分离设计使代码结构更清晰,便于维护和扩展。

四 、核心功能实现

4.1. 数独谜题生成与验证(build.py)

首先实现数独的核心逻辑,包括数独生成、验证等功能:

import random defprint_matrix(matrix):"""打印矩阵,用于调试"""print('—'*19)for row in matrix:print('|'+' '.join([str(col)for col in row])+'|')print('—'*19)defshuffle_number(_list):"""随机打乱列表,用于生成不同的数独""" random.shuffle(_list)return _list defcheck(matrix, i, j, number):""" 检查数字是否可以放置在指定位置 规则:行、列、3x3子网格中不能有重复数字 """# 检查行if number in matrix[i]:returnFalse# 检查列if number in[row[j]for row in matrix]:returnFalse# 检查3x3子网格 group_i, group_j =int(i/3),int(j/3)if number in[matrix[i][j]for i inrange(group_i*3,(group_i+1)*3)for j inrange(group_j*3,(group_j+1)*3)]:returnFalsereturnTruedefbuild_game(matrix, i, j, number):"""递归构建完整数独矩阵"""if i >8or j >8:return matrix if check(matrix, i, j, number):# 创建矩阵副本进行修改 _matrix =[[col for col in row]for row in matrix] _matrix[i][j]= number # 计算下一个位置 next_i, next_j =(i+1,0)if j ==8else(i, j+1)# 尝试下一个位置的所有可能数字for _number in shuffle_number(number_list): __matrix = build_game(_matrix, next_i, next_j, _number)# 验证是否生成了完整有效的数独if __matrix andsum([sum(row)for row in __matrix])==(sum(range(1,10))*9):return __matrix returnNonedefgive_me_a_game(blank_size=9):"""生成带空白的数独游戏"""# 生成完整数独 matrix_all = build_game(matrix,0,0, random.choice(number_list))# 随机生成要空白的位置 set_ij =set()whilelen(list(set_ij))< blank_size: set_ij.add(f"{random.choice(range(9))},{random.choice(range(9))}")# 创建带空白的数独 matrix_blank =[[col for col in row]for row in matrix_all] blank_ij =[]for ij inlist(set_ij): i, j =int(ij.split(',')[0]),int(ij.split(',')[1]) blank_ij.append((i, j)) matrix_blank[i][j]=0return matrix_all, matrix_blank, blank_ij # 全局变量 number_list =[1,2,3,4,5,6,7,8,9] matrix =[([0]*9)for i inrange(9)]if __name__ =="__main__":# 测试生成数独 print_matrix(build_game(matrix,0,0, random.choice(number_list)))

4.2. 游戏界面与交互(main.py)

接下来实现游戏的可视化界面和用户交互逻辑:

import sys import pygame from pygame.color import THECOLORS as COLORS from build import print_matrix, give_me_a_game, check defdraw_background():"""绘制游戏背景和网格"""# 白色背景 screen.fill(COLORS['white'])# 绘制9x9网格,加粗绘制3x3大格子边界# 垂直线for i inrange(10): line_width =5if i %3==0else2 pygame.draw.line(screen, COLORS['black'],(i*100,0),(i*100,900), line_width)# 水平线for i inrange(10): line_width =5if i %3==0else2 pygame.draw.line(screen, COLORS['black'],(0, i*100),(900, i*100), line_width)defdraw_choose():"""绘制当前选中的单元格高亮框"""# 绘制蓝色高亮框,留出边框 pygame.draw.rect(screen, COLORS['blue'],(cur_j*100+5, cur_i*100+5,100-10,100-10),0)defcheck_win(matrix_all, matrix):"""检查是否完成数独"""return matrix_all == matrix defcheck_color(matrix, i, j):"""检查数字是否符合规则,返回对应的颜色""" _matrix =[[col for col in row]for row in matrix] _matrix[i][j]=0# 临时清空当前位置以便检查if check(_matrix, i, j, matrix[i][j]):return COLORS['green']# 合法数字显示绿色return COLORS['red']# 非法数字显示红色defdraw_number():"""绘制数独中的数字"""for i inrange(len(MATRIX)):for j inrange(len(MATRIX[0])):# 空白格子的数字颜色根据合法性变化,固定数字显示灰色 _color = check_color(MATRIX, i, j)if(i,j)in BLANK_IJ else COLORS['gray']# 渲染数字,空值不显示 txt = font80.render(str(MATRIX[i][j]if MATRIX[i][j]notin[0,'0']else''),True, _color) x, y = j*100+30, i*100+10# 居中显示 screen.blit(txt,(x, y))defdraw_context():"""绘制游戏状态信息""" txt = font100.render(f'Blank: {cur_blank_size} Changes: {cur_change_size}',True, COLORS['black']) screen.blit(txt,(10,900))# 显示在底部if __name__ =="__main__":# 初始化pygame pygame.init()# 常量定义 SIZE =[900,1000]# 窗口大小,额外100像素显示状态信息 font80 = pygame.font.SysFont('Times',80)# 数字字体 font100 = pygame.font.SysFont('Times',90)# 状态信息字体# 创建窗口 screen = pygame.display.set_mode(SIZE) pygame.display.set_caption("数独小游戏")# 设置窗口标题# 变量初始化 cur_i, cur_j =0,0# 当前选中的单元格 cur_blank_size =int(sys.argv[1])iflen(sys.argv)>1else10# 空白数量,可通过命令行参数设置 cur_change_size =0# 已修改次数# 生成数独游戏 MATRIX_ANSWER, MATRIX, BLANK_IJ = give_me_a_game(blank_size=cur_blank_size)print(BLANK_IJ) print_matrix(MATRIX)# 主游戏循环 running =Truewhile running:# 事件处理for event in pygame.event.get():if event.type== pygame.QUIT: running =Falsebreakelif event.type== pygame.MOUSEBUTTONDOWN:# 鼠标点击选择单元格 x, y = event.pos cur_j, cur_i =int(x /100),int(y /100)# 确保选择在有效范围内 cur_i =max(0,min(8, cur_i)) cur_j =max(0,min(8, cur_j))elif event.type== pygame.KEYUP:# 键盘输入数字ifchr(event.key)in['1','2','3','4','5','6','7','8','9']and(cur_i, cur_j)in BLANK_IJ: MATRIX[cur_i][cur_j]=int(chr(event.key))# 更新空白数量 cur_blank_size =sum(1for row in MATRIX for col in row if col in[0,'0']) cur_change_size +=1# 绘制游戏元素 draw_background() draw_choose() draw_number() draw_context()# 刷新屏幕 pygame.display.flip()# 检查是否完成if check_win(MATRIX_ANSWER, MATRIX):print('恭喜你,完成了数独挑战!')break# 退出游戏 pygame.quit()

运行效果图:

在这里插入图片描述

五 、 功能解析

5.1. 数独生成逻辑

  • build_game() 函数使用递归回溯算法生成完整的数独矩阵
  • give_me_a_game() 函数从完整数独中随机挖去指定数量的数字作为谜题
  • check() 函数验证数字放置是否符合数独规则

5.2. 游戏界面设计

  • 9x9的网格布局,使用不同粗细的线条区分3x3子网格
  • 选中的单元格会显示蓝色高亮框
  • 固定数字显示为灰色,玩家输入的数字根据合法性显示绿色(合法)或红色(非法)
  • 底部状态栏显示剩余空白数量和已修改次数

5.3. 用户交互

  • 鼠标点击选择单元格
  • 键盘输入1-9数字填充选中的空白单元格
  • 自动检查输入合法性并通过颜色提示
  • 完成数独后自动提示成功

六、游戏玩法

  1. 鼠标点击要填充的单元格(蓝色高亮显示)
  2. 按键盘1-9数字键填入数字
  3. 绿色数字表示符合数独规则,红色数字表示有冲突
  4. 填满所有空白且全部正确后,游戏结束并提示成功

运行程序,可通过命令行参数指定空白格数量(难度):

python main.py 20# 生成有20个空白格的数独

七、优化建议

  1. 增加难度选择界面,无需通过命令行参数设置
  2. 添加计时器功能,记录完成时间
  3. 增加错误次数限制
  4. 添加提示功能
  5. 优化UI,增加更精美的背景和动画效果
  6. 保存游戏进度功能

八、总结

本项目通过Pygame实现了一个功能完整的数独游戏,包含了数独生成、规则验证、用户交互等核心功能。代码结构清晰,注释完善,便于理解和扩展。

通过这个项目,我们学习了递归回溯算法在数独生成中的应用,以及如何使用Pygame构建图形界面和处理用户交互。希望这个教程能帮助你入门Python游戏开发,也欢迎在此基础上进行更多创新和改进!

附录:扩展学习资源

  1. 官方资源
  2. 本专栏特色资源
    • 代码资源仓库:ZEEKLOG专属资源在线获取
    • 海量Python教程:关注公众号:xcLeigh,获取网盘地址
    • 一对一答疑:添加微信与博主在线沟通(备注“Python专栏”

联系博主

    xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在ZEEKLOG、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🏰 大屏可视化 🌀 带你体验酷炫大屏!

     💯 神秘个人简介 🌀 带你体验不一样得介绍!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 前沿应用深度测评 🌀 前沿AI产品热门应用在线等你来发掘!

     💦 :本文撰写于ZEEKLOG平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.ZEEKLOG.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

Read more

这回真的“装”到了!来OpenClaw全国纵深行,你只需要带一台电脑……

这回真的“装”到了!来OpenClaw全国纵深行,你只需要带一台电脑……

AI Agent 的风,已经从 GitHub 吹到了线下。 过去几个月,越来越多开发者开始讨论一个问题: 当 AI 不再只是聊天,而是可以执行任务,软件会变成什么样? 在这股浪潮中,一个开源项目迅速进入开发者视野——OpenClaw,在 GitHub 上获得大量关注,相关教程、实践案例不断出现。有人用它自动整理资料,有人用它管理开发流程,还有人尝试让它执行复杂的工作流。 很多开发者第一次意识到: AI 不只是工具,它可能成为“执行者”。 不过,在技术社区之外,大多数人对 Agent 的理解仍停留在概念层面。 * AI Agent 到底是什么? * 如何在自己的电脑上运行? * 普通开发者能否真正用起来? 带着这些问题,一场围绕 OpenClaw 的开发者城市行动正在展开。 ZEEKLOG 发起的OpenClaw 全国纵深行将走进 20 个城市,用最直接的方式回答一个问题——如果

By Ne0inhk
从下载到运行:MySQL 详细安装配置完整教程

从下载到运行:MySQL 详细安装配置完整教程

从下载到运行:MySQL 超详细安装配置完整教程 * 从下载到运行:MySQL 详细安装配置完整教程 * 一、MySQL下载步骤 * 二、MySQL安装流程 * 三、MySQL环境配置与验证 * 1. 配置环境变量 * 2. 验证MySQL是否安装成功 * 四、Navicat链接MySQL * 1. 安装Navicat 从下载到运行:MySQL 详细安装配置完整教程 一、MySQL下载步骤 首先访问MySQL官方下载地址,进入MySQL的官方下载页面。 下载完成后,在本地找到下载好的MySQL安装文件,双击文件启动安装程序。 二、MySQL安装流程 双击安装文件后,会进入MySQL安装类型选择界面,界面中提供5种安装模式,各自功能如下: Developer Default(开发者默认):包含MySQL开发所需的全套组件(如数据库服务、客户端工具、SDK等),适合开发人员使用。Server only(仅服务器):仅安装MySQL数据库服务,适合仅需搭建数据库服务器的场景。Client

By Ne0inhk
4nm移动SoC革命:三星高能效NPU架构解析

4nm移动SoC革命:三星高能效NPU架构解析

面向移动端SoC的高硬件效率神经网络处理单元 临近春节,围炉煮茶之余阅读了三星电子发表在固体电子学顶刊IEEE JSSC上的论文 《A Multi-Mode 8k-MAC HW-Utilization-Aware Neural Processing Unit With a Unified Multi-Precision Datapath in 4-nm Flagship Mobile SoC》 ,三星副总裁Inyup Kang博士 为本文的共同作者。三星电子的研究团队提出了一种应用于4nm移动SoC支持多模式的神经网络处理单元(NPU),专为猎户座移动SoC设计,通过统一多精度数据通路支持INT4/8及FP16运算,实现高能效与高面积效率的平衡。 原文链接 关键词 计算利用率、深度神经网络(DNN)、领域专用架构(DSA)、推理加速器、稀疏感知零跳过、统一乘加(MAC) 全文导图及摘要 针对深度卷积、浅层小通道层等端侧AI应用中的低硬件利用率场景,三星团队结合编译器提供的张量信息,通过重构计算流(包含基于特征图稀疏特性的零值跳过、Scatter-Gather等技术),硬件利用

By Ne0inhk
金仓数据库 MongoDB 兼容:多模融合下的架构之道与实战体验

金仓数据库 MongoDB 兼容:多模融合下的架构之道与实战体验

引言:从“平替”到“超越”的技术跨越 在国产化替代(信创)浪潮下,选择数据库不再只是考量“能否使用”,更多关注其“好用与否”,还要看是否能做到“无缝切换”。提到 MongoDB,想必大家都不生疏,作为 NoSQL 领域的佼佼者,凭借自身灵活的数据架构和飞快的读写效率,斩获诸多互联网及物联网项目,不过须要诚实地表明,一旦关乎到企业核心业务,譬如要确保数据完全一致,执行繁杂的关联查询或者实施统一运作管理时,MongoDB 就常常会有些力不从心。 电科金仓(Kingbase)所给出的多模融合数据库方案颇具趣味,该方案并非仅仅创建一层适配层来博取眼球,其实在架构层面上执行了“降维打击”,经由内核级别的 MongoDB 协议适配 并结合自主研发的 OSON 存储引擎,金仓把“关系型数据库稳定的基础”与“NoSQL 灵活的特性”融合起来,现在,让我们一起探究金仓数据库(KingbaseES,

By Ne0inhk