Visual Basic猜词游戏:如何移除被选中3次的Select Case分支
解决猜词游戏中重复选项的移除问题
嘿,我懂你遇到的麻烦了——硬写的Select Case完全没法灵活处理这种需要动态移除重复选项的需求,之前试的数组方案没成,估计是没把单词、提示和它的选中次数绑定在一起,也没做好可用选项的动态管理。
核心思路是把每个单词的信息(单词、提示、选中次数)封装成独立的对象,用一个可动态维护的列表来管理所有可用选项,每次只从「选中次数不足3次」的选项里随机挑选,达到次数上限就直接从列表里移除。
具体实现步骤(VB.NET 示例)
1. 定义封装单词信息的类
先创建一个类来统一存储每个单词的核心数据,这样能把单词、提示和选中次数绑定在一起:
Public Class WordEntry ' 猜词目标 Public Property Word As String ' 提示内容 Public Property Hint As String ' 已被选中的次数,初始为0 Public Property SelectionCount As Integer = 0 End Class
2. 初始化可用单词列表
在游戏初始化阶段(比如窗体加载时),把所有20个单词的信息都加入到一个列表中:
' 类级别变量,用来存储所有可用单词 Private availableWords As List(Of WordEntry) ' 全局随机数生成器,避免每次点击都创建新实例导致重复随机 Private rnd As New Random() Private Sub InitializeWordList() availableWords = New List(Of WordEntry) From { New WordEntry With {.Word = "hockey", .Hint = "A ball game played with curved, wooden sticks"}, New WordEntry With {.Word = "dinghy", .Hint = "This is a small boat usually made out of rubber"}, ' 在这里继续添加剩下的18个单词条目,格式和上面一致 New WordEntry With {.Word = "piano", .Hint = "A keyboard instrument with 88 keys"} } End Sub
3. 重写游戏开始按钮的逻辑
替换原来的Select Case逻辑,改为从可用列表里筛选、随机选择并更新状态:
Private Sub btnStartGame_Click(sender As Object, e As EventArgs) Handles btnStartGame.Click ' 第一步:筛选出还能被选中的单词(次数<3) Dim eligibleWords = availableWords.Where(Function(w) w.SelectionCount < 3).ToList() ' 所有单词都被选够3次了,提示游戏结束 If eligibleWords.Count = 0 Then MessageBox.Show("所有单词都已用完,游戏结束!") Return End If ' 第二步:随机选中一个符合条件的单词 Dim selectedIndex As Integer = rnd.Next(eligibleWords.Count) Dim selectedWord = eligibleWords(selectedIndex) ' 第三步:更新选中次数,达到3次就从可用列表移除 selectedWord.SelectionCount += 1 If selectedWord.SelectionCount = 3 Then availableWords.Remove(selectedWord) End If ' 第四步:展示选中的单词和提示(替换成你自己的UI展示逻辑) lblTargetWord.Text = selectedWord.Word lblHint.Text = selectedWord.Hint End Sub
为什么这个方案可行?
- 相比硬编码的
Select Case,用列表+对象的方式可以动态增删选项,完全满足「选中3次后彻底移除」的需求; - 把单词、提示和选中次数绑定在同一个对象里,状态管理更清晰,不会出现数组索引错位、计数和内容不匹配的问题;
- 每次只从符合条件的选项里随机选择,从根源上避免了选中已达上限的单词。
内容的提问来源于stack exchange,提问作者Oisin O'Connor
相关产品推荐
相关产品推荐

