TRAMPLE
Гость
|
|
« : 30-06-2008 21:45 » |
|
в общем такое дело. Учил незнаю зачем Кубейсик, а теперь осваиваю VB6, вот только никак книги нормальной найти немогу. Одну прочитал, но одна довольно хилинькая. Итак, вопросов у меня много, но для здешней публики просто смешные! 1: Как сригенить случайное число? В кубейсике все просто было int(rnd*100 +1), а тут оно уже на команду Randomize Timer орет. Чот мне подсказывает что ее вообще ненадо! ) 2: Где и как писать глобальные условия, которые постоянно проверяются. Ну например как только а=6 так чтото происходит. Я такие вещи делал на таймере. Тоесть он постоянно проверяет, но это походу не очень правильно!? 3: Как по нажатию кнопки изменить рисунок? Я щас делаю чтото наподобие танчиков, и хотельсь бы чтобы он поворачивался в соответствующую сторону когда эдит. Image1.Picture= (и что дальше?). 4: Последнее. Да и тут просто совет нужен. Не знаю как заставить танк стрелять. Я делал рисунок "точку" который ездит вместе с танком а потом по клавише летит через таймер который делает напостой .Top= a + 30. А когда снаряд долетал до заданного кордона, возвращался назад и останавливал таймер. Но если мне надо отображение сразу нескольких снарядов, да и геморно оно както выходит. в общем посоветуйте чтото, я думаю каждый писал какуюто простенькую гаму в которой чтото стреляло! Заране всем спасибо. Так чтото написать хочется, аж руки чешутся. Придумываю всякую порнографию чтобы заменить какието стандартные функции о которых я просто не знаю, а потом просто во всем запутываюсь.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 01-07-2008 03:27 » |
|
TRAMPLE, брось каку... На VB6 ничего человеческого не сделаешь, тогда уж садись на .NET бейсик , или айда к нам в c++
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #2 : 01-07-2008 06:19 » |
|
1: Как сригенить случайное число? В кубейсике все просто было int(rnd*100 +1), а тут оно уже на команду Randomize Timer орет. Чот мне подсказывает что ее вообще ненадо! ) Мешает что ли? Это просто инициализация ГПСЧ текущим значением таймера, как все белые люди и делают. 2: Где и как писать глобальные условия, которые постоянно проверяются. Ну например как только а=6 так чтото происходит. Я такие вещи делал на таймере. Тоесть он постоянно проверяет, но это походу не очень правильно!? Это ОЧЕНЬ неправильно. Такое решение входит в top 10 худших багов за всю историю человечества На досуге поищи подробное описание программного комплекса Therac-25 с анализом кода и причин его ошибок. 3: Как по нажатию кнопки изменить рисунок? Я щас делаю чтото наподобие танчиков, и хотельсь бы чтобы он поворачивался в соответствующую сторону когда эдит. Image1.Picture= (и что дальше?). А как ты это делал в QB?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
TRAMPLE
Гость
|
|
« Ответ #3 : 01-07-2008 12:34 » |
|
Хм. Спасибо конечно. Но я не получил ни одного ответа. Все вокруг да около. На первый вопрос понял только то что я черный. На второй только то что это неправильно. На третий... хм, причом тут QB. Темболие что в нем я вообще графикой почти не пользовался. Ну а четвертый вообще все молчком! (((
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #4 : 01-07-2008 15:37 » |
|
На первый вопрос понял только то что я черный. Вопрос странный. Вот код, работающий в VBA, наверняка и в VB 6.0 тоже: Sub Test() Dim X As Integer Randomize Timer X = Int(Rnd * 100 + 1) MsgBox X End Sub И никто ни на что не "орёт". На второй только то что это неправильно. Правильно делать проверку условий по событию изменения тех переменных, которые подвергаются проверке. Конечно, ООП в VB 6.0 не ахти какое (можно сказать никакого), но при грамотном программировании структурными методами это можно реализовать. Проверка условий по таймеру всегда создаёт риск возникновения недопустимого состояния между "тиками" таймера. Последствия при этом непредсказуемые. На третий... хм, причом тут 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
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #6 : 02-07-2008 06:18 » |
|
Ток сначала надо написать эти гребаные танчики чтобы всем доказать что на VB6 это возможно! Оно и на QB возможно
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #7 : 02-07-2008 06:23 » |
|
4: Последнее. Да и тут просто совет нужен. Не знаю как заставить танк стрелять. Я делал рисунок "точку" который ездит вместе с танком а потом по клавише летит через таймер который делает напостой .Top= a + 30. А когда снаряд долетал до заданного кордона, возвращался назад и останавливал таймер. Но если мне надо отображение сразу нескольких снарядов, да и геморно оно както выходит. в общем посоветуйте чтото, я думаю каждый писал какуюто простенькую гаму в которой чтото стреляло! Таймер должен быть независим от снарядов. Снаряды при выстреле должны помещаться в некий массив, а при долёте до цели удаляться из него. При тике таймера другая процедура должна обходить весь массив и двигать все имеющиеся в нём снаряды согласно правилам их полёта. Тогда будет возникать иллюзия одновременного полёта разных снарядов.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
TRAMPLE
Гость
|
|
« Ответ #8 : 02-07-2008 11:21 » |
|
Хм. Попробуем.
А возможно создавать объекты програмно? Ну команды типа PSET как в Кубейсике!
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #9 : 02-07-2008 12:34 » |
|
А возможно создавать объекты програмно? Ну команды типа PSET как в Кубейсике! Странный вопрос. Команда PSET в QB окрашивает пиксел экрана в указанный цвет. Причём тут объекты? И что значит "создавать объекты программно"?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
TRAMPLE
Гость
|
|
« Ответ #10 : 03-07-2008 09:16 » |
|
Типа команда Drow, начал читать книгу по .NET дык там можна создавать обьекты в ходе выполнения програме а не только путем графического рисования кнопок,лейблов и т.п.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 03-07-2008 09:29 » |
|
TRAMPLE, ты имеешь в виду - создать спрайты, которыми потом оперировать, или ?
|
|
|
Записан
|
|
|
|
TRAMPLE
Гость
|
|
« Ответ #12 : 03-07-2008 15:42 » |
|
Водщем рисовать фигуры! ) Кружк, линии, точки и т.д. Только во время самой программы. Короче говоря чтобы пулю в танке создавало, а не рисовать их зарание целую кучу!
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #13 : 03-07-2008 16:28 » |
|
А что мешает это делать в том же QB?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
TRAMPLE
Гость
|
|
« Ответ #14 : 03-07-2008 17:39 » |
|
Длин, я танчики в VB6 пишу! ) Как сказал один чел, есть рот чтобы есть а жопа чтобы срать! VB6 это уже и так не совсем оптимальный вариант, а кубейсик это воще изврат! )))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 04-07-2008 08:00 » |
|
TRAMPLE, вообще то , жопа - это именно VB6 А кувасик был ещё терпим (для доса)
|
|
|
Записан
|
|
|
|
TRAMPLE
Гость
|
|
« Ответ #16 : 04-07-2008 14:07 » |
|
Я не спорю, но чтото графическое на кубейсике не напишешь, вернее напишешь но геморно очень, да и 16 цвето сильно розогнатся не дадут. Я был вшоке когда надыбал прогу (уже непомню где) диагностирования видеокарты написанную на кубейсике!
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #17 : 04-07-2008 14:45 » |
|
TRAMPLE, SCREEN 13 даст тебе полное счастье 256 цветов
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 04-07-2008 17:09 » |
|
TRAMPLE, всё там с графикой в порядке было, да и 16 цветов (а больше, кстати) - не помеха . Просто нельзя разные операционные системы сравнивать вот так , можно программы в пределах одной системы сравнивать
|
|
|
Записан
|
|
|
|
TRAMPLE
Гость
|
|
« Ответ #19 : 04-07-2008 21:03 » |
|
Чот у мя с танчиками не выходит! ((( Вроде все правильно а не выходит. Сто раз проверил код. Снаряд литит то не с того места, то не возвращается на место. Как это может быть ошыбка кода если прога просто работает "нестабильно". Походу это то что мне говорил, таемер дело лагонутое. Довольно часто он какието команды просто не выполняет! (((
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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 Таймер1Image5.Top = t - 50 (постоянно передвигает снаряд на 50 точок вверх) If Image5.Top <= 440 Then Image5.Top = 5200: Image5.Left = 240: Timer1.Enabled = False (когда снаряд доходит до края поля -возвращает его назад на исходную позицыю и вырубает таймер) Heppi End Sub ))
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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)Нифига не понял. Это про какое место говорится. Тоесть "зациклил место, где производится проверка флага"
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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) Не понял что ты имеешь ввиду под словом "Обработчик таймера".
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #26 : 06-07-2008 19:45 » |
|
по 2) - мне это ничего не говорит Я давно забыл этот ужасный VB6. Я бы не использовал контролы, я бы рисовал спрайты сразу на контексте. Как это в VB6 делается - не знаю 3) я всё правильно написал, и это не команды, а лево,право,верх и них прямоугольника, а как ты их получишь - это уже не важно И это не "ручное определение", а просто вычисление 4) а как ты запускаешь таймер и обрабатываешь ?
|
|
|
Записан
|
|
|
|
TRAMPLE
Гость
|
|
« Ответ #27 : 06-07-2008 22:41 » |
|
4) а как ты запускаешь таймер и отрабатываешь ? Слева на пенале выбираю таймер, потом рисую его на форме! Соответственно в левой панельку ставлю Enabled=True и выставляю само время, тоесть интервал.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 07-07-2008 03:30 » |
|
ясненько ) Но как тогда узнаёшь, когда таймер срабатывает ?
(просто в VC это всё проще - прямо в программе завёл всколько угодно таймеров, ловишь сообщение WM_TIMER и делаешь с ними что хотишь)
|
|
|
Записан
|
|
|
|
TRAMPLE
Гость
|
|
« Ответ #29 : 07-07-2008 11:01 » |
|
А тут таймеров дофига надо. Причем если в одном дофига кода, он глючит!
|
|
|
Записан
|
|
|
|
|