![]() |
|
![]() ![]() ![]() |
|
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
У меня родилась идея как сделать. Компилируется, работает, но само не двигается. вообще. только нажатием кнопки...
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Спасибо ) Заработало )
|
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Всем привет! У меня опять вопрос )
Вот код. Проблема в последнем блоке. Вроде как синтаксическая ошибка, хотя не понимаю почему, вроде как взял инфу из книги... Ошибки выделил жирным. Что я пытался сделать? Создать случайное число от 0 до 9 (к сож не знаю как сделать от 1 до 9 (ну это только для сотен) - если кто знает тоже подскажите плз), и к нему прибавить 0, ну, т.е. из допустим 3х сделать 30, т.к. мне нужны десятки и сотни. Но! Есть еще момент который я не реализовал - десятки мне нужны через 20. т.е. 00, 20, 40, 60, 80. Все это должно перемещать яблоко по случайным координатам. И еще момент - у меня яблоко перемещается каждые n секунд и быстро скрывается из виду. Да, это из за того что я все вписал в таймер, но нигде больше перемещение не работает. Может как то можно создать отдельное событие о пересечении координат головы змеи и яблока?
[C++ Error] Unit1.cpp(74): E2188 Expression syntax [C++ Error] Unit1.cpp(75): E2188 Expression syntax [C++ Error] Unit1.cpp(76): E2188 Expression syntax Дальше варнинги о обьявленых но неиспользованных переменных. Это сообщение отредактировал(а) Lehon - 11.10.2009, 11:23 |
|||
|
||||
Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
А что вы пытаетесь сделать в этих строках? Фактически получается прибавление строки к числу. А это недопутимо. Да ещё и знак "+" зачем-то перед ";" стоит. Нужно справа добавить нулей к числу? Можно просто умножить число на 10^n, где n - необходимое число нулей.
-------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Умножить на 10? Не подумал даже... действительно простейший выход )
Да, я хотел к числу которое выдал рандом добавить нули. А ошибка как я понял в том что я не написал StrToFloat. Попробую умножением... А что насчет других вопросов? |
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Получилось, но с ошибочкой. Все вроде как верно, но! Посмотрите на код:
if (u==i, l==d) {Shape2->Top=a; Shape2->Left=f;}; Когда по Топ перемещаемся, все норм работает, но когда пересекаем Лефт, на котором лежит яблоко, оно перемещается - хотя я до него еще и не доехал. Т.е. Если я иду к яблоку по Топ, то оно перемещается когда совпадают обе координаты, а когда по Лефт, то сразу. И вот я не пойму в чем дело... Может где ошибка, или я не так указал? Нужно ведь что бы if выполнялся когда совпадают ОБА условия. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Может надо
if ((u==i)&& (l==d)) |
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Спасибо! Начало работать. И у меня еще вопросы назрели )))
Вот я создаю новый шейп, такой же как и голова змеи, прямо рядом с ней. Все хорошо, но! С какой бы я стороны не зашел, голова змеи при сьедании яблока меняет свое направление на "вниз", и новый сегмент змеи образуется так же только с одной стороны. И конечно же главный вопрос - как сделать так что бы сегменты перемещались за головой, новый возникали за последними сегментами, и повторяли движение головы по очереди?
Билдер выдает на этот код много варнингов такого вида: [C++ Warning] Unit1.cpp(94): W8060 Possibly incorrect assignment Хотя, к счастью, ни одного еррора. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Правильно выдает - у тебя опять куча присваиваний в if'ах, вместо сравнений
![]() |
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Хы, ну да ) Исправил, теперь голова продолжает движение в заданном направлении при сьедании яблока. Но новые сегменты змеи стелятся по верхнему и левому краю ) И опять же, неясно что делать что бы образовывалась змейка а не набор разбросаных шейпов )
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Для 'змейки' у тебя неправильная логика всей программы. Тело змейки состоит из НАБОРА шейпов, которые надо хранить (например в std::deque). На каждом шаге перемещения создается новая голова змеи на основе координат старой головы (при этом надо вычислять И top И left координаты, а не одну из них). Новая голова добавляется в очередь (deque::push_front). Далее удаляется элемент из хвоста (deque::pop_back). Если змея съедает яблоко, то удаление хвоста блокируется на заданное количество 'тиков' таймера (змея при этом будет расти)
Одна оптимизация - если на данном шаге элемент хвоста должен удаляться, то его можно использовать как новую голову, что бы не удалять/создавать TShape. |
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Буду думать... А как создать событие которое происходит через n милисекунд (Речь о вышеописанном "блокируется на заданное количество тиков таймера").
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
'Тики таймера' имеются в виду вызовы TForm1::Timer1Timer() (по 1 вызову на 1 тик) |
|||
|
||||
Lehon |
|
|||
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Не, это у меня уже есть, там описано почти все движения головы и яблока. Мне надо узнать как сделать грубо говоря
shp->Top=Shape1->Top через 100 милисекунд; shp->Left=Shape1->Left через 100 милисекунд; С очередью и хранением не разберусь никак. Есть мысль просто хранить шейпы вне поля видимости, а потом вызывать. Но, много кода получается - описывать придется каждый шейп, и не дай бог юзер сможет сьесть 100 яблок, когда я максимум предусмотрел 98... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |