跳转至

项目实战:猜数游戏#

来源D:\study\C#1\WinForm\0804-作业\猜数游戏

系统随机生成 0-99 的数字,玩家输入猜测,提示「猜大了/猜小了」,共 6 次机会。


1. 整体思路#

Random 随机生成数字 → TextBox 输入猜测 → 比较大小提示 → 机会用尽结束(事件解绑)

2. 随机数与游戏状态#

static Random r = new Random();   // 静态随机数(全局共用)
int num = r.Next(100);            // 生成 0~99 的随机数
int change = 6;                   // 剩余机会

💡 Random 声明为 static:每次 new Random() 会基于时间种子,快速连续创建可能生成相同序列。静态只创建一次更可靠。Next(100) 生成 0~99(不含 100)。

3. 猜测逻辑#

private void start(object sender, EventArgs e)
{
    // 1. 解析输入(空输入处理)
    int n = 0;
    if (textBox1.Text.Length > 0) { n = int.Parse(textBox1.Text); }

    // 2. 猜对
    if (n == num)
    {
        label3.Text = "恭喜猜对了";
    }
    // 3. 猜错:提示大小,减少机会
    else if (n < num || n > num)
    {
        change--;
        label3.Text = n < num ? $"猜小了!还剩{change}次机会!" : $"猜大了!还剩{change}次机会!";
        textBox1.Text = null;   // 清空输入框
    }

    // 4. 机会用尽:结束游戏
    if (change == 0)
    {
        label3.Text += "\n拉完了";
        button1.Click -= start;   // 解绑事件:按钮不再响应
    }
}

💡 三元表达式 n < num ? "猜小了" : "猜大了":一行完成判断赋值。button1.Click -= start事件解绑,机会用尽后点击按钮无效。

4. 重新开始 / 作弊查看#

// 重新开始:重置随机数和机会
private void button3_Click(object sender, EventArgs e)
{
    num = r.Next(100);
    change = 6;
    button1.Click += start;    // 重新绑定事件(如果之前解绑了)
}

// 查看答案(作弊按钮)
private void button2_Click(object sender, EventArgs e)
{
    label4.Text = num.ToString();
}

5. 键盘快捷键(按 R 重新开始)#

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.R:
            new Form1();   // 打开新窗体(注意:不是刷新当前窗体)
            break;
    }
}

⚠️ 正确做法是重置变量(像 button3 那样),而不是 new Form1()new 会创建另一个独立窗口,旧窗口还在。

6. 知识点回顾#

技术点 用法
随机数 Random + Next(100)
三元表达式 条件 ? 值1 : 值2
事件解绑 button1.Click -= start
字符串拼接 $"猜小了!还剩{change}次机会!"
输入校验 先判断 Text.Length > 0int.Parse
键盘事件 KeyUp + Keys.R

💡 改进方向(扩展练习):机会用尽时直接禁用按钮(button1.Enabled = false);显示历史猜测记录(ListBox);支持设定难度区间。


相关笔记#