项目实战:猜数游戏#
来源:
D:\study\C#1\WinForm\0804-作业\猜数游戏
系统随机生成 0-99 的数字,玩家输入猜测,提示「猜大了/猜小了」,共 6 次机会。
1. 整体思路#
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 > 0 再 int.Parse |
| 键盘事件 | KeyUp + Keys.R |
💡 改进方向(扩展练习):机会用尽时直接禁用按钮(
button1.Enabled = false);显示历史猜测记录(ListBox);支持设定难度区间。
相关笔记#
- 定时器 Timer 与进度条 ProgressBar — Timer
- 事件的基本使用 — 事件机制
- 循环专项练习 — 猜数练习(控制台版)