记忆力测试课程设计实验报告
7.回车重复这一关
private void hcKeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Enter) {
this.button1.Focus(); button1_Click(sender, e); } }
8.改进与创新
txt.KeyDown += new KeyEventHandler(hcKeyDown);
//添加回车的语句,输错了回车重复这一关 } Controls.Add(txt);
total += 1; left += 60; } else { timer1.Enabled = false;
label2.Text = "凭记忆,依次输入刚才显示的字母"; for (int j = 0; j < total; j++) {
textboxs[keyi].Text = "";
textboxs[keyi].Focus();
//光标向前移一个
} else {
if (e.KeyChar !=13)//如果不是输错了以后回车键的话 {
e.Handled = true;
MessageBox.Show("禁止输入中文");//就不让你输入其他无关东西
//因为后续需要字符串数组单个字母输出正确结果,所以再用数组记录一遍
txt.Left = left;
//设置textbox格式
txt.Top = top;
txt.Width = 50;
txt.Height = 50;
txt.Font = new Font("宋体", 30, FontStyle.Bold);
4. 要求字母以突出的立体效果显示,像是写在有厚度的木板上。
5. 用户输入字母时,无论其键盘是否处于大写锁定状态,都以大写形式显示。在 用户没有输入完当前要求的字母个数前,可以通过“退格键”逐个删除以输入 的字母。
6. 窗口上命令按钮的标题文字和有效状态应根据程序的状态不断变化。在用户输 入字母时,只有“退出键”可用;当输入错误时,“开始按钮变为重复本步” 按钮。在不同阶段,提示文字的内容页不同。
{
zq[i] = 0;
}
timer1.Enabled = true;
}
}
}
2.重新开始 button 按钮(基本同上“重复本步”条件下的 button1)
3.退出 button 按钮
private void button3_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("确认退出吗?", "提示",
visual basic 书上使用的是 label 控件,在最开始 label 控件为主体的程序已经 编写出了雏形,但是却始终没办法输入字母。然后发现 keypress 实现的前提 是有锁定的控件,label.Focus();没有任何用处。书上提到的 line 和 shape 我 的 c#工具栏里并没有,所以就选择了 textbox 完成。Textbox 设置了 fixed3D 却仍旧没有 3D 效果,但是其他都可以顺利完成
2. 单个字母与字符串的拆分表示
输入字母只能以 char 的方式存在,整个问题里的字符串都是 string 类型的, 单个字母无法独自输出,在输出正确答案时遇到了问题。所以就在当初输出字 母时在字符串里保存一遍,在创建一个数组再保存一遍解决问题。在做附加题 时,将 str,str1 全部换成 char[]可以进行单个字符的比较,选出错误的字母显 示红色。
//和重复本步按钮一样
在这个程序中,根据 visual basic 的书上更上一层楼的要求完成了成绩统计和显示错误字母为红色, 其他正确字母为绿色的要求。
(1).成绩统计
利用 form2 完成页面设置,起初设置第一名第二名第三名为 5,4,3,用户如
果结果超过任意一个,重新排序。
if (cj >= no1) {
Visual c# 课程设计报告
课程设计题目:记忆力测试 学 号:150411114 姓 名:杨萌 学院班级:经济管理学院-信管 15 0
二〇一六年十二月
一. 问题描述
1. 启动程序,显示启动界面。单击“开始”按钮,程序依次弹出 3 个随机生成的 大写字母。半秒钟后,字母消失,一个竖线光标提示用户重新输入刚才的字母。
txt.ForeColor = Color.Purple;
txt.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
//尽管这样,还是看不出3D效果?
txt.AutoSize = false;
textboxs[total] = txt; txt.KeyPress += new KeyPressEventHandler(txtKeyPress); if (total == nd - 1) {
no3 = no2; no2 = no1; no1 = cj; } else { if (cj >= no2) {
no3 = no2; no2 = cj; } else { if (cj >= no3) {
no3 = cj; } } }
(2).将出错的字母红色强调显示
1) 这一步我尝试了在timer里面直接判断,遇到了判断特别多次但是无法输出 结果的情况和单个char和string无法互相转换的情况。
2. 用户输入 3 个字母后,程序判断输入的字母是否和随机产生的完全相同。如果 相同,程序再随机生成 4 个字母让用户记忆输入;如果不相同,将生成的字母 与输入的字母进行对比,用户可以发现自己那个字母输入不正确。
3. 用户可以选择“重复本步”让程序再生成相同个数的字母重试;如果选择“从 头开始”则从 3 个字母重新开始。
TextBox txt = new TextBox(); int x = rand.Next(26); txt.Text = valArray[x];
//随机取A~Z一个字母
str += valArray[x];
//记录输出字母的字符串加上这个
字母
strf[total] = valArray[x];
啦
} } } }
if (keyi == nd) {
if (str == str1) //如果输入输出一样 {
Байду номын сангаас
数组对应的值变为1 当前步测试";
} }
for (int i = 0; i < nd; i++)
//把以前的textbox都抹掉
{
Controls.Remove(textboxs[i]);
Controls.Remove(textboxszq[i]);
2) 于是我就采取了判断数组的方法,刚开始将数组全部设为0,将输入和输出 的字符串全部转化为char[].(见上述程序)
3) 数组遍历,如果哪个字母不一样,就在那个字母对应的判断数组的位置值 为1.
4) 输出正确答案时,判断数组为1的位置输出红色字母,其余输出绿色字母。
三.难点及解决方法
1. label 和 textbox 的选择
button1.Enabled = false;
按钮在显示和输入字母时不可用 button2.Enabled = false; nd = 3;
for (int i = 0; i < 11; i++) {
zq[i] = 0; } } else {
//开启显示字母的计时器 //使开始重复本步按钮、重新开始
二. 功能模块描述(功能已在程序后//标注)
1.开始和重复本步的 button1
private void button1_Click(object sender, EventArgs e) {
if (button1.Text == "开始") {
label2.Text = "记住以下字母"; label3.Text = ""; timer1.Enabled = true;
if (e.KeyChar <= 90 && e.KeyChar >= 65)
//如果输入为大写字母
{ char c = (char)e.KeyChar;
str1 += c;
//记录输入字母的字符串加上这个字母
keyi++;
//keypress计数器加一
if (keyi != nd) {
//如果光标没到最后一个
//难度最初时为3 //判断字母是否输对的数组初始化
if (button1.Text == "重复本步")
{ str = ""; str1 = "";
label2.Text = "记住以下字母";
button1.Enabled = false; button2.Enabled = false;
for (int i = 0; i < nd; i++) //移除窗体上的所有textbox,
3. 可以输入中文怎么办
Textbox 输入来者不拒,就算输入中文也可以显示,所以就在 keypress 里只 设置输入英文大小写、退格和回车三种可能,其余用 e.Handled = true;解决, 并输出“不能输入中文”使程序容错性更高。
textboxs[keyi].Focus(); //光标向后一个(上面keyi已经加一了)