С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/30: Рейтинг темы: голосов - 30, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 29

Создание текстового квеста на Visual Basic 6

30.06.2013, 23:02. Показов 5838. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла такая задача: после ввода текста в TextBox необходимо подтвердить его нажатием клавиши Enter. В принципе, можно было бы сделать отдельную кнопку, но тогда в игре пришлось бы использовать мышку, что крайне неудобно.
Так же я был бы рад узнать, как сделать так, что бы после нажатия Enter текст в TextBox очищался.
Заранее благодарен за ответ.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.06.2013, 23:02
Ответы с готовыми решениями:

Создание текстового редактова на Basic в Visual Studio 2008
Может у кого-то есть написанный на Basic в Visual Studio 2008 простенький текстовый редактор???? Помогите пожалуйста, курсовая...

Visual Basic 2008. Создание текстового файла на клик
Требуется чтобы при нажатии на кнопку,создавался текстовый файл,по заданному адресу(C:\file.txt - к примеру) За тем нужно чтобы при...

Структура текстового квеста
Хочу попытаться написать текстовый квест по принципу пользователю дают текст с описанием события и пару ответов(или действий). Исходя из...

49
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
05.08.2013, 21:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Phoenix97 Посмотреть сообщение
Так если m не повышать, программа будет удалять только первую строку, а если сделать m = m - 1 то вообще выдаст ошибку.
Ну ты через какую-то переменную выбираешь Номер следующего вопроса, вот ЭТУ переменную после удаления строки не повышай - оставь такую как была....
0
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 29
05.08.2013, 21:10  [ТС]
Цитата Сообщение от morgann55 Посмотреть сообщение
Ну ты через какую-то переменную выбираешь Номер следующего вопроса, вот ЭТУ переменную после удаления строки не повышай - оставь такую как была...
Наверное, я чего-то не понимаю, поскольку m и есть та переменная, которая меняет номер следующего вопроса...
И если её не менять, то будет то, что я описал выше.
0
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
05.08.2013, 21:26
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от Phoenix97 Посмотреть сообщение
The trick, извини, просто не совсем понял, как это сделать. Если не сложно, можешь привести пример?
Могу
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Option Explicit
 
Private Type tRecord
    Text As String
    Visible As Boolean
End Type
 
Dim Rec() As tRecord
 
Private Sub Form_Load()
    Dim I As Long
    
    ReDim Rec(5)
    
    Rec(0).Text = "VB 6 (0)": Rec(0).Visible = True
    Rec(1).Text = "Asm (1)": Rec(1).Visible = True
    Rec(2).Text = "C++ (2)": Rec(2).Visible = True
    Rec(3).Text = "Pascal (3)": Rec(3).Visible = True
    Rec(4).Text = "C# (4)": Rec(4).Visible = True
    Rec(5).Text = "Java (5)": Rec(5).Visible = True
    
    For I = 0 To UBound(Rec)
        List1.AddItem Rec(I).Text
    Next
End Sub
 
Private Sub List1_Click()
    Dim I As Long, Index As Long
    Do Until I > UBound(Rec)
        If Rec(I).Visible Then Index = Index + 1
        If Index = List1.ListIndex + 1 Then Me.Caption = "Index = " & I: Rec(I).Visible = False: Exit Do
        I = I + 1
    Loop
    List1.RemoveItem (List1.ListIndex)
End Sub
2
6644 / 1511 / 169
Регистрация: 09.01.2010
Сообщений: 4,298
05.08.2013, 21:58
Лучший ответ Сообщение было отмечено The trick как решение

Решение

вариант без использования Select, если правильно понял, что надо
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Dim t$(), otv$(), i%, n%
 
Private Sub Form_Load()
  n = 5
  atv_List1 n
End Sub
 
Private Sub List1_Click()
i = List1.ListIndex
List1.RemoveItem i
MsgBox t(i + 1) & vbNewLine & otv(i + 1)
End Sub
 
Sub atv_List1(k%)
ReDim t(k), otv(k)
  For i = 1 To k
    List1.AddItem "Вопрос " & i
    t(i) = "Текст вопроса №" & i
    otv(i) = "Ожидаемый текст ответа на вопрос №" & i
Next i
End Sub
 
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 2 And List1.ListCount = 0 Then
   atv_List1 n
End If
End Sub
2
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
05.08.2013, 21:59
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Тоже кое-что набросал.
Посмотри, может пригодится

Вопросы и ответы - в отдельном текстовом файле такой структуры:

Вопрос №1
ответ №1
ответ №2
ответ №3
ответ №4
Вопрос №2
ответ №1
----------
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Private Type Questions
    'QuNumber As Integer
    QuHasBeen As Boolean
    Question As String
End Type
 
Private Type Answers
    'AnNumber As Integer
    AnHasBeen As Boolean
    Answer As String
End Type
 
Dim Qu() As Questions             ' Массив структур вопросов
Dim An() As Answers               ' Массив структур оветов
Dim countQuestions As Integer     ' Количество вопросов
Const countAnswers As Integer = 4 ' Количество ответов на каждый вопрос
Dim i As Integer, j As Integer
Dim currentQuestion As Integer    ' Номер текущего вопроса
Dim currentAnswer As Integer      ' Номер текущего ответа
 
Private Sub Form_Load()
    Dim St, ff As Integer, n As Integer
    ff = FreeFile
    Open App.Path & "\QuestionsAnswers.txt" For Input As #ff
         Do While Not EOF(ff)
           Line Input #ff, St
           n = n + 1        'считаем строки в текстовом файле
         Loop
    Close #ff
    countQuestions = n / (countAnswers + 1)
    ReDim Qu(1 To countQuestions), An(1 To countQuestions, 1 To countAnswers)
    ' Записываем вопросы и ответы из файла в соответствующие массивы структур
    Open App.Path & "\QuestionsAnswers.txt" For Input As #ff
          For i = 1 To countQuestions
              Line Input #ff, Qu(i).Question
              List1.AddItem Qu(i).Question
              For j = 1 To countAnswers
                   Line Input #ff, An(i, j).Answer
              Next j
          Next i
    Close #ff
End Sub
 
Private Sub List1_Click()
    currentQuestion = List1.ListIndex + 1
    FillList
    Label1.Caption = Qu(currentQuestion).Question
    Label2.Caption = ""
End Sub
 
Private Sub List2_Click()
    For j = 1 To countAnswers
        If List2.List(List2.ListIndex) = An(currentQuestion, j).Answer Then currentAnswer = j
    Next j
    An(currentQuestion, currentAnswer).AnHasBeen = True
    Label2.Caption = An(currentQuestion, currentAnswer).Answer
    FillList
End Sub
 
Sub FillList()
    List2.Clear
    For j = 1 To countAnswers
       If Not An(currentQuestion, j).AnHasBeen Then
           List2.AddItem An(currentQuestion, j).Answer
       End If
    Next j
End Sub
Вложения
Тип файла: rar 9.rar (2.2 Кб, 2 просмотров)
2
05.08.2013, 22:10  [ТС]

Не по теме:

Всё это определённо пригодится, спасибо всем!

0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
05.08.2013, 22:18
А вот еще, чтобы использованные вопросы тоже убирались из листбокса.
Получается типа диалога.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Private Type Questions
    'QuNumber As Integer
    QuHasBeen As Boolean
    Question As String
End Type
 
Private Type Answers
    'AnNumber As Integer
    AnHasBeen As Boolean
    Answer As String
End Type
 
Dim Qu() As Questions             ' Массив структур вопросов
Dim An() As Answers               ' Массив структур оветов
Dim countQuestions As Integer     ' Количество вопросов
Const countAnswers As Integer = 4 ' Количество ответов на каждый вопрос
Dim i As Integer, j As Integer
Dim currentQuestion As Integer    ' Номер текущего вопроса
Dim currentAnswer As Integer      ' Номер текущего ответа
 
Private Sub Form_Load()
    Dim St, ff As Integer, n As Integer
    ff = FreeFile
    Open App.Path & "\QuestionsAnswers.txt" For Input As #ff
         Do While Not EOF(ff)
           Line Input #ff, St
           n = n + 1        'считаем строки в текстовом файле
         Loop
    Close #ff
    countQuestions = n / (countAnswers + 1)
    ReDim Qu(1 To countQuestions), An(1 To countQuestions, 1 To countAnswers)
    ' Записываем вопросы и ответы из файла в соответствующие массивы структур
    Open App.Path & "\QuestionsAnswers.txt" For Input As #ff
          For i = 1 To countQuestions
              Line Input #ff, Qu(i).Question
              List1.AddItem Qu(i).Question
              For j = 1 To countAnswers
                   Line Input #ff, An(i, j).Answer
              Next j
          Next i
    Close #ff
End Sub
 
Private Sub List1_Click()
    For j = 1 To countQuestions
        If List1.List(List1.ListIndex) = Qu(j).Question Then currentQuestion = j
    Next j
    Qu(currentQuestion).QuHasBeen = True
    Text1.Text = Text1.Text & "Вопрос : " & Qu(currentQuestion).Question & vbCrLf
    FillList
    List1.Clear
End Sub
 
Private Sub List2_Click()
    For j = 1 To countAnswers
        If List2.List(List2.ListIndex) = An(currentQuestion, j).Answer Then currentAnswer = j
    Next j
    An(currentQuestion, currentAnswer).AnHasBeen = True
   ' Label2.Caption = An(currentQuestion, currentAnswer).Answer
    Text1.Text = Text1.Text & "Ответ : " & An(currentQuestion, currentAnswer).Answer & vbCrLf & vbCrLf
    FillList
    List2.Clear
End Sub
 
Sub FillList()
    'List1.Clear: List2.Clear
    For j = 1 To countAnswers
       If Not An(currentQuestion, j).AnHasBeen Then
           List2.AddItem An(currentQuestion, j).Answer
       End If
       If Not Qu(j).QuHasBeen Then
           List1.AddItem Qu(j).Question
       End If
    Next j
End Sub
Вложения
Тип файла: rar 99.rar (2.1 Кб, 2 просмотров)
1
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
05.08.2013, 23:39
Лучший ответ Сообщение было отмечено как решение

Решение

Вот сделал чтоб всё управлялось с клавиатуры:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dim m%
'---------------
Private Sub form_load()
'For i = 0 To 10: List1.List(i) = Str(i):Next i ' это для проверки
List1.ListIndex = 0
m = 0
End Sub
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
List1.ListIndex = m ' на случай потери фокуса
If KeyCode = 13 Then
List1.RemoveItem (m): If m > List1.ListCount - 1 Then m = List1.ListCount - 1
List1.ListIndex = m
End If
If KeyCode = 40 Then
m = m + 1: If m > List1.ListCount - 1 Then m = List1.ListCount - 1
End If
If KeyCode = 38 Then
m = m - 1: If m < 0 Then m = 0
End If
 
Select Case List1.List(m) 'èëè Select Case m - ñàì ðàçáåð¸øüñÿ ÷òî òåáå íàäî
Case 1:
'<...>
Case 2:
'<...>
Case 3:
'<...>
'È ò.ä.
End Select
End Sub
(вроде ты так хотел...)
Если тебе уже подсказали лучшее решение, то в топку...

Добавлено через 38 минут
Может в самом начале процедуры Private Sub Form_KeyDown надо добавить
Visual Basic
1
List1.ListIndex = m ' на случай потери фокуса
(добавил на доп.правке)

Добавлено через 7 минут
А вообще лучше использовать Form_KeyUp, чтоб не было повторов...
3
0 / 0 / 0
Регистрация: 30.06.2013
Сообщений: 29
06.08.2013, 00:03  [ТС]
morgann55, да, ваш вариант мне более всего подходит, однако пока он не совсем стабильно работает в программе, но думаю, смогу подогнать его под программу (или программу под него)
0
 Аватар для morgann55
1365 / 207 / 37
Регистрация: 09.02.2012
Сообщений: 745
06.08.2013, 02:25
Ты при подгоне следи чтоб m и ИндексЛиста всегда были равны друг-другу !! Если понадобится кликать мышкой по Листу, то в процедуре клика пропиши обратное приравнивание:
Visual Basic
1
m = List1.ListIndex
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2013, 02:25
Помогаю со студенческими работами здесь

Visual Basic 6 Как вытащить из текстового поля текст компонент WebBrowser
Используется Компонент webbrowser прикол в том что нету name а только имя класса my-input6 а как по нему вытащить из тектового поля текст...

Map для текстового квеста
Доброго времени суток,пишу скрипт для текстовой игры и не знаю как привязать к коду map и текст с описанием действий,не могу привязать...

Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net ?
Где бесплатно скачать учебник по Visual Basic 6 и Visual Basic .Net

Вычисление значений функции двух переменных в Visual Basic - Visual Basic
Помогите пожалуйста! В среде VB написать программу вычисления значений функции двух переменных. Ориентировочный вид окна программы и...

Создание матрицы в Visual Basic
Дано две целочисленные матрицы размером . Найти сумму матриц. Умножить полученную матрицу на значение у: Определить: количество...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru