Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Помогите нубу по VB6  (Прочитано 30375 раз)
0 Пользователей и 1 Гость смотрят эту тему.
TRAMPLE
Гость
« : 30-06-2008 21:45 » 

в общем такое дело. Учил незнаю зачем Кубейсик, а теперь осваиваю VB6, вот только никак книги нормальной найти немогу. Одну прочитал, но одна довольно хилинькая. Итак, вопросов у меня много, но для здешней публики просто смешные!  Улыбаюсь

1: Как сригенить случайное число? В кубейсике все просто было int(rnd*100 +1), а тут оно уже на команду Randomize Timer орет. Чот мне подсказывает что ее вообще ненадо! )

2: Где и как писать глобальные условия, которые постоянно проверяются. Ну например как только а=6 так чтото происходит. Я такие вещи делал на таймере. Тоесть он постоянно проверяет, но это походу не очень правильно!?

3: Как по нажатию кнопки изменить рисунок? Я щас делаю чтото наподобие танчиков, и хотельсь бы чтобы он поворачивался в соответствующую сторону когда эдит.  Image1.Picture= (и что дальше?).

4: Последнее. Да и тут просто совет нужен. Не знаю как заставить танк стрелять. Я делал рисунок "точку" который ездит вместе с танком а потом по клавише летит через таймер который делает напостой .Top= a + 30. А когда снаряд долетал до заданного кордона, возвращался назад и останавливал таймер. Но если мне надо отображение сразу нескольких снарядов, да и геморно оно както выходит.  в общем посоветуйте чтото, я думаю каждый писал какуюто простенькую гаму в которой чтото стреляло!

Заране всем спасибо. Так чтото написать хочется, аж руки чешутся. Придумываю всякую порнографию чтобы заменить какието стандартные функции о которых я просто не знаю, а потом просто во всем запутываюсь.  С ума сойти...

Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 01-07-2008 03:27 » 

TRAMPLE, брось каку... На VB6 ничего человеческого не сделаешь, тогда уж садись на .NET бейсик , или айда к нам в c++ Улыбаюсь
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 01-07-2008 06:19 » 

Цитата: TRAMPLE
1: Как сригенить случайное число? В кубейсике все просто было int(rnd*100 +1), а тут оно уже на команду Randomize Timer орет. Чот мне подсказывает что ее вообще ненадо! )
Мешает что ли? Это просто инициализация ГПСЧ текущим значением таймера, как все белые люди и делают.

Цитата: TRAMPLE
2: Где и как писать глобальные условия, которые постоянно проверяются. Ну например как только а=6 так чтото происходит. Я такие вещи делал на таймере. Тоесть он постоянно проверяет, но это походу не очень правильно!?
Это ОЧЕНЬ неправильно. Такое решение входит в top 10 худших багов за всю историю человечества Улыбаюсь
На досуге поищи подробное описание программного комплекса Therac-25 с анализом кода и причин его ошибок.

Цитата: TRAMPLE
3: Как по нажатию кнопки изменить рисунок? Я щас делаю чтото наподобие танчиков, и хотельсь бы чтобы он поворачивался в соответствующую сторону когда эдит.  Image1.Picture= (и что дальше?).
А как ты это делал в QB?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
TRAMPLE
Гость
« Ответ #3 : 01-07-2008 12:34 » 

Хм. Спасибо конечно. Но я не получил ни одного ответа. Все вокруг да около. На первый вопрос понял только то что я черный. На второй только то что это неправильно. На третий... хм, причом тут QB. Темболие что в нем я вообще графикой почти не пользовался. Ну а четвертый вообще все молчком! (((
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 01-07-2008 15:37 » 

Цитата: TRAMPLE
На первый вопрос понял только то что я черный.
Вопрос странный. Вот код, работающий в VBA, наверняка и в VB 6.0 тоже:
Код: (Text)
Sub Test()
    Dim X As Integer
    Randomize Timer
    X = Int(Rnd * 100 + 1)
    MsgBox X
End Sub
И никто ни на что не "орёт".

Цитата: TRAMPLE
На второй только то что это неправильно.
Правильно делать проверку условий по событию изменения тех переменных, которые подвергаются проверке. Конечно, ООП в VB 6.0 не ахти какое (можно сказать никакого), но при грамотном программировании структурными методами это можно реализовать. Проверка условий по таймеру всегда создаёт риск возникновения недопустимого состояния между "тиками" таймера. Последствия при этом непредсказуемые.

Цитата: TRAMPLE
На третий... хм, причом тут QB.
Не знаю, ты сам начал с того, что QB ты знаешь. А причём тут QB?
« Последнее редактирование: 01-07-2008 15:39 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
TRAMPLE
Гость
« Ответ #5 : 01-07-2008 20:10 » 

С рандумом я разобрался. Randomize Timer там вообще не надо. А так все как обычно Int(Rnd*100+1), ну это если нам от 1 до 100 надо. Незнаю почему оно раньше не работало!  Здесь была моя ладья...

С рисунком проблема открыта. Я налажывал 4 рисунка один на один (тоесть так повернутый в четыри разных стороны) и кнопка движения в каждую сторону ставила своему рисунку Visible = True а остальным False, и двигиала все чытири рисунка одновременно. Незнаю насколько это правильно, но работает отлично.

Самый главный вопрос как заставить гребаный танк стрелять?

А вообще я еще пообщался с умным челом и решил что перейду таки на .NET а там и С++ пойдет. Ток сначала надо написать эти гребаные танчики чтобы всем доказать что на VB6 это возможно! )
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 02-07-2008 06:18 » 

Цитата: TRAMPLE
Ток сначала надо написать эти гребаные танчики чтобы всем доказать что на VB6 это возможно!
Оно и на QB возможно Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 02-07-2008 06:23 » 

Цитата: TRAMPLE
4: Последнее. Да и тут просто совет нужен. Не знаю как заставить танк стрелять. Я делал рисунок "точку" который ездит вместе с танком а потом по клавише летит через таймер который делает напостой .Top= a + 30. А когда снаряд долетал до заданного кордона, возвращался назад и останавливал таймер. Но если мне надо отображение сразу нескольких снарядов, да и геморно оно както выходит.  в общем посоветуйте чтото, я думаю каждый писал какуюто простенькую гаму в которой чтото стреляло!
Таймер должен быть независим от снарядов. Снаряды при выстреле должны помещаться в некий массив, а при долёте до цели удаляться из него. При тике таймера другая процедура должна обходить весь массив и двигать все имеющиеся в нём снаряды согласно правилам их полёта. Тогда будет возникать иллюзия одновременного полёта разных снарядов.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
TRAMPLE
Гость
« Ответ #8 : 02-07-2008 11:21 » 

Хм. Попробуем.

А возможно создавать объекты програмно? Ну команды типа PSET как в Кубейсике!
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 02-07-2008 12:34 » 

Цитата: TRAMPLE
А возможно создавать объекты програмно? Ну команды типа PSET как в Кубейсике!
Странный вопрос. Команда PSET в QB окрашивает пиксел экрана в указанный цвет. Причём тут объекты? И что значит "создавать объекты программно"?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
TRAMPLE
Гость
« Ответ #10 : 03-07-2008 09:16 » 

Типа команда Drow, начал читать книгу по .NET дык там можна создавать обьекты в ходе выполнения програме а не только путем графического рисования кнопок,лейблов и т.п.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 03-07-2008 09:29 » 

TRAMPLE, ты имеешь в виду - создать спрайты, которыми потом оперировать, или ? Улыбаюсь
Записан

TRAMPLE
Гость
« Ответ #12 : 03-07-2008 15:42 » 

Водщем рисовать фигуры! ) Кружк, линии, точки и т.д. Только во время самой программы. Короче говоря чтобы пулю в танке создавало, а не рисовать их зарание целую кучу!
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 03-07-2008 16:28 » 

А что мешает это делать в том же QB? Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
TRAMPLE
Гость
« Ответ #14 : 03-07-2008 17:39 » 

Длин, я танчики в VB6 пишу! )  Как сказал один чел, есть рот чтобы есть а жопа чтобы срать! VB6 это уже и так не совсем оптимальный вариант, а кубейсик это воще изврат! )))
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 04-07-2008 08:00 » 

TRAMPLE, вообще то , жопа - это именно VB6 Улыбаюсь  А кувасик был ещё терпим (для доса)
Записан

TRAMPLE
Гость
« Ответ #16 : 04-07-2008 14:07 » 

Я не спорю, но чтото графическое на кубейсике не напишешь, вернее напишешь но геморно очень, да и 16 цвето сильно розогнатся не дадут. Я был вшоке когда надыбал прогу (уже непомню где) диагностирования видеокарты написанную на кубейсике!
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 04-07-2008 14:45 » 

TRAMPLE, SCREEN 13 даст тебе полное счастье 256 цветов Отлично
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #18 : 04-07-2008 17:09 » 

TRAMPLE, всё там с графикой в порядке было, да и 16 цветов (а больше, кстати) - не помеха . Просто нельзя разные операционные системы сравнивать вот так , можно программы в пределах одной системы сравнивать Улыбаюсь
Записан

TRAMPLE
Гость
« Ответ #19 : 04-07-2008 21:03 » 

Чот у мя с танчиками не выходит! ((( Вроде все правильно а не выходит. Сто раз проверил код. Снаряд литит то не с того места, то не возвращается на место. Как это может быть ошыбка кода если прога просто работает "нестабильно". Походу это то что мне говорил, таемер дело лагонутое. Довольно часто он какието команды просто не выполняет! (((
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #20 : 05-07-2008 05:25 » 

TRAMPLE, скорее код кривой всё же ) Вот ты бы его хоть показал
Записан

TRAMPLE
Гость
« Ответ #21 : 05-07-2008 12:44 » 

Код кривой только в том что все существующие условея проверяются таймером. Изза этого походу и глючит. Где их правильно писать вы так и не ответили!  Не понял  Ну вот вам основа так сказать.

Кнопка вверх!
Image1.Visible = True           (делает рисунок там где танк повернутый наверх , видимым. Остальные нет)
Image2.Visible = False         
Image3.Visible = False
Image4.Visible = False
Image1.Top = a - 180          (передвигает все 4 рисенка на 180 точок вверх)
Image2.Top = a - 180
Image3.Top = a - 180
Image4.Top = a - 180
Кнопка выстрел
Image5.Top = a + 150        (ставит рисунок снаряда поценру самого танка "а-это Top танка а s- Left" )
Image5.Left = s + 150
If Image1.Visible = True Then Timer1.Enabled = True  (взависимости в какую сторону повернут танк, такой таймер и запускает, а каждый таймер уводит снаряд в свою сторону)
If Image2.Visible = True Then Timer2.Enabled = True
If Image3.Visible = True Then Timer3.Enabled = True
If Image4.Visible = True Then Timer4.Enabled = True
Таймер1
Image5.Top = t - 50     (постоянно передвигает снаряд на 50 точок вверх)
If Image5.Top <= 440 Then Image5.Top = 5200: Image5.Left = 240: Timer1.Enabled = False (когда снаряд доходит до края поля -возвращает его назад на исходную позицыю и вырубает таймер)
Heppi End Sub  ))
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 05-07-2008 16:32 » 

1) точок пишется точек Ага
2) ЗАЧЕМ сразу 4 картинки ? Тем более - зачем двигать невидимые ? Надо помнить координаты танка и рисовать одну нужную в данный момент картинку
3) центр танка это (Image.Bottom-Image.Top)/2 , (Image.Right-Image.Left)/2
4) ты, чтоли, зациклил место, где производится проверка флага таймера ? А не проще в обработчике таймера работать ? И тормозить не будет
Записан

TRAMPLE
Гость
« Ответ #23 : 05-07-2008 21:39 » 

1) Это не важно!  Улыбаюсь
2) А как подругому. У меня танчик должен смотреть в ту сторону куда едет. Вот я и поставил 4 картинка. Танк смотрящий направо,вниз,налево и вверх!
3) Такого незнал. Хотя код менять помоему необезательно. Какая разница. Но всеравно СПС. В книге про такое небыло написано.
4)Нифига не понял. Это про какое место говорится. Тоесть "зациклил место, где производится проверка флага" Не понял
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 06-07-2008 05:24 » 

1) это я просто намякиваю, что поаккуратнее с копированием через буфер обмена - тут ты в тексте ошибку скопировал, а в программе это будет копия бага )
2) там у тебя контрол, по видимому ( я то думал, ты выводишь спрайт на контекст-девайс) , тогда тебе нужен один контрол Image. Когда надо двинуть танк , двигаешь контрол в текущие координаты танка и заливаешь в него один из 4 рисунков - для нужного направления
3) это в геометрии написано (в каком там классе прямоугольник проходют ? Улыбаюсь )

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

TRAMPLE
Гость
« Ответ #25 : 06-07-2008 15:31 » 

1) Коменты я писал отдельно, когда уже поместил код сюда.
2) Если ты посмотришь на самое верхнее сообщение, ты увидишь та
Цитата
3: Как по нажатию кнопки изменить рисунок? Я щас делаю чтото наподобие танчиков, и хотельсь бы чтобы он поворачивался в соответствующую сторону когда эдит.  Image1.Picture= (и что дальше?).
Так как ты говоришь я и хотел сначала сделать, ток не знаю как загружать рисунки уже в ходе выполнения задачи.
3)Мы по геометрии Бейсик не учили!  Улыбаюсь Да ты еще и неправильно написал. Если уж тебе не нравится ручное вычисления центра то это будет выглядеть вот так:
Image5.Top = (Image4.Height / 2) + Image4.Top
Image5.Left = (Image4.Width / 2) + Image4.Left
И команды "Bottom" вообще нету. Покрайней мере в ВБ6.  Улыбаюсь
4) Не понял что ты имеешь ввиду под словом "Обработчик таймера".
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #26 : 06-07-2008 19:45 » 

по 2) - мне это ничего не говорит Улыбаюсь Я давно забыл этот ужасный VB6. Я бы не использовал контролы, я бы рисовал спрайты сразу на контексте. Как это в VB6 делается - не знаю
3) я всё правильно написал, и это не команды, а лево,право,верх и них прямоугольника, а как ты их получишь - это уже не важно Улыбаюсь И это не "ручное определение", а просто вычисление
4) а как ты запускаешь таймер и обрабатываешь ?
Записан

TRAMPLE
Гость
« Ответ #27 : 06-07-2008 22:41 » 

Цитата
4) а как ты запускаешь таймер и отрабатываешь ?
Слева на пенале выбираю таймер, потом рисую его на форме!  Улыбаюсь
Соответственно в левой панельку ставлю Enabled=True и выставляю само время, тоесть интервал. 
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #28 : 07-07-2008 03:30 » 

ясненько )  Но как тогда узнаёшь, когда таймер срабатывает ?

(просто в VC это всё проще - прямо в программе завёл всколько угодно таймеров, ловишь сообщение WM_TIMER и делаешь с ними что хотишь)
Записан

TRAMPLE
Гость
« Ответ #29 : 07-07-2008 11:01 » 

А тут таймеров дофига надо. Причем если в одном дофига кода, он глючит!
Записан
Страниц: [1] 2  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines