Придумай организацию вопросов и ответов в файле, например
Вопрос|Вариант1|Вариант2|Вариант3|Вариант4|<цифра правельного варианта>
на слейдущей строчки всё аналогично пвторояется...
Сохраним всё в файл q.dat
далее реализуем загрузку всего файла в переменную, для этого будем использовать эту ф-цию
Public Function LoadTextFile(path As String) As String
'Загрузка файла в переменную
Dim l As Long
Dim s As String
n = FreeFile
Open path For Binary As #n
l = LOF(n)
s = String(l, vbNullChar)
Get n, , s
Close #n
LoadTextFile = s
End Function
пользоваться её так:
sPath$ = App.Path & "\q.dat"
'или другой путь к файлу с вопросами
txt$ = LoadTextFile (sPath$)
теперь в переменной txt$ всё содержимое файла q.dat. Разобъём наш файл по строкам, для выбора определённого вопроса
Dim tmpArr$()
tmpArr$ = Split (txt$, vbCrLf)
Теперь сгенерируем случайное число, исходя из которого и будем выберать вопрос
Randomize Timer
Dim num As Integer
num = Int(Rnd * Ubound(tmpArr$)) + 1
Теперь вытащим из массива наш случайный вопрос
q$ = tmpArr$(num)
Разобъём эту строку на вопрос, вариант ответа, и правельный вариант...
Dim tmpArr2$()
tmpArr2$ = Split (q$, "|"
Теперь в
tmpArr2$(0) - сам вопрос
tmpArr2$(1) - Вариант ответа 1
tmpArr2$(2) - Вариант ответа 2
tmpArr2$(3) - Вариант ответа 3
tmpArr2$(4) - Вариант ответа 4
tmpArr2$(5) - Номер верного ответа
Теперь это где-то красиво выводим:
Label1 = tmpArr2$(0)
Option1.Caption = tmpArr2$(1)
Option2.Caption = tmpArr2$(2)
Option3.Caption = tmpArr2$(3)
Option4.Caption = tmpArr2$(4)
Предположим что для выбора ответа 4 кнопки, создим массив элементов Command1(0..3), событие клика которых будут отправлятся в одну и туже функцию, только указывая индекс кнопки (вариант ответа). Эта функция проверять выбранный вариант с правельным, и возвращать True or False соответственно, и так...
Есть массив кнопок Command1(0), Command1(1), Command1(2), Command1(3) И общая функция обработки клика
Private Sub Command1_Click(Index As Integer)
If Check(Index) Then
'ответили правельно, выводим сообщение или переходим к слейдущему, вообщем сам придумаешь
Else
'ответили не правельно, тоже придумаешь...
End if
End Sub
и функция проверки
Private Function Check(Index As Integer) As Boolean
If Index = tmpArr2$(5) then
Check = True
Else
Check = False
End if
End Function
P.S.
Помни про видимость переменных/массив в подпрограммах, т.е. возможно придётся объявить tmpArr$ и tmpArr2$ в декларациях, или модернизировать ф-ции чтобы можно было им передавать массив.
По поводу передачи данных по сети, попробуй посмотреть исходники других программ, здесь полно таких. Там всё очень просто Winsock1.Connect IP, Port и Winsock1.SendData txt$ (txt$ - передаваемые данные, что-то типа возвращаемого значения ф-ции Check, далее на сервере ф-ция Winsock1_DataArrival методом Winsock1.GetData возвратит передаваемые данные, по которым ты будешь орентироваться дальше...)
Ответить
|