VB.net - Создаем таблицы Шульте
Таблицы Шу́льте (англ. Schulte Table) — таблицы со случайно расположенными объектами (обычно числами или буквами), служащие для тестирования и развития быстроты нахождения этих объектов в определённом порядке. Упражнения с таблицами позволяют улучшить периферическое зрительное восприятие, что важно, например, для скорочтения.
В этой статье я расскажу о том, как создать интерактивные таблицы Шульте.
Стандартная таблица выглядит как квадрат со сторонами 5 Х 5, а внутри находятся цифры от 1 до 25.
В нашей программе будут создаваться таблицы от 2 Х 2 до 7 Х 7, при чем возможно создания таблицы 5 Х 5 в теле которой буквы.
Дополнительная сложность достигается изменением цвета или значений, или самих квадратов, или сразу и того и другого.
На форму помещаем такие элементы:
кнопка - Button1
Нумератор - num
Ярлык - lblNext (следущая буква или цифра)
Ярлык - lblTime (учет времени)
Ярлык - lblByfer (временное хранение, невидимый)
ЧекБокс - CheckBox1 (цифры \ буквы)
ЧекБокс - chkCvet (цвет фона)
ЧекБокс - chkCvet2 (цвет цифры \ буквы)
А далее переходим к коду
Public Class Form1
'объявляем переменные
Public lblN() As Label 'массив ярлыков
Dim full As Byte 'full - размер массива, full = razmer * razmer - 1
Dim razmer As Byte 'razmer - сторона квадрата, razmer = Val(num.Value)
Dim xz = 0 'проверка создавался ли массив - можно сделать как исключение
Dim r As New Random 'случайное число
'элементы для ярлыка
'задаем параметры наших ярлыков - можно добавить доп меню - настройки)
Dim Wir As Byte = 120
Dim Dlin As Byte = 120
Dim rasst As Byte = 1 'промежуток между соседними
Dim startPosL As Byte = 50 'начальное положение 1 ярлыка по У
Dim startPosH As Byte = 50 'начальное положение 1 ярлыка по Х
Dim intervalH,
intervalW
'Переменные для перемешивания
Dim mass()
Dim mass2 As String() = {"а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ"}
Dim massOrig As String() = {"а", "б", "в", "г", "д", "е", "ж", "з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф", "х", "ц", "ч", "ш", "щ"}
Dim chislo As Byte
Dim element1, element2, x, y
Dim ti = 0 ' отсчет времени
'---------------------------------------------
'старт
Sub start()
intervalW = rasst + Wir 'сдвиг соседнего ярлыка по по Х
intervalH = rasst + Dlin 'сдвиг соседнего ярлыка по по У
razmer = Val(num.Value) 'razmer - размерность квадрата из нумерации num
full = razmer * razmer - 1 'full - размер массива
'меняем размер массива
ReDim lblN(full)
If CheckBox1.Checked Then
shiftleL()
Else
shiftleN()
End If
'располагаем наши ярлыки на форме и задаем им числа
For i = 0 To full 'от 0 до последнего элемента
lblN(i) = New Label 'каждый элемент массива - новый ярлык
'размеры у всех одинаковые)
lblN(i).Height = Dlin
lblN(i).Width = Wir
Select Case i
Case 0 To (razmer - 1) '1 строка ярлыков
lblN(i).Left = startPosL + i * intervalW
lblN(i).Top = startPosH
Case (razmer) To (razmer * 2 - 1) '2 строка ярлыков
lblN(i).Left = startPosL + (i - razmer) * intervalW
lblN(i).Top = startPosH + intervalH
Case (razmer * 2) To (razmer * 3 - 1) '3 строка ярлыков
lblN(i).Left = startPosL + (i - razmer * 2) * intervalW
lblN(i).Top = startPosH + intervalH * 2
Case (razmer * 3) To (razmer * 4 - 1) '4 строка ярлыков
lblN(i).Left = startPosL + (i - razmer * 3) * intervalW
lblN(i).Top = startPosH + intervalH * 3
Case (razmer * 4) To (razmer * 5 - 1) '4 строка ярлыков
lblN(i).Left = startPosL + (i - razmer * 4) * intervalW
lblN(i).Top = startPosH + intervalH * 4
Case (razmer * 5) To (razmer * 6 - 1) '6 строка ярлыков
lblN(i).Left = startPosL + (i - razmer * 5) * intervalW
lblN(i).Top = startPosH + intervalH * 5
Case (razmer * 6) To (razmer * 7 - 1) '7 строка ярлыков
lblN(i).Left = startPosL + (i - razmer * 6) * intervalW
lblN(i).Top = startPosH + intervalH * 6
End Select
'текст на наших ярлыках берем из массива mass
If CheckBox1.Checked Then
lblN(i).Text = mass2(i)
Else
lblN(i).Text = mass(i + 1)
End If
'кликаем - получаем индекс элемента
AddHandler lblN(i).Click, AddressOf lblNClick
Me.Controls.AddRange(Me.lblN)
'ЭНД --- кликаем - получаем индекс
'обработка этого события дальше
lblN(i).TextAlign = ContentAlignment.MiddleCenter 'выравниваем текст по центру
lblN(i).Font = New System.Drawing.Font("Arial", 44) 'задаем шрифт
If chkCvet2.Checked Then
lblN(i).ForeColor = (Color.FromArgb(255 * Rnd(), 255 * Rnd(), 255 * Rnd())) 'задаем фон
Else
lblN(i).ForeColor = Color.Black
End If
If chkCvet.Checked Then
lblN(i).BackColor = (Color.FromArgb(255 * Rnd(), 255 * Rnd(), 255 * Rnd())) 'задаем фон
Else
lblN(i).BackColor = Color.Silver 'задаем фон
End If
lblN(i).Visible = True 'делаем видимыми
Me.Controls.Add(lblN(i)) 'добавляем на форму
Next
xz = 1 'регистрируем создание массива ярлыков
End Sub
'удаление массива ярлыков
Sub RES()
For i = 0 To full
Me.Controls.Remove(lblN(i))
Next
End Sub
'перемешивание массива чисел
Sub shiftleN()
'определяем колво элементов - цифр
chislo = (num.Value) ^ 2
ReDim mass(chislo)
'задаем массив последовательных чисел
For i As Integer = 1 To chislo
mass(i) = i
Next
'перемешивание
Randomize()
For i = 1 To 10000
x = Int(Rnd() * chislo + 1) 'Определили случайный элемент массива с номером х
y = Int(Rnd() * chislo + 1) 'Определили случайный элемент массива с номером y
element1 = mass(x) 'Запомнили значение случайного х-элемента массива
element2 = mass(y) 'Запомнили значение случайного y-элемента массива
mass(y) = element1 'Присвоили случайному x элементу значение y элемента
mass(x) = element2 'Присвоили случайному y элементу значение x элемента
Next
End Sub
'перемешивание массива букв
Sub shiftleL()
'определяем колво элементов - цифр
chislo = (num.Value) ^ 2
'перемешивание
Randomize()
For i = 0 To 10000
x = Int(Rnd() * chislo) 'Определили случайный элемент массива с номером х
y = Int(Rnd() * chislo) 'Определили случайный элемент массива с номером y
element1 = mass2(x) 'Запомнили значение случайного х-элемента массива
element2 = mass2(y) 'Запомнили значение случайного y-элемента массива
mass2(y) = element1 'Присвоили случайному x элементу значение y элемента
mass2(x) = element2 'Присвоили случайному y элементу значение x элемента
Next
End Sub
'кликаем - получаем индекс
Private Sub lblNClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim i As Integer
Dim isto4nik, nexts
'Если надо узнать именно индекс в массиве,
'то ищем объект sender
i = Array.IndexOf(lblN, sender)
isto4nik = lblN(i).Text
nexts = lblNext.Text
If CheckBox1.Checked Then
Dim slovo
slovo = massOrig(i)
lblNext.Text = massOrig(Val(lblByfer.Text))
'========================
If isto4nik = nexts Then
lblN(i).Font = New System.Drawing.Font("Arial", 10) 'уменьшаем шрифт!!
lblN(i).BackColor = Color.Silver
lblN(i).Enabled = False
If lblNext.Text = "ш" Then 'если меньше максимального, то +1
lblNext.Text = "все"
Timer1.Enabled = False
Else
lblByfer.Text += 1
lblNext.Text = massOrig(Val(lblByfer.Text))
End If '
Else ' иначе
ti += 5 ' +5 сек
Me.BackColor = Color.Red ' фон красный
End If
'====================
Else
'задаем условия для нажатого ярлыка
If isto4nik = nexts Then 'если номер соответствует цифре в ярлыке lblNext.Text тогда
lblN(i).Font = New System.Drawing.Font("Arial", 10) 'уменьшаем шрифт!!
lblN(i).BackColor = Color.Silver
lblN(i).Enabled = False
If (num.Value) * (num.Value) > Val(lblNext.Text) Then 'если меньше максимального, то +1
lblNext.Text = Val(lblNext.Text) + 1 ' и выводим в lblNext.Text
Else 'иначе
lblNext.Text = "все" 'выводим в текст ВСЕ
Timer1.Enabled = False 'останавливаем таймер
End If '
Else ' иначе
ti += 5 ' +5 сек
Me.BackColor = Color.Red ' фон красный
End If
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
lblByfer.Text = 0
'если массив еще не создавался, то и не удаляем его
If xz > 0 Then RES()
'функция создания массива ярлыков заданого количества и надписи на них
start()
'"обнуляем" время и запускаем таймер
ti = 1
lblTime.Text = 1
If CheckBox1.Checked Then
lblNext.Text = "а"
Else
lblNext.Text = 1
End If
Timer1.Enabled = True
End Sub
'таймер
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Me.BackColor = Color.LightGray 'форма опять серая
'отсчет и запись времени
ti += 1
lblTime.Text = ti
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
If CheckBox1.Checked Then
num.Value = 5
num.Enabled = False
Else
num.Enabled = True
End If
End Sub
End Class
Смотреть видео
В начало
|