用c#程序编写舒尔特方格的窗体程序: (1) 初始化:设定边长n,取值范围[3, 10],默认值自定。初始化一个方阵,方阵中内容为空。例如当n=5时,显示一个5*5的空白方阵(可用按钮模拟单元格)。 勾选是否选用消除模式(消除模式时,用户按顺序正确点击数字之后,数字立刻消失)。 (2) 专注力训练:点击开始按钮,用n*n个数字填满方阵中的每个位置,数字取值范围[1, n*n],数字所在位置随机。例如当n=5时,用[1, 25]之间的数字随机放到方格中。 计时开始,并显示所用时间。 用户从1开始按数列升序依次点击方格中的数字,如果点击正确,则该数字字体加粗(消除模式时,该数字消失)。 当所有方格中的数字均被正确点击后,训练结束,计时同时结束,提示用户本次所用时长。记录本次成绩,包括n和训练完成时长。 (3) 历史记录:查询不同n时,历史最好成绩。查询某一n时,所有的历史成绩。
时间: 2024-02-01 09:14:54 浏览: 168
以下是用C#编写的舒尔特方格的窗体程序:
```c#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SchulteGrid
{
public partial class Form1 : Form
{
private int n = 5; // 默认边长为5
private bool isEliminate = false; // 是否选用消除模式
private int[,] grid; // 方阵
private Button[,] buttons; // 按钮数组
private int count; // 当前点击数字的计数器
private int totalTime; // 总时间
private int bestTime = -1; // 历史最佳成绩
private List<int> times = new List<int>(); // 所有历史成绩
public Form1()
{
InitializeComponent();
}
// 初始化
private void Init()
{
this.grid = new int[n, n];
this.buttons = new Button[n, n];
this.count = 1;
this.totalTime = 0;
// 清空面板
panel1.Controls.Clear();
// 创建按钮数组
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
Button button = new Button();
button.Text = "";
button.Font = new Font(button.Font.FontFamily, 16);
button.Size = new Size(50, 50);
button.Location = new Point(j * 50 + 10, i * 50 + 10);
button.Click += new EventHandler(Button_Click);
panel1.Controls.Add(button);
this.buttons[i, j] = button;
}
}
// 随机填充数字
Random rand = new Random();
List<int> nums = new List<int>();
for (int i = 1; i <= n * n; i++)
{
nums.Add(i);
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
int index = rand.Next(nums.Count);
int num = nums[index];
nums.RemoveAt(index);
this.grid[i, j] = num;
this.buttons[i, j].Text = num.ToString();
this.buttons[i, j].ForeColor = Color.Black;
this.buttons[i, j].Enabled = false;
}
}
// 显示消除模式选择框
checkBox1.Visible = true;
}
// 点击开始按钮
private void button1_Click(object sender, EventArgs e)
{
// 初始化
Init();
// 开始计时
timer1.Start();
// 启用按钮
foreach (Button button in buttons)
{
button.Enabled = true;
}
}
// 单击数字按钮
private void Button_Click(object sender, EventArgs e)
{
Button button = (Button)sender;
int num = int.Parse(button.Text);
if (num == count)
{
count++;
button.Font = new Font(button.Font, FontStyle.Bold);
if (isEliminate) button.Text = "";
if (count == n * n + 1)
{
// 停止计时
timer1.Stop();
// 记录本次成绩
int time = totalTime / 1000;
times.Add(time);
if (bestTime == -1 || time < bestTime)
{
bestTime = time;
}
// 提示用户所用时长
MessageBox.Show("恭喜你完成挑战!\n用时:" + time.ToString() + "秒");
// 禁用按钮
foreach (Button b in buttons)
{
b.Enabled = false;
}
// 隐藏消除模式选择框
checkBox1.Visible = false;
}
}
}
// 计时器
private void timer1_Tick(object sender, EventArgs e)
{
totalTime += 1000;
label1.Text = "用时:" + (totalTime / 1000).ToString() + "秒";
}
// 改变边长
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
n = (int)numericUpDown1.Value;
}
// 消除模式选择框
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
isEliminate = checkBox1.Checked;
}
// 查询历史成绩
private void button2_Click(object sender, EventArgs e)
{
int n = (int)numericUpDown1.Value;
if (checkBox2.Checked)
{
// 查询历史最佳成绩
if (bestTime == -1)
{
MessageBox.Show("还没有历史最佳成绩!");
}
else
{
MessageBox.Show(n.ToString() + "阶方格历史最佳成绩:" + bestTime.ToString() + "秒");
}
}
else
{
// 查询所有历史成绩
string msg = "";
for (int i = 0; i < times.Count; i++)
{
msg += "第" + (i + 1).ToString() + "次:" + times[i].ToString() + "秒\n";
}
if (msg == "")
{
MessageBox.Show("还没有历史成绩!");
}
else
{
MessageBox.Show(n.ToString() + "阶方格历史成绩:\n" + msg);
}
}
}
}
}
```
在窗体设计器中,我创建了一个面板 `panel1`、一个计时器 `timer1`、一个标签 `label1`、一个开始按钮 `button1`、一个数字选择框 `numericUpDown1`、一个消除模式选择框 `checkBox1`、一个查询历史成绩按钮 `button2`。
当用户点击开始按钮时,程序会进行初始化操作,包括随机填充数字、禁用按钮等。初始化完成后,程序会启动计时器,并启用数字按钮。当用户依次点击数字按钮时,程序会判断是否点击正确,如果正确则将数字加粗(或消除),并将计数器加1。当所有数字均被点击正确后,程序会停止计时器,并记录本次成绩。用户可以查询历史成绩,包括历史最佳成绩和所有历史成绩。
阅读全文