| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > игра сокобан |
| Автор: ratgunter 11.10.2009, 19:33 |
| подскажите, как организовать игровое поле размером 10 на 10? |
| Автор: ИванМ 11.10.2009, 19:46 |
| Легче всего пользоваться компонентом типа TDrawGrid: RowCount=10, ColCount=10. Также можно свой компонент написать, можно вручную рисовать в канве, можно воспользоваться OpenGL/DirectX, ... |
| Автор: ratgunter 12.10.2009, 09:21 | ||
помогите преобразовать код с паскаля в билдер
|
| Автор: Usper 12.10.2009, 12:38 | ||
Примерно так:
Честно говоря, я подзабыл уже как организуются циклы в паскале, поэтому возможно надо вместо "<=" поставить "<" здесь i1<=max_i и здесь j1<=max_j |
| Автор: ИванМ 12.10.2009, 19:28 | ||
|
| Автор: ratgunter 15.10.2009, 05:38 |
| Спасибо! |
| Автор: ratgunter 19.10.2009, 15:27 |
| Помогите заставить двигаться крота и ящики! вот прога: http://rapidshare.com/files/295030201/_____________________________.rar.html или подскажите как всеже сделать игровое поле, а то я тупо изображениями его построил. |
| Автор: ratgunter 28.10.2009, 20:58 |
| подскажите как выполнить данный код: for (int i=100;i<107;i++) { Imagei->Visible=false; } Надо чтоб все Image с 100 по 107 стали невидимыми |
| Автор: xvr 29.10.2009, 14:03 | ||||
|
| Автор: ratgunter 29.10.2009, 17:41 |
| Огромное спасибо!!!! |
| Автор: ratgunter 31.10.2009, 14:54 | ||
| Подскажите, как сделать чтобы не вручную для Image1 загружать картинку? Должно по моему быть вот так, но почему то не работает:
хотя так у меня на OpnDlg ругается. Например у меня картинка называется 'Крот' подскажите как написать. |
| Автор: xvr 31.10.2009, 16:45 | ||||||
Вроде правильно
|
| Автор: ratgunter 31.10.2009, 17:33 |
| Еще раз скажу что надо: например у меня есть Image1. Если Image2->Top==80, то надо чтобы Image1 автоматически загрузила картинку например с такого пути C:\Users\Ratgunter\Desktoр |
| Автор: xvr 1.11.2009, 09:55 | ||||
|
| Автор: ratgunter 1.11.2009, 12:08 | ||
| Выдает такую ошибку: http://pixs.ru/showimage/1jpg_9070974_337452.jpg Правильно ли я все делаю?
Рисунок надо в формате jpeg или bmp? |
| Автор: xvr 1.11.2009, 18:54 | ||
Правильно, но рисунок должен быть в формате, который поддерживает VCL (в разных версиях это разный набор форматов, но bmp поддерживают все). Кроме того у файла должно быть правильное расширение - VCL распознает формат файла по расширению |
| Автор: ratgunter 1.11.2009, 19:30 |
| Спасибо большое |
| Автор: ratgunter 1.11.2009, 21:29 | ||
Еще вопросик: как сделать такую запись
Пишет, что Picture не является компонентом Control, ну или типа того. |
| Автор: xvr 2.11.2009, 10:37 | ||||||
Надо привести типы более точно -
|
| Автор: ratgunter 2.11.2009, 14:21 |
| Еще раз огромнейшее спасибо за помощь!!! |
| Автор: ratgunter 2.11.2009, 17:48 | ||||
| Простите за кучу вопросов, но как сделать: 1) если я нажал на Image60, то поменять картинку.
После данного кода независимо от того, нажал я Image60 или нет, сразу загружается Крот2. 2) Как сравнить, чтобы не двигалось, если стена рядом:
HELP!!! |
| Автор: xvr 2.11.2009, 19:47 | ||||||||
разумеется. OnClick - это event (т.е. указатель на процедуру). Если он присвоен, то if (Image60->OnClick) будет всегда выполняться. Что бы что то сделать при нажатии, это что-то надо поместить в функцию обработки события Click
|
| Автор: ratgunter 2.11.2009, 21:32 |
| Насчет первого вопроса сам разобрался, намудрил много Насчет второго-просто хотел упростить алгоритм движения... |
| Автор: Platov 4.11.2009, 17:11 |
| Мне кажется проще поле хранить в массиве например int где на каждый тип клетки своё число. Все операции выполнять с этим массивом. А потом по массиву отрисовывать поле в специальной функции. |
| Автор: ratgunter 11.11.2009, 09:36 |
| Подскажите, как можно сделать таблицу рекордов. Счетчики у меня есть, мне надо результаты как то записать в файл. Помогите! |
| Автор: xvr 11.11.2009, 16:23 | ||
fprintf уже отменили? |
| Автор: ratgunter 12.11.2009, 16:54 |
| Да просто никогда в билдере ничеог в файл не записывал.. |
| Автор: xvr 12.11.2009, 18:26 |
Ну тогда по порядку:
|
| Автор: ratgunter 16.11.2009, 08:07 |
| подскажите идейки, как можно сделать редактор уровней. |
| Автор: ratgunter 20.11.2009, 18:08 |
| Вопрос такой: Я делаю уровень в редакторе уровней. Сам редактор работает так: на панель закидываю много Image и им программно задаю картинки. Но как мне сохранить панель и открыть ее с моими Image' ами? Диалог SaveDialog сохраняет только Image, а хотелось бы чтоб полностью мою панель... Помогите!!! надо до 10 декабря доделать! |
| Автор: DenWPF 20.11.2009, 18:48 |
| вообще не правльный какой то подход. 1. игра это массив int - где каждая цифра отвечается свою ячейку и все 2. есть функция конторая рисует этот массив. и вот мой пример, даже не помню на чем написан. вроде C++ GDI+ VS2008 |
| Автор: ratgunter 23.11.2009, 10:16 |
| Ну а я может так хочу сделать) Ладно, буду думать сам... |
| Автор: DenWPF 23.11.2009, 12:32 |
| ну мучайся) |
| Автор: ratgunter 24.11.2009, 16:14 |
| Подскажите как сделать таблицу рекордов. У меня есть 10 уровней, для каждого уровня есть свой Label, для каждого уровня считаю количество сделанных шагов и для каждого Label в свойство Caption присваиваю значение. Как теперь эти значения сохранить, куда сохранить? Например на форме их сохранять в StringGrid? А подмкажите как эти значения сохранить в файле, а потом эти значения загружать в StringGrid. |
| Автор: xvr 24.11.2009, 18:59 | ||||||||||
Мсье не ищет легких путей
|
| Автор: DenWPF 24.11.2009, 19:31 |
| так стоп, а как же ты хранишь карты????точнеее где?? скажу что самое простое..хранить их в файле текстовом с своим расширением. очень удобно. |
| Автор: Platov 25.11.2009, 18:07 |
| Уже 2 человека говорят что подход не верен изначально. Если работать с массивом то всё это делается ОЧЕНЬ просто и редактор уровней тоже! Если начать сначала то можно и до 1 декабря успеть. |
| Автор: ratgunter 25.11.2009, 22:46 |
| Ну а где на форме этим массивом рисовать? |
| Автор: DenWPF 25.11.2009, 23:07 |
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 вот массив 4 на 4 проходишь по нему где 0 там рисуешь элемент соотвествующий 0. |
| Автор: ratgunter 26.11.2009, 15:31 |
| Да я понял, на форме то как этот массив сделать? |
| Автор: DenWPF 26.11.2009, 15:47 |
| в плане на форме? ты GDI+ знаешь что такое? |
| Автор: ratgunter 26.11.2009, 17:20 |
| Нет |
| Автор: DenWPF 26.11.2009, 18:04 |
| а как ты рисуешь что то ? |
| Автор: ratgunter 26.11.2009, 21:58 |
| Через Image |
| Автор: DenWPF 26.11.2009, 22:13 |
| ну вот и рисуй, тольо в нужных кординатах. кордината картинки = размер * (х + y) вроде |
| Автор: Platov 27.11.2009, 10:13 | ||
Лови мега пример рисования image с нужной картинкой в нужном месте.
|
| Автор: ratgunter 27.11.2009, 13:28 |
| Подскажите, как сделать так, чтобы текстовый файл file.txt был всегда привязан к папке Sokoban. И как задать путь Sokoban\file.txt чтобы программа сама его находила, а не пришлось самому его прописывать. |
| Автор: DenWPF 27.11.2009, 13:35 |
| Directory.GetCurrentDirectory - но это Сшарп =)) что то подобное и у тебя должно быть=) |
| Автор: xvr 27.11.2009, 14:50 | ||||
|
| Автор: Platov 27.11.2009, 17:43 | ||||
Этот вариант лучше. Поверьте мне.
Как бы вы не запустили прогу, а её место на венике неизменно. А вот все остальные методы не дают 100% гарантии. хотя
скорее всего равноценен. |
| Автор: xvr 27.11.2009, 20:31 | ||||||||||||||||||
Очень распространенное заблуждение. Пример:
|
| Автор: Platov 27.11.2009, 23:12 |
| xvr, |
| Автор: ratgunter 29.11.2009, 09:29 | ||||
Ой как много всего, спасибо. Но что-то я немножко не понял. Я хочу написать НЕ
А вот так хочу написать, просто название папки, чтобы прога сама ее нашла и записала в нее:
|
| Автор: xvr 29.11.2009, 09:49 | ||||||||
|
| Автор: ratgunter 29.11.2009, 10:15 |
| Ругается на AnsiString file_name(AnsiString n) Пишет: [C++ Error] Unit1.cpp(1085): E2108 Improper use of typedef 'AnsiString' |
| Автор: xvr 29.11.2009, 18:41 | ||||
Эта часть
Добавлено через 3 минуты и 22 секунды PS. Советы в конференции не надо трактовать как книгу по черной магии, которую надо вызубрить назубок, и не приведи господь ошибиться хоть в звуке Тут дают советы, и предполагается, что спрашивающий в состоянии их понять и применить, а не тупо скопировать к себе в код куда попало |
| Автор: DenWPF 29.11.2009, 18:50 |
| прям блин в описание разделов "Тут дают советы, и предполагается, что спрашивающий в состоянии их понять и применить, а не тупо скопировать к себе в код куда попало " сори за флуд |
| Автор: ratgunter 30.11.2009, 14:50 | ||||
| Как говорится:"Не стыдно не знать - стыдно не учиться". Еще один вопрос: Так работает все правильно
А можно ли сохранить не ряд целиком, а только один фрагмент, например
|
| Автор: xvr 30.11.2009, 15:09 | ||||
Нет. RecordTable->Cells[2][1] - это AnsiString, у него нет метода SaveToFile. Открывай файл обычным методом (fopen или ofstream), и printf (или <<) туда. |
| Автор: ratgunter 1.12.2009, 18:05 |
| Блин, подскажите пожалуйста без всяких насмешек: У меня есть Label1 и у него в Caption записано число 7. Напишите плиз подробно, как это число записать в файл, а потом как его считать и загрузить например в Label2->Caption, при этом сделав все преобразования типов. Помогите пожалуйста!!!! |
| Автор: xvr 1.12.2009, 20:02 | ||||||||
|
| Автор: ratgunter 1.12.2009, 20:26 |
| Спасибо. |
| Автор: ratgunter 2.12.2009, 15:15 |
| Простите за тупой вопрос: А перед написанием этих строк, где и что надо прописать(например прога ругается на FILE и f) Блин ступил, надо добавить stdio.h да? |
| Автор: ratgunter 2.12.2009, 15:56 |
| У меня Label1->Caption==91; А когда я открываю свой текстовый файл, то в нем не 91, а 17070136 Что это за цифры? |
| Автор: xvr 2.12.2009, 16:57 | ||||
Это адрес строки
|
| Автор: ratgunter 2.12.2009, 17:10 |
| Спасибо! Сохраняет нормально! Добавлено через 4 минуты и 47 секунд Но теперь загружает из фала неправильно) как загрузить например цифру 7 и как загрузить например Имя игрока |
| Автор: xvr 2.12.2009, 20:25 | ||||
Читать тоже строкой в массив
|
| Автор: ratgunter 2.12.2009, 20:52 | ||||
Т.е. вот этот код
надо написать вместо вот этого
Или как? |
| Автор: Platov 2.12.2009, 22:10 | ||
может так легче будет...
и число и имя будут жить в одном файле (это намёк на то что не следует каждый Label сохранять в отдельном файле... сохрани всё что надо в один конфигурационный файл) |
| Автор: xvr 2.12.2009, 22:22 | ||
Угу PS. Platov абсолютно прав по поводу сохранения всего в один файл (с помощью TStringList) |
| Автор: ratgunter 2.12.2009, 22:44 |
| Спасибо xvr и Platov!!!! |
| Автор: ratgunter 5.12.2009, 12:33 |
| Хочу сказать спасибо всем кто помогал. В игре у меня щас все работает. Осталось самое ужасное- редактор уровней. Вообще что мне надо сделать: 1) Редактор уровней 2) Возможность сохранять созданные уровни, а потом их загружать. 3) К названию уровня добавлять имя создателя. Прошу всех помочь в создании. Сперва хочу понять как, на чем и где его размещать в билдере и сам алгоритм: 1) Создать txt файл, в котором будет 10 рядов по 10 столбцов. Пусть 1-ящик 2-стена 3-место для ящика 4-крот. Вопросы: Как этот txt файл загрузить на форму, как для каждой цифры загрузить картинку(например "Крот.jpg") Как потом это все двигать ну т.д. Прошу помочь, надо сдавать 13 декабря. |
| Автор: xvr 5.12.2009, 15:54 | ||||||||||||||
Собственно сам уровень внутри редактора (и игры) лучше хранить в виде массива (2х мерного)
Запись в файл (параметр - имя создателя уровня):
|
| Автор: ratgunter 5.12.2009, 16:35 |
| Вопрос: я все же не пойму, ну запустил я билдер, у меня появилась пустая форма. И мне прям на ней создавать уровень? |
| Автор: ratgunter 5.12.2009, 22:52 |
| Да я уже голову сломал, никак не могу редактор сделать, мож у кого-нибудь есть готовый пример....? |
| Автор: vikaz 5.12.2009, 22:55 |
| сек Добавлено через 7 минут ни у кого под тебя готового редактора не будет |
| Автор: vikaz 5.12.2009, 23:13 | ||
Я думаю, что должно быть примерно так!![]() Вот код кнопки заполнения Image:
Ну и не нужно забывать очищать массив, который создали при помощи new |
| Автор: ratgunter 5.12.2009, 23:57 |
| Ну вот просто нечеловеческое спасибо!!! Ща буду пробовать. кстати дизайн у меня похожий, а крот такойже(из польского мультика), только он в позе другой |
| Автор: ratgunter 6.12.2009, 22:19 |
| Значит я пока сделал возможность создавать уровень http://pixs.ru/showimage/eskizjpg_7439707_372125.jpg теперь мне надо как-то прочитать мой массив из Image'ов и при нажатии на кнопку сохранить он должен записаться в файл вот в таком виде 1111111111 1000000001 1000020201 1001111001 1003111201 1000331001 1000000001 1000000001 1400000001 1111111111 где 0-пустота 1-стена 2-ящик 3-место для ящика 4-крот Вопрос: а как это сделать то??? |
| Автор: vikaz 7.12.2009, 06:25 |
| Если честно, я почему-то был уверен, что в Image сохраняется название загруженного изображения, но вроде это не так, в общем не нашел..... Наверное надо вводить еще один строковой массив в который параллельно будешь писать все изменения при построении уровня. Других предложений пока нет! Добавлено через 1 минуту и 20 секунд ЗЫ. Фон у всех картинок сделай одинаковым, очень сильно бросается в глаза..... Добавлено через 5 минут и 34 секунды зы. зы А почему ты сразу не отображаешь в массиве изменения? Вот сразу как устанавливаешь картинку и пока ты знаешь, что и где ты размещаешь, сразу же и массиве отмечай, в чем сложность? |
| Автор: ratgunter 7.12.2009, 10:58 |
| Действительно, надо сразу записывать в массив |
| Автор: vikaz 7.12.2009, 11:52 | ||||
Конечно int [i][j]; Автоматически ничего не бывает, пока не напишешь или кто-то не напишет! Тебе надо сохранять не только сам массив, но и доп. информацию: Имя создателя (автора), и название уровня. Я бы порекомендовал создать структуру, в ней описать все типы и сохранять саму структуру. Ну а при чтении уровня, все записываем в структуру, а потом уже и визуализируем на форме, все что было в файле! Извини, весь механизм описать не могу, нет у меня этого под рукой, а так не помню.
Вроде как-то так! После чего открываешь файл на запись как двоичный и записываешь всю структуру целиком. ЗЫ. Делал такое очень давно, и не все помню... Только идея! |
| Автор: ratgunter 7.12.2009, 12:40 |
| Дело в том что структуры я не знаю(((( |
| Автор: vikaz 7.12.2009, 12:42 |
| А там нет ничего сложного. ИМХО так будет правильнее... Ну тогда через printf выводи посимвольно в файл. Добавлено через 1 минуту и 23 секунды ЗЫ. Как в мультфильме: "...Лучше день потерять, а потом за 5 минут долететь....." |
| Автор: xvr 7.12.2009, 16:17 | ||
Я тебе уже писал как, вплоть до функций чтения и записи - http://forum.vingrad.ru/index.php?showtopic=276181&view=findpost&p=2038552 |
| Автор: ratgunter 7.12.2009, 16:43 |
| Да я это помню, а как массив то записать? |
| Автор: xvr 7.12.2009, 17:11 | ||
Функция SaveLevelToFile в моем посте |
| Автор: ratgunter 7.12.2009, 18:46 |
| а можно показать пример как массив через printf записать в файл, а тоя делаю а у меня только одна цифра записывается((( |
| Автор: xvr 7.12.2009, 20:43 | ||
Массив - только поэлементно, в цикле. Сразу весь можно ТОЛЬКО в том случае, если этот массив есть символьная строка (т.е. массив char'ов, содержащий только печатаемые символы и завершенный кодом 0) |
| Автор: ratgunter 7.12.2009, 21:42 | ||
Типа вот этого?
Я говорю, не умею работать с файлами(((( |
| Автор: xvr 7.12.2009, 23:32 | ||||||||
Не совсем, типа вот этого
|
| Автор: ratgunter 7.12.2009, 23:42 |
| спасибо |
| Автор: ratgunter 8.12.2009, 21:00 | ||
Не судите строго, но я записал массив в файл
|
| Автор: xvr 8.12.2009, 22:17 | ||||
|
| Автор: ratgunter 10.12.2009, 18:19 | ||
Вот код:
Когда я жму клавишу D (Key==68) у меня Image сразу передвигается к правому краю, хотя по идее еге координаты должны увеличиться лишь на 40. Такая же ситуация с S(Key==83). Другие клавиши A и W работают нормально. Ничего не понимаю |
| Автор: xvr 10.12.2009, 18:28 | ||
Твой if (level[i][j+1]==0) внутри if (Key==68) будет срабатывать на каждой итерации цикла по j |
| Автор: ratgunter 10.12.2009, 18:37 |
| У меня по краям карты стоят стены и за них он не выходит, так что память в порядке Просто влево идет нормально : на одно нажатие клавиши Image смещается на 40 влево, а когда иду вправо, то Image сразу уходит до стены вправо(((( А вообще уровень я сохранил в файл успешно, загрузил из него тоже успешно. Вот теперь пытаюсь сделать, чтобы уровень был рабочим. Но что-то не могу понять как это сделать без огромных циклов |
| Автор: xvr 10.12.2009, 21:29 | ||||||
Он не по стенам, а по памяти фигачит
|
| Автор: ratgunter 11.12.2009, 18:37 |
| Нужно хранить (в отдельных переменных) координаты крота (0-10 по х и у). При нажатии клавишь вычислять новые координаты и смотреть в массиве с уровнем, можно ли туда перейти. Если можно - перемещать Image и обновлять координаты Я так и делаю |
| Автор: xvr 11.12.2009, 18:59 |
| Тот кусок кода, который ты приводил, делает явно не так |