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

Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案

Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 ews 的适配 鸿蒙Harmony 实战 - 驾驭企业级 Exchange Web Services 协议、实现鸿蒙端政企办公同步与高安通讯隔离方案 前言 在鸿蒙(OpenHarmony)生态进军政企办公领域的过程中,与现有企业信息化基础设施的深度集成是一道必答题。即便是在全连接、分布式的今天,微软的 Exchange 服务器依然是全球无数大厂与政务系统处理邮件、日历同步的核心底座。 对于习惯了简单 http.get 的移动开发者来说,Exchange Web Services(EWS)协议由于其复杂的 SOAP 封装、繁琐的 XML 数据结构以及极其严苛的身份认证机制,往往是一块难啃的“骨头”。 ews 库为 Dart 提供了成熟的、类型安全的

By Ne0inhk
openclaw喂饭教程!在 Linux 环境下快速完成安装、初始化与 Web UI 配置

openclaw喂饭教程!在 Linux 环境下快速完成安装、初始化与 Web UI 配置

前言 OpenClaw 是一款开源的 AI Agent 工具,但对第一次接触的用户来说,完整跑通流程并不直观。本文以 Linux 环境为例,详细记录了 OpenClaw 的安装、初始化流程、模型选择、TUI 使用方式,以及 TUI 与 Web UI 认证不一致导致的常见问题与解决方法,帮助你最快速度把 OpenClaw 真正跑起来 环境准备 1)安装nodejs curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs > node

By Ne0inhk

CVE-2026-21962漏洞利用工具:Oracle WebLogic代理插件未授权RCE检测与利用

CVE-2026-21962 - Oracle WebLogic Server Proxy Plug-In RCE 项目描述 该项目提供了一个针对Oracle WebLogic Server代理插件(Proxy Plug-In)中一个关键安全漏洞(CVE-2026-21962)的漏洞利用概念验证(PoC)脚本。该漏洞允许未经验证的远程攻击者通过HTTP协议在受影响的服务器上执行任意操作系统命令,风险等级极高(CVSS 10.0)。 影响组件: * Oracle HTTP Server(版本12.2.1.4.0、14.1.1.0.0、14.1.2.0.0) * Oracle WebLogic Server代理插件(用于Apache HTTP Server和Microsoft IIS)

By Ne0inhk
大数据新视界 --大数据大厂之JavaScript在大数据前端展示中的精彩应用

大数据新视界 --大数据大厂之JavaScript在大数据前端展示中的精彩应用

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实用的内容知识,还可以毫无拘束地畅所欲言,尽情分享自己独特的见解。我真诚地期待着你们的到来,愿我们能在这片小小的天地里共同成长,共同进步。💖💖💖 本博客的精华专栏: 1. 大数据新视界专栏系列:聚焦大数据,展技术应用,推动进步拓展新视野。 2. Java 大厂面试专栏系列:提供大厂面试的相关技巧和经验,助力求职。 3. Python 魅力之旅:探索数据与智能的奥秘专栏系列:走进 Python 的精彩天地,感受数据处理与智能应用的独特魅力。 4. Java 性能优化传奇之旅:铸就编程巅峰之路:如一把神奇钥匙,深度开启 JVM 等关键领域之门。丰富案例似璀璨繁星,引领你踏上编程巅峰的壮丽征程。 5. Java 虚拟机(

By Ne0inhk