Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.IO
- 'PseudoCode
- ' Solve 3 way quandary, List of Words
- 'Get a Selection of Unused elements -(CountToBeUsed)
- 'Selection of Element are not all Used, Return Only Used (Class WordGroup)
- 'Use all Elements, Reset All Used - Manual & Auto (GetWordAutoReset() As String) 'Add a form Msg "All Words Reset"
- 'Ex1 - Ex2 - Return Some Ellapsed Time
- Public Class Form1
- Private m_wordGroups2 As List(Of WordGroup) = New List(Of WordGroup)()
- Dim allNumbers As New List(Of Integer)
- Dim selectedNumbers As New List(Of Integer)
- Dim CountToBeUsed As Integer
- Dim rand As New Random
- Public UseStreamreader As Boolean = False
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- If UseStreamreader = True Then
- Dim path2 As String = Application.StartupPath & "\Def2.txt"
- m_wordGroups2.Add(New WordGroup(path2))
- Else
- Dim path1 As String = "one two three four five six seven eight nine"
- m_wordGroups2.Add(New WordGroup(path1))
- End If
- End Sub
- Private Sub rndword()
- CountToBeUsed = 5
- 'Generic list for holding the lines
- allNumbers.Clear()
- selectedNumbers.Clear()
- For i As Integer = 0 To m_wordGroups2(0).Count - 1
- If Not m_wordGroups2(0).m_wordList(i).Used Then
- allNumbers.Add(i)
- End If
- Next
- If allNumbers.Count > CountToBeUsed Then
- For i As Integer = 0 To CountToBeUsed
- Dim index As Integer = rand.Next(0, allNumbers.Count)
- Dim selectedNumber As Integer = allNumbers(index)
- selectedNumbers.Add(selectedNumber)
- allNumbers.RemoveAt(index)
- Next
- For i As Integer = 0 To selectedNumbers.Count - 1
- ListBox1.Items.Add(selectedNumbers(i).ToString)
- Next
- ListBox1.Items.Add(" end")
- Else
- 'Get All
- CountToBeUsed = allNumbers.Count - 1
- For i As Integer = 0 To allNumbers.Count - 1
- selectedNumbers.Add(allNumbers(i))
- Next
- For i As Integer = 0 To selectedNumbers.Count - 1
- ListBox1.Items.Add(selectedNumbers(i).ToString)
- Next
- ListBox1.Items.Add(" end fin")
- End If
- End Sub
- ' Load file
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnAutoHandle.Click
- rndword()
- ' Manual Handle
- If Not m_wordGroups2(0).CountUsedWords() = m_wordGroups2(0).Count Then
- Dim scramble As String = m_wordGroups2(0).GetRandomWord()
- ListBox2.Items.Add(scramble)
- Else
- m_wordGroups2(0).ResetAllWords()
- MsgBox("All Words Used")
- Dim scramble As String = m_wordGroups2(0).GetRandomWord()
- ListBox2.Items.Add(scramble)
- End If
- End Sub
- Private Sub BtnTest_Click(sender As Object, e As EventArgs) Handles BtnTest.Click
- allNumbers.Clear()
- For i As Integer = 0 To m_wordGroups2(0).Count - 1
- If Not m_wordGroups2(0).m_wordList(i).Used Then
- allNumbers.Add(i)
- End If
- Next
- Dim Index As Integer = rand.Next(0, allNumbers.Count)
- Dim GetIndexValue As Integer = allNumbers(Index)
- m_wordGroups2(0).m_wordList(GetIndexValue).Used = True
- TextBox2.AppendText(GetIndexValue.ToString & " ")
- End Sub
- End Class
- Public Class WordGroup
- Private m_letterCount As Integer = 0
- Public m_wordList As New List(Of WordItem)(1)
- Private m_trackUsedWords As Boolean = True
- Private m_highEnd As Integer = -1
- Private m_currentWord As String = ""
- #Region "Read-only properties"
- Public ReadOnly Property Count() As Integer
- Get
- Return m_wordList.Count
- End Get
- End Property
- Public ReadOnly Property CountUsed() As Integer
- Get
- Return CountUsedWords()
- End Get
- End Property
- Public ReadOnly Property CurrentWord() As String
- Get
- Return m_currentWord
- End Get
- End Property
- #End Region
- #Region "Non-read-only properties"
- Public Property TrackRepeats() As Boolean
- Get
- Return m_trackUsedWords
- End Get
- Set(ByVal value As Boolean)
- m_trackUsedWords = value
- End Set
- End Property
- #End Region
- #Region "Constructors"
- Public Sub New(ByVal path As String)
- m_wordList.Clear()
- If Form1.UseStreamreader = True Then
- LoadFile(path)
- Else
- LoadFile2(path)
- End If
- End Sub
- #End Region
- Public Function CountUsedWords() As Integer
- Dim used As Integer = 0
- For i As Integer = 0 To m_wordList.Count - 1
- If m_wordList(i).Used Then
- used += 1
- End If
- Next i
- Return used
- End Function
- Public Function LoadFile(ByVal fileName As String) As Boolean
- Dim success As Boolean = False
- Try
- Dim stream As New FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)
- Dim reader As New StreamReader(stream)
- Dim words As String
- Do While Not reader.EndOfStream
- words = reader.ReadLine()
- If words.Length > 0 Then
- Dim wordsplit() As String = words.Split(vbNewLine)
- For i As Integer = 0 To wordsplit.Length - 1
- Dim item As New WordItem(wordsplit(i).ToLower())
- m_wordList.Add(item)
- Next i
- End If
- Loop
- success = True
- Catch e As Exception
- If e IsNot Nothing Then
- End If
- End Try
- Return success
- End Function
- Public Function LoadFile2(ByVal words As String) As Boolean
- Dim success As Boolean = False
- Try
- If words.Length > 0 Then
- Dim wordsplit() As String = words.Split(" ")
- For i As Integer = 0 To wordsplit.Length - 1
- Dim item As New WordItem(wordsplit(i).ToLower())
- m_wordList.Add(item)
- Next i
- End If
- success = True
- Catch e As Exception
- If e IsNot Nothing Then
- End If
- End Try
- Return success
- End Function
- Public Sub ResetAllWords()
- For x As Integer = 0 To m_wordList.Count - 1
- If m_wordList(x).Used Then
- m_wordList(x).Used = False
- End If
- Next
- End Sub
- Public Function GetWordAutoReset() As String
- Dim randomWord As String = ""
- If Not CountUsed = m_wordList.Count Then
- randomWord = GetRandomWord()
- Return randomWord
- Else
- ResetAllWords()
- '
- randomWord = GetRandomWord()
- Return randomWord
- End If
- End Function
- Public Function GetRandomWord() As String
- If m_wordList.Count = 0 Then
- Return ""
- End If
- Dim rndm As New Random
- ' get the word we think we want to use
- Dim randomWord As String = ""
- Do While randomWord = ""
- Dim index As Integer = rndm.Next(0, m_wordList.Count)
- If (Not m_wordList(index).Used) Then
- randomWord = m_wordList(index).Text
- m_wordList(index).Used = True
- End If
- Loop
- Return randomWord
- End Function
- End Class
- Public Class WordItem
- Private m_text As String = ""
- Private m_used As Boolean = False
- Public ReadOnly Property Text() As String
- Get
- Return m_text
- End Get
- End Property
- Public Property Used() As Boolean
- Get
- Return m_used
- End Get
- Set(ByVal value As Boolean)
- m_used = value
- End Set
- End Property
- '--------------------------------------------------------------------------------
- Public Sub New(ByVal text As String)
- m_text = text
- m_used = False
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement