Вопрос про переменные

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Вопрос про переменные

Сообщение Ariman » 10.11.2003 (Пн) 21:30

У меня следующий вопрос:
Я в своей игре хочу сделать консоль, в которой можно будет
использовать некоторые отладочные комманды.

Я бы хотел добавить комманды "Показать значение переменной","установить значение переменной".
Как это сделать? Мне надо, чтобы функция в качестве аргумента
получала имя переменной(в стринге), а возвращала значение.
И аналогичная ф-ция для установки значение.
Т.Е. допустим, есть переменная "a", скажем, типа INT.
SetVar("a",10) установит значение "а" на 10,
x=GetVar("a") вернет значение переменной "а" и приравняет "х" к этому значению.
Понятно, что если бы у меня было 2-3 переменые,
можно было бы написать что-нибудь типа
GetVar(Vname as string) as variant 'variant т.к. возвращаемое значение зависит от переменной-аргумента.
if Vname$="a" then GetVar=a
if Vname$="b" then GetVar=b
end sub
Но ведь нельзя же так делать со всеми переменными в программе!
Если кто знает, напишите код этих функций, плз!

И вообще, как можно сделать обработку комманд? Чтоб не писать
If left$(cmd,len("SetVarible"))="SetVarible" then SetVarible(Mid$(),,)
Во второй части я пропустил параметры, лень было высчитывать. Понятное дело
Mid$() вырезает из строки "SetVarible(a,10)" аргументы.............
Как это все организовать?

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 11.11.2003 (Вт) 7:59

Насчет переменных - тут только массив или коллекция. Сейчас код выложу (мин через 5), а то еще поискать надобно....., где-то завалялся....
Изображение

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 11.11.2003 (Вт) 8:09

а вот и он, код. Не самый оригинальный и не самый быстрый, но работающий.
Здесь два класса: первый - Variable. У него свойства Value и Name.
Второй - набор объектов Variable. ну короче говоря посмотри, а если вопросы будут, напиши (там в принципе понятно должно быть).


можно еще ввести двумерные массивы, каждый для своего типа данных, то есть отдельно для стрингов, отдельно для double и т.д.
Вложения
vars.zip
Переменные
(2.3 Кб) Скачиваний: 55
Изображение

Raft
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 24.10.2003 (Пт) 3:32

Сообщение Raft » 11.11.2003 (Вт) 8:49

Примени Dictionary.
В модуле обьяви Dictionary, имя переменной - значение, занеси defaults.

Public dict As Scripting.Dictionary

Set dict = New Scripting.Dictionary

dict.Add "DBName", "test"
dict.Add "ConnectOnLoad", 0

А из проги вызывай Dictionary.

Private DbN as string

chkConnect = dict("ConnectOnLoad")
DbN = dict("DBName")

Значения твскай по ключу или индексу как удобнее

при желании можешь Enumerate

Dim key as Variant

For Each key In dict.Keys

Делай здесь что надо

Next

Vi
Постоялец
Постоялец
 
Сообщения: 739
Зарегистрирован: 25.01.2002 (Пт) 11:03
Откуда: Россия, Ижевск

Сообщение Vi » 11.11.2003 (Вт) 8:50

Есть Script Control, который позволяет это делать. Не скажу по скорости, а по возможностям - все, что тебе нужно.

Метод AddObject позволяет добавить в пространство имен твои объекты. Например, ScriptControl1.AddObject "Me", Me, True добавляет форму в пространство имен.
Код: Выделить всё
Private Sub Form_Load()
  ScriptControl1.AddObject "Me", Me, True
'или так  ScriptControl1.ExecuteStatement "Me.Caption=""xxx"""
'или так  ScriptControl1.ExecuteStatement "Caption=""xxx"""
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! (с) КВН

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 11.11.2003 (Вт) 14:45

Спасибо за идеи.
Но мне больше всего нравится идея со scriptControl.
Это в самом деле наиболее близко к моей цели.
Я сам думал об его использовании. Но единственное что:
в игре я использовал только стандартные контролы, так что в сетап-файл я не вкладывал ничего кроме самих файлов игры.
Но при использовании этого контролы мне придется добавлять и его...
а это увеличит размер сетапа....
И все же, я очень часто видел в некоторых любительских играх,
скажем, в файлах диалогов такие строки как
this.showTopic("*****")
Ясное дело, эта строка не разрезалась чем-нибудь типа mid$ и не сравнивалась If'ом с доступными коммандами, а воспринималась целиком. Но не все же юзают аналог скрипт-контрола! Как же тогда они это делают?

Но, должен сказать, что пока меня устроит и скрипт конрол. Просто хочется найти альтернативное решение этой задачи.........
Все равно спасибо всем.
P.S.
А где можно найти статьи(и хотелось бы на русском, чтоб не париться)
по этому контролу?

Ariman
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 817
Зарегистрирован: 02.09.2003 (Вт) 16:23
Откуда: Великая наша держава, г.Москва

Сообщение Ariman » 11.11.2003 (Вт) 14:52

Да, кстати, как все же изменить значение переменной? Ведь addobject добавляет объекты, а мне нужно изменить значение простых переменных.....


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 11

    TopList