Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация таймера в своём классе (?), не получается =\ 
V
    Опции темы
Dron09
  Дата 20.1.2006, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.11.2005
Где: Солстхейм

Репутация: нет
Всего: нет



Здоровья smile !

Делал тестовое приложение для прогона создания Save/Load функций
на примере "Тамогоча".... и ... вообщем не получается. т.е.:

Приложение представляет собой (на данный момент) собсно форму с некотрым числом кнопочек,
Класс Существа и модуль... просто модуль... (Form1.vb / Pokemon.vb /Modul.vb)

для осуществлении "жизнидеятельности" в класс этого "организма" было засунуто 2 таймера....

при дебаже (после нажатия на кнупки : создать сущ-во/спать) процесс стопориться на строке
AddHandler timer1.Elapsed, AddressOf Live / AddHandler tmSleep.Elapsed, AddressOf SleepTime ругаясь :
An unhandled exception of type 'System.NullReferenceException' occurred in Proect Pokemon.exe

Additional information: Object reference not set to an instance of an object.


.... вот ... даже и не знаю что и думать smile
оговорюсь сразу - в прогр-мировании совсем новичок (совсем совсем smile ) так уш не ругайте сильно, если невижу тут чего-нить оччень очевидного....

Pokemon.vb

Код

Public Class Pokemon
    Private NameP As String = Nothing
    Private Level As Integer = 1
    Public Alive As Boolean = False
    Private Nakakal As Boolean = False ' понятно что ;)



    Public Sleep As Boolean = False ' спит/неспит

    Private KakiP As Integer = 50

    Private HungryP As Integer = 100
    Private PowerP As Integer = 100
    Private SmilyP As Integer = 100

    Dim timer1 As System.Timers.Timer



    Public Sub New()
        Born()
        Tvar = True



    End Sub

    Public Property Name()  ' имя - если оно есть, запись запрещена
        Get
            Return NameP
        End Get
        Set(ByVal Value)
            If NameP = Nothing Then
                NameP = Value
            End If
        End Set
    End Property

    Public ReadOnly Property Nastroenie()
        Get
            Dim op As Integer = (HungryP + PowerP + SmilyP) / 3
            If Nakakal = True Then op = op - 10 ' вонючим жить нехорошо

            Return op
            If op < 10 Then dodie(1)

        End Get

    End Property

    Public Property Hungry()  ' Голод
        Get
            Return HungryP
        End Get
        Set(ByVal Value)
            HungryP = HungryP + Value
            Select Case HungryP
                Case Is > 100
                    HungryP = 100
                Case Is > 0
                    HungryP = 0
            End Select
            If HungryP = 0 Then
                dodie(2)
            End If
        End Set
    End Property

    Public Property Power()
        Get
            Return PowerP
        End Get
        Set(ByVal Value)
            PowerP = PowerP + Value
            Select Case PowerP
                Case Is > 100
                    PowerP = 100
                Case Is > 0
                    PowerP = 0
            End Select
            If PowerP = 0 Then
                dodie(3)
            End If

        End Set
    End Property

    Public Property Smily()
        Get
            Return SmilyP

        End Get
        Set(ByVal Value)
            SmilyP = SmilyP + Value
            Select Case SmilyP
                Case Is > 100
                    SmilyP = 100
                Case Is > 0
                    SmilyP = 0
            End Select

        End Set
    End Property

    Public Property Kaki()
        Get
            Return KakiP
        End Get
        Set(ByVal Value)
            KakiP = KakiP + Value
            Select Case KakiP
                Case Is > 50
                    KakiP = 50
                Case Is < 0
                    KakiP = 0
            End Select

            If KakiP = 0 Then
                Nakakal = True
                KakiP = 50
            End If

        End Set
    End Property

    Private Sub Born()


        AddHandler timer1.Elapsed, AddressOf Live
        timer1.Interval = 3000
        timer1.Enabled = True
        Debug.WriteLine("таймер идет")
        Alive = True
    End Sub

    Private Sub dodie(ByVal formdie As Integer)
        timer1.Enabled = False
        Alive = False
        Select Case formdie
            Case 1
                Debug.WriteLine("Пациент не выдержал столь тяжолой жизни и сдох, застрелившись =( ")
            Case 2
                Debug.WriteLine("Бобик сожрал сам себя :(")

            Case 3
                Debug.WriteLine("Ваш питомец сошёл сума от усталости и решил свести сщеты с жизнью выпрыгнув из электрички на полном ходу без порошута :( ")
            Case Else
                Debug.WriteLine(" Ваш тамогоч отбросил кони. Почему неизвестно. Скорее это ошибка. Обратитесь к программисту.")
        End Select
    End Sub

    Public Sub MakeClean()
        Nakakal = False
    End Sub

    Public Sub ToSleep()
        Dim tmSleep As New System.Timers.Timer ' таймер сна

        tmSleep.Interval = 10000
        AddHandler tmSleep.Elapsed, AddressOf SleepTime
        Sleep = True

        Debug.WriteLine("Заснул !!!!! :)")




        Do Until PowerP = 100
            tmSleep.Enabled = True
            tmSleep.Enabled = False
        Loop

        Sleep = False
        RemoveHandler tmSleep.Elapsed, AddressOf SleepTime






    End Sub

    Private Sub SleepTime(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
        Power = 2 + Me.Level * 2
        Smily = 1 + Me.Level * 2
    End Sub


    Private Sub Live(ByVal source As Object, ByVal e As System.Timers.ElapsedEventArgs)
        Power = -1
        Hungry = -1
        Kaki = -1
        Smily = -1
        Dim o As Integer = Nastroenie
    End Sub


End Class


modul.vb

Код

Module Modul
    Public Tvar As Boolean = False ' переключатель блокировки кнопки создания Покемона 

    Public Sub Eda(ByRef obj) ' накормление жывотного
        obj.Hungry = 50
        Debug.WriteLine(obj.Hungry)
    End Sub

    Public Sub Uborka(ByRef obj) ' уборка за животным
        obj.makeclean()
    End Sub

    Public Sub SleepP(ByRef obj) ' *Зловещий голос* Телепузики! Спать пора! 
        obj.tosleep()
    End Sub

End Module


form1.vb

Код

Public Zver As Object


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        If Tvar = False Then
            Dim animal As New Pokemon
            Controls.Add(Zver)
            Zver = animal
        End If

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Eda(Zver)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        SleepP(Zver)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Uborka(Zver)
    End Sub


Это сообщение отредактировал(а) Dron09 - 21.1.2006, 17:50
PM MAIL   Вверх
Exception
Дата 22.1.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Таймер-то ты объявил, да инстанс не создал. Замени строку
Код
Dim timer1 As Timer

на
Код
Dim timer1 As New Timer
.
PM   Вверх
Exception
Дата 22.1.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



И пара замечаний к коду:
  • Если ты хочешь, чтобы Name задавался один раз, сделай его ReadOnly, а значение задавай в конструкторе.
    Код
    Class Test
    Private _name As String
    Public Sub New(name As String)
    _name = name
    End Sub
    Public ReadOnly Property Name() As String
    Get
    Return _name
    End Get
    End Property
    End Class
  • Включи Option Strict и исправь все ошибки.
  • В методе Set плохо присваивать другие значения переменным, нежели Value. Лучше создай методы IncreasePower и т.п., а в них выполняй
    Добавлено @ 16:34
    необходимые вычисления.
Собственно, это претензии скорее к стилю кода.
PM   Вверх
Dron09
Дата 22.1.2006, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.11.2005
Где: Солстхейм

Репутация: нет
Всего: нет



Exception

Огромное огромное спасибО за помощь и совет !!!!!!! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.