-- 快算36 SQL小游戏
-- 功能:随机生成4个数字,支持运算表达式验证、判题
DELIMITER // -- 修改语句结束符,方便编写存储过程
-- 1. 创建出题存储过程(生成4个1-13随机数)
DROP PROCEDURE IF EXISTS proc_generate_36;
CREATE PROCEDURE proc_generate_36()
BEGIN
-- 生成4个不重复随机数(1-13)
SET @num1 = FLOOR(1 + (RAND() * 13));
SET @num2 = FLOOR(1 + (RAND() * 13));
SET @num3 = FLOOR(1 + (RAND() * 13));
SET @num4 = FLOOR(1 + (RAND() * 13));
-- 输出题目
SELECT '快算36题目' AS game_title,
@num1 AS 数字1,
@num2 AS 数字2,
@num3 AS 数字3,
@num4 AS 数字4,
'规则:用+ - * / 和括号,4个数字各用1次,算出结果=36' AS rules;
END //
-- 2. 创建判题存储过程(验证运算表达式是否正确)
DROP PROCEDURE IF EXISTS proc_check_36;
CREATE PROCEDURE proc_check_36(IN expression VARCHAR(100))
BEGIN
DECLARE result DECIMAL(10,2);
DECLARE error_msg VARCHAR(100);
-- 异常处理:避免表达式语法错误
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT '❌ 表达式语法错误!请检查运算符号/括号' AS 判题结果;
END;
-- 执行用户输入的运算表达式
SET @sql = CONCAT('SELECT ', expression, ' INTO @calc_result');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 判题逻辑
IF @calc_result = 36 THEN
SELECT '✅ 恭喜你!答对了,结果=36' AS 判题结果,
@calc_result AS 你的计算结果,
expression AS 你的表达式;
ELSE
SELECT '❌ 答错了,结果不等于36' AS 判题结果,
@calc_result AS 你的计算结果,
'再试试吧!' AS tips;
END IF;
END //
DELIMITER ; -- 恢复默认结束符
-- ====================== 游戏开始 ======================
-- 第一步:调用出题(运行这一行生成题目)
CALL proc_generate_36();
-- 第二步:调用判题(替换括号内为你的运算表达式,运行这一行)
-- 示例:CALL proc_check_36('(6+3)*4*1');
CALL proc_check_36('这里填写你的运算表达式');
SQL 实现「快算 36」趣味终端小游戏
一、游戏介绍
这是一个基于 SQL 存储过程实现的轻量交互小游戏,通过随机出题、自动判题的方式,让你在写 SQL 的同时,锻炼心算和逻辑能力。游戏中,系统会随机给出 4 个数字,你需要用 + - * / 和括号,让这 4 个数字各用一次,算出结果等于 36,过程全程在数据库中完成,体验一把 “用 SQL 玩心算游戏” 的乐趣。
游戏特点:
- 零额外依赖:仅需 MySQL 数据库即可运行
- 一键出题判题:调用存储过程就能生成题目、自动批改
- 友好错误提示:语法错误、数字使用不规范都会给出明确反馈
- 可扩展空间大:后续可轻松扩展难度、排行榜、答案库等功能
二、核心实现原理
本项目完全基于 MySQL 存储过程实现,核心用到了以下几个关键特性:
六、总结
这个「快算 36」小游戏,展示了 SQL 在终端交互应用开发方面的趣味性和可能性。通过合理运用存储过程、会话变量、动态 SQL 和异常处理,我们能够在数据库中创建出交互逻辑完整、体验友好的轻量游戏。
项目的类设计遵循了模块化的原则,将出题、判题的逻辑分离在两个存储过程中,代码结构清晰、易于理解和维护。同时,通过字符串处理和校验逻辑,确保了游戏规则的严谨性,避免了用户作弊或违规答题的情况。
这个小游戏虽然简单,但包含了交互程序开发的基本要素:随机数据生成、用户输入处理、逻辑校验、状态管理和结果反馈。对于想要学习 SQL 存储过程开发的初学者来说,是一个很好的练手项目。通过不断扩展功能,可以逐步掌握更复杂的 SQL 技巧和程序设计思想。
RAND()+FLOOR():生成 1-13 之间的随机整数,实现随机出题- 会话变量
@var:在存储过程间传递题目数字 - 动态 SQL
PREPARE:执行用户输入的数学表达式,实现自动判题 - 异常处理器:捕获语法错误,避免程序崩溃
- 字符串处理:校验用户是否正确使用了全部 4 个数字
4万+

被折叠的 条评论
为什么被折叠?



