搞定元素周期表,初中化学没烦恼! 📖帮助文档
这是一款简单易用的元素周期表助记游戏,欢迎大家下载使用!
喜欢的话可以Star一下,希望这个程序可以帮到更多的人!
若在使用过程中发现什么问题,欢迎提交Issue!
视频教程
微信
扫码观看视频
文档索引
1. 使用说明
1.1 基本操作
1.1.1 启动
由于界面按钮较多,加载速度较慢,启动时会弹出上图所示的图片,请您耐心等待。
1.1.2 认识界面
这是程序界面。上方按钮是功能区,你可以点击对应按钮启动相应功能。具体按钮的功能在后文会予以介绍。
功能区下方是等级积分区。积分与等级的换算规则以及不同等级的介绍会在后文介绍。
下方按钮排列成元素周期表形状,上面的文字是每个元素的原子序数。元素周期表的左侧文字代表对应行的周期,上方文字代表对应列的族。
元素周期表上方空地由3部分构成。左侧是元素提示框,右上方是限时进度条,右下方是游戏规则。
1.2 游戏规则
1.2.1 基本规则
你需要根据元素提示框的显示内容,单击元素周期表上对应位置的方块。答对者有积分奖励。 为了鼓动大家的学习积极性,我没有设置超时或答错的扣分,这不是BUG!
如果你答对了,会得到这样一个弹窗,并获得10积分。
如果你答错了,会获得这样一个弹窗,并告诉你正确答案。你的积分不会有任何变化。
如果你超时未答,会获得这样一个弹窗,并告诉你正确答案。你的积分不会有任何变化。
点掉弹窗后,游戏会自动继续
1.2.2 等级说明
等级 | 称号 | 积分 | 限时 | 备注 |
---|---|---|---|---|
LV0 | 默默无闻 | 0~10 | 30s | - |
LV1 | 努力向前 | 10~100 | 25s | - |
LV2 | 小有成就 | 100~1000 | 20s | - |
LV3 | 聪明绝顶 | 1000~10000 | 15s | - |
LV4 | 顶级大师 | ≥10000 | 10s | 最高等级,解锁原子量测试 |
如果你的积分达到晋级标准,你会收到类似下图所示的弹窗。
点掉弹窗后,游戏会自动继续
1.2.3 彩蛋
如果你暂时想不出元素所在的位置,你可以右键单击任意按钮查看提示。不必有顾虑,你可以翻开提示无限次,而不用担心自己的积分受到影响(前提是手速足够快)。
引发弹窗后,游戏不会暂停,请尽快返回答题
1.3 使用技巧
1.3.1 功能区
单击 重置
按钮,游戏的等级、积分都会清零,测试范围也会恢复默认值,并开始新的游戏。
不要轻易单击这个按钮!
单击 帮助
按钮,会在默认浏览器中打开帮助页面。
单击 关于
按钮,会启动关于窗口。
单击 测试范围
按钮,可以设置测试范围。具体的用法会在后文介绍。
所有功能区的按钮点击后均会暂停游戏,请放心点击!如果想要继续游戏,必须关闭所有由功能区打开的窗口。
1.3.2 学习视图
打开学习视图后,游戏窗口将会隐藏,关闭学习视图或点击 返回游戏
按钮后恢复显示。学习视图仅供学习使用,所有行为不计入积分
你可以将鼠标移到对应的按钮上以显示对应的元素信息。元素信息会被显示在元素周期表上方的空地上。
如果你直接点击某个按钮,将会直接弹窗显示对应的元素信息。
1.3.3 设置测试范围
测试范围的设置格式如下:
范围或代码
, 另一组范围或代码
, 以此类推
代码指对应元素的原子序数。“镧系”按钮的代码是 119
,“锕系”按钮的代码是 120
范围的格式如下:
较小代码
- 较大代码
如果多次设置同一个范围或代码,相当于增加相应范围或代码的抽中概率。
注意:测试范围设置时不可以包含除数字、逗号、横杠以外的其他字符。一组范围只能包含一个横杠,横杠两端必须有数字,且左边<右边,两边数字必须在1~120的范围以内。单个代码必须是1~120的数字。两个逗号之间必须有内容。如果输入不符合要求,将会收到如下弹窗:
设置完之后,点击 提交
或按下 ENTER
可以保存更改。所有更改在下一局生效。窗口关闭时测试范围会和等级、积分一起保存。
2. 设计说明
2.1 设计目的
在初中化学中,元素周期表占据重要地位。但是很多初中生面临着背不下元素周期表的问题。为了解决这一问题,我设计了这个程序,以解决同学们的问题,让同学们在游戏中学会元素周期表。
2.2 开发环境
项目 | 内容 |
---|---|
IDE | Visual Studio Code 2022 Preview (17.1.0 Preview 6.0) |
编程语言 | C# |
开发框架 | .NET 6.0 |
项目类型 | WPF应用程序 |
运行环境 | Windows 10 |
2.3 核心算法
2.3.1 元素选择算法
算法的流程图如下:
为表述方便,流程图有些地方会与实际代码不一致,请以实际代码为准,流程图仅供参考
详细代码:
private void GetNewElement()
{
string elementname = "Unknown";
Random rnd = new();
List<string> selected = new();
List<Button> selected_btns = new();
if (Properties.Settings.Default.Selected.Contains(','))
{
foreach (string str in Properties.Settings.Default.Selected.Split(","))
{
selected.Add(str);
}
}
else
{
selected.Add(Properties.Settings.Default.Selected);
}
foreach (string str in selected)
{
if (str.Contains('-'))
{
for (int i = Convert.ToInt32(str.Split("-")[0].ToString()) - 1; i < Convert.ToInt32(str.Split("-")[1].ToString()); i++)
{
selected_btns.Add(btns[i]);
}
}
else
{
selected_btns.Add(btns[Convert.ToInt32(str) - 1]);
}
}
if (Properties.Settings.Default.Level == 4) elementname = selected_btns[rnd.Next(selected_btns.Count)].Tag.ToString().Split(",")[rnd.Next(3)];
else elementname = selected_btns[rnd.Next(selected_btns.Count)].Tag.ToString().Split(",")[rnd.Next(2)];
ElementNameBar.Content = elementname;
}
2.3.2 范围纠错算法
算法的流程图如下:
为表述方便,流程图有些地方会与实际代码不一致,请以实际代码为准,流程图仅供参考
详细代码:
private int CountChar(char chr,string str)
{
int count=0;
foreach(char c in str)
{
if (c == chr) count++;
}
return count;
}
private bool Check(string CheckText)
{
List<string> list=new();
try
{
if (!string.IsNullOrWhiteSpace(CheckText))
{
if (CheckText.Contains(','))
{
foreach (string s in CheckText.Split(","))
{
if ((!String.IsNullOrWhiteSpace(s)) && (CountChar('-', s) == 1|| CountChar('-', s) == 0) &&s[0]!='-') list.Add(s);
else return false;
}
}
else if (CheckText.Contains(' ')|| CountChar('-', CheckText) > 1 || CheckText[0] == '-') return false;
else list.Add(CheckText);
foreach (string s in list)
{
if ((!s.Contains('-')) && Convert.ToInt32(s) >= 1 && Convert.ToInt32(s) <= 120) return true;
else if (s.Contains('-') && s.Split("-").Length == 2 && Convert.ToInt32(s.Split("-")[0]) >= 1 && Convert.ToInt32(s.Split("-")[0]) <= 120 && Convert.ToInt32(s.Split("-")[1]) >= 1 && Convert.ToInt32(s.Split("-")[1]) <= 120&& Convert.ToInt32(s.Split("-")[0])< Convert.ToInt32(s.Split("-")[1])) return true;
else return false;
}
return false;
}
else return false;
}
catch
{
return false;
}
}
3. 测试记录
序号 | 测试步骤 | 预期结果 | 测试结果 | 问题记录 | 测试日期与版本 | 处理结果 |
---|---|---|---|---|---|---|
1 | 同时打开多个界面(20个),看多个界面的程序是否正常运行 | 程序正常运行 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
2 | 在Windows 7中运行,看是否正常运行 | 程序正常运行 | ✗不通过 | 鼠标双击程序时出现提示“缺少api-ms-win-core-winrt-l1-1-0.dll” | 2022.2.2,BugFix20220202 | 已在v22.2.13中修复:更改发布选项 |
3 | 在Windows XP中运行,看是否正常运行 | 程序正常运行 | ✗不通过 | 鼠标双击程序时出现提示“不是有效的win32应用程序” | 2022.2.2,BugFix20220202 | 因用户过少,没有修复价值,已放弃修复 |
4 | 缩放窗口检查响应式布局是否有效 | 响应式布局有效 | ✗不通过 | 缩放时界面出现错乱 | 2022.2.2,BugFix20220202 | 已在v22.2.13中修复:修复MainWindow.xaml |
5 | 检查倒计时是否正常 | 倒计时正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
6 | 点击按钮,看答对是否有相应的加分 | 加分正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
7 | 点击按钮,看答错是否显示答案 | 提示正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
8 | 不点击按钮,看时间到后是否显答案 | 提示正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
9 | 检查等级积分体系是否正常 | 等级积分体系正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
10 | 点击功能区按钮,看能否启动相应功能 | 功能正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
11 | 打开学习视图,看功能是否正常 | 功能正常 | ✓通过 | - | 2022.2.2,BugFix20220202 | - |
12 | 在Windows 7中运行,看是否正常运行 | 程序正常运行 | ✓通过 | - | 2022.2.13,v22.2.13 | - |
13 | 缩放窗口检查响应式布局是否有效 | 响应式布局有效 | ✓通过 | - | 2022.2.13,v22.2.13 | - |
14 | 检查“选择测试范围”功能是否正常 | 功能正常 | ✗不通过 | 使用横杠选取范围时显示输入无效 | 2022.2.13,v22.2.13 | 已通过更新v22.2.13修复:修复校对算法 |
15 | 检查“帮助”功能是否正常 | 功能正常 | ✗不通过 | 帮助窗口的WebView2控件无法显示 | 2022.2.13,v22.2.13 | 已通过更新v22.2.13修复:取消内嵌浏览器,改为用默认浏览器打开链接 |
16 | 检查“关于”功能是否正常 | 功能正常 | ✗不通过 | 单击链接后,内嵌浏览器的WebView2控件无法显示 | 2022.2.13,v22.2.13 | 已通过更新v22.2.13修复:取消内嵌浏览器,改为用默认浏览器打开链接 |
17 | 检查“选择测试范围”功能是否正常 | 功能正常 | ✓通过 | - | 2022.2.14,v22.2.13 | - |
18 | 检查“帮助”功能是否正常 | 功能正常 | ✓通过 | - | 2022.2.14,v22.2.13 | - |
19 | 检查“关于”功能是否正常 | 功能正常 | ✓通过 | - | 2022.2.14,v22.2.13 | - |
20 | 游戏视图下右键点击按钮,看是否有提示 | 提示正常 | ✓通过 | - | 2022.2.14,v22.2.13 | - |
21 | 检查各窗口界面优化是否有效 | 界面正常 | ✓通过 | - | 2022.2.16,v22.2.16 | - |