Сапёр на VBNET

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сапёр на VBNET

Сообщение zHackLeX » 02.02.2004 (Пн) 13:55

Я решил написать игру типа Сапёра, и хочу создать массив Button'ов. Для этого в шестом бесе я просто использовал массив label'ов (lOut())для поля и CommandButton'ов под именем chkPass() - для неоткрытого поля. Далее я для удобства переоформлял массив в двухмерный, чтобы легче было обрабатывать минное поле:
Dim cArray(X,Y) as CommandButton
Dim fArray(X,Y) as Label 'То же самое для сетки мин
А на этапе загрузки формы я загружал эти элементы в двумерный массив. Очень удобно:

Код: Выделить всё
Private Sub Form_Load()
    NumMines = 50
    Dim l%
    For X = 1 To 25
        For Y = 1 To 15
            If l <> 0 Then
                Load chkPass(l%)
                Load lOut(l%)
            End If
            Set cArray(X, Y) = chkPass(l%)
            Set fArray(X, Y) = lOut(l%)
            l% = l% + 1
            cArray(X, Y).Move cArray(X, Y).Width * (X - 1), _
            cArray(X, Y).Height * (Y - 1)
            fArray(X, Y).Move cArray(X, Y).Left, cArray(X, Y).Top
            cArray(X, Y).Visible = True
            fArray(X, Y).Visible = True
            'cArray(x, y).Style = 1
        Next
    Next
End Sub

Теперь вопросы. Как это всё перебросить в НЕТ? Куда вообще девалось св-во "индекс"? Можно ли сразу создать двумерный массив кнопок? Хелп плиз! А то в шестом бесе сапёр смотрится стрёмно. :(
И ещё. Нет вариантов написания функции, открывающей все соседние пустые клетки (без цифр и мин)? А то моя работает туго и не 100%-но. Заранее благодарен.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 02.02.2004 (Пн) 17:22

А что это в 6 "бэсе" смотрится стрёмно? :evil:
BitBlt'нул бы его, глядишь, красиво б стало...

Kurt
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 105
Зарегистрирован: 05.01.2003 (Вс) 23:25

Сообщение Kurt » 09.02.2004 (Пн) 20:50

Стоп-стоп, не так быстро!
Тебе нужен двумерный массив?
В чем проблема? Разве так не работает (мне немного тяжеловато - я программлю на C#..):
Код: Выделить всё
Dim MyArr(10,10) As Integer

Обращение к элементу:
Код: Выделить всё
MyArr(5,5)


И с массивом кнопок вроде все просто:
Код: Выделить всё
Dim ButArr(10,10) as Button


Или я что-то не так понял?
Для корабля, который не знает куда плыть, нет попутного ветра...

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 11.02.2004 (Ср) 12:24

Насколько я понимаю, вопрос о том, как создать один обработчик события для группы кнопок. Объявление массива Kurt уже порекомендовал. Только он сделал это по C#-овски :) . В бейсике для массива из десяти кнопок надо:
Код: Выделить всё
Dim ButArr(9,9) as Button
Теперь ещё надо собственно создать кнопки (в 6-м это было Load chkPass(l%))
Код: Выделить всё
Dim i As Integer
For i = 0 To 9
    chkPass(i) = New Button()
Next
Ну а теперь уже можно и добавить обработчик:
Код: Выделить всё
Dim i As Integer
For i = 0 To 9
    chkPass(i) = New Button()
    AddHandler chkPass(i).Click, AddressOf ClickHandler
Next

Private Sub ClickHandler (ByVal sender As System.Object, e As System.EventArgs)
    'Add your handling code here
End Sub
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 16.02.2004 (Пн) 15:46

спасибо всем. Жутко извиняюсь, но у меня полетела клава, поэтому я с трудом пишу даже это. как только я решу свою проблему, сразу же отвечу. Я всё тут читаю. Ещё раз спасибо.
ЗЫ. On-Screen Keyboard от ХР ну просто верх неудобства.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 18.02.2004 (Ср) 13:17

Тут мне указали на недоработку :) Нужно ещё добавить кнопку к набору контролов формы:
Код: Выделить всё
Me.Controls.Add(chkPass(i))
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 20.02.2004 (Пт) 21:54

Нет, недоработки тут нет, ты просто не въехал в тему: к одной и той же клетке можно обратиться двумя способами:
Array(x,y) и ChkPass(i), где i = 25*Y+X, если выражаться грубо.
Новых контролов на форму не добавляется вообще в целях экономии памяти.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Lobo
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 108
Зарегистрирован: 08.01.2004 (Чт) 16:49
Откуда: Таллинн, Эстония

Сообщение Lobo » 21.02.2004 (Сб) 20:28

Что-то я, действительно, не въезжаю: зачем нужны два массива, если к одному и тому же массиву можно обратиться и как к двумерному, и как к одномерному? Впрочем, вопрос-то был не об этом. Вопрос был - как на НЕТе сделать массив элементов управления. Так? Это я показал. Двумерный массив создаётся точно так же. Дальше не въезжаю:
zHackLeX писал(а):Новых контролов на форму не добавляется вообще в целях экономии памяти.
Ну как же? Что же это было в твоей 6-й версии:
Load chkPass(l%)
...
cArray(X, Y).Visible = True
Или о чём речь?
Изображение Вопросы - рёбрами!

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 22.02.2004 (Вс) 9:22

Два способа обращения - для удобства. Что до VBNET - всё, помощь, наверное, больше не нужна. Всем спасибо.
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

Aqualung
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 27.02.2004 (Пт) 23:56

Сообщение Aqualung » 01.03.2004 (Пн) 21:06

Привет!

Я уже написал "Сапера", хотя и использовал имиджи, а не метки. А по поводу алгоритма раскрытия... Алгоритм должен быть построен по типу "жизни". При этом, лучше создать класс "Клетка" со свойством "Жизнь" (целым) и двухмерный массив объектов этого класса, соответствующий клеткам.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 76

    TopList