Я сейчас пишу код для игры под названием Caladont.
В игре говорится, что первый игрок произносит слово, а следующий должен сказать слово, начинающееся с двух последних букв предыдущего слова.
Проблема возникает, когда я хочу проверить, содержит ли слово менее 3 букв или оно пустое.
В первом цикле, когда список для заполнения еще пуст, все в порядке.
Однако после того, как я наберу, например, 5 или более слов и введу одну букву или оставлю ее пустой, он печатает два сообщения "You've lost!"
, что означает, что код из оператора if игнорируется, поскольку он меняет переменную bool на false и должен выйдите из цикла «Пока».
Я пытался заменить ok = false
на Exit While
в условии, которое проверяет, содержит ли слово менее 3 букв, и это сработало, но я хочу понять, в чем проблема.
Код также можно найти здесь Игра Caladont
- GitHub :
Module Module1
Sub Main()
Kaladont()
End Sub
Sub Kaladont()
Const msg As String = "You've lost!"
Dim list As New List(Of String)
Dim word As String
Dim i As Integer
Dim ok As Boolean
ok = True
While ok
Console.Write("Insert word:")
word = Console.ReadLine()
list.Add(word)
If word.Length < 3 Or word = "" Then
Console.WriteLine(msg)
ok = False
End If
If list.Count > 1 Then 'Skip checking first word
For i = 0 To list.Count - 2
If word.ToLower = lista(i).ToLower Then
Console.WriteLine(msg)
ok = False
End If
Next
If LastTwo(word) = "ka" Or LastTwo(word)="nt" Then
Console.WriteLine("KALADONT! You won!")
ok = False
End If
If FirstTwo(list.Last) <> LastTwo(list(list.Count - 2)) Then
Console.WriteLine(msg)
ok = False
End If
End If
End While
Check()
End Sub
Function FirstTwo(ByVal s1 As String) As String
Return Left(s1.ToLower, 2)
End Function
Function LastTwo(ByVal s2 As String) As String
Return Right(s2.ToLower, 2)
End Function
Sub Check()
Dim sign As Char
Console.WriteLine("Do you want to start new game? y\n")
sign = Console.ReadLine()
If sign = CChar("y") Then
Console.Clear()
Kaladont()
ElseIf sign = CChar("n") Then
Exit Sub
End If
End Sub
End Module
Какие-нибудь решения?