Помощь - Поиск - Пользователи - Календарь
Полная версия: P-robots
Форум «Всё о Паскале» > Pascal, Object Pascal > Написание игр
Страницы: 1, 2
Altair
Видели поединки P-роботов?
Если нет, советую посмотреть.
Так вот, это очень старая штука.
А что если сделать новую версию, только с более красочными боями?
Тогда можно было бы устраивать бои роботов.
Как идея?
SKVOZNJAK
Это типа змеиных боёв?
Altair
Да, только в существующих P-ROBOTS, деруться точки(на экране)! rolleyes.gif
EXE
У тебя уже что-нибудь написано или все с нуля начинать надо?
Altair
Все с нуля.
-----
А кто здесь боиться трудностей?
AlaRic
Видимо много кто раз молчат! <_<
Altair
Цитата
Видимо много кто раз молчат! 

К сожалению почти все.
APAL
А что это за Р-Роботс? Где можно про них инфу почитать?
Romtek
Цитата(EXE)
У тебя уже что-нибудь написано или все с нуля начинать надо?


Цитата(Oleg_Z)
Все с нуля


Зачем с нуля? Исходники то есть! (у меня, например) smile.gif
Altair
Исходники есть, потому что я кинул ссылку, с которой можно скачать исходники.
Только там 2 проблеммы:
1. Разобраться в коде сложно.
2. Реализация там не очень хорошая. (плохая графика и т.д.)
-----------
Кстати на сурсах побобная идея у кого-то была.
Romtek
На мой взгляд, легче будет всё таки разобраться в коде, т.к. написан неплохо.
А графику улучшить не проблема.
Altair
Тоже верно.
Если я правильно понял тебя, romtek, то ты хочешь сказать: "Я готов улучшать P-ROBOTS". Так?
Romtek
Цитата(Oleg_Z)
Если я правильно понял тебя, romtek, то ты хочешь сказать: "Я готов улучшать P-ROBOTS". Так?
Честное слово, я бы с радостью!
Но сессия не позволит sad.gif
Altair
Я тоже сейчас занят.
Можно отложить это до лучших времен, идея модернизировать П-Роботов, мне очень нравится.
WiZarDX
если проект будет продолжен, то я тоже не прочь к вам подключиться smile.gif
у меня тоже была когда-то такая идея, но токо с танками, а не с роботами, но я думаю с роботами веселее будет smile.gif

так что если что - меня не забывайте rolleyes.gif
Altair
Можно и с танками.
Мы же не говорим, робот-андроид. Танк тоже может быть роботом!
WiZarDX
согласен

у меня есть идея насчет роботов!
что если делать не готовые скомпилированные процдуры для управления роботов, а реализовать что-то наподобие скрипта (с синтаксисом паскаля)

я тут как раз начал скриптами заниматься (т.е. их разработкой), так что недели через 2 можа что и будет работать...
Romtek
Цитата(WiZarDX)
что если делать не готовые скомпилированные процдуры для управления роботов, а реализовать что-то наподобие скрипта (с синтаксисом паскаля)
Идея хорошая! Я тоже об этом думал.
Altair
В связи с некоторыми событиями, тема оживает, и набираются желающие.
Нам нужны:

1. программист графики
2. программист системник
3. компилятор*
4. художник
5. сценарист
Это не значит, что нам нужны специалисты, просто если хотите учавствовать, то определитесь кем вы будете

------------------
ПРИМЕЧАНИЕ:
* компилятор - человек, занимающийся компиляцией (словарь Ожегова)
компиляция - процесс сборки в единое целое чужих исследований, разработок (тоже из Ожегова)
BlackShadow
Скинул бы как проект для команды. Всё равно простаивает эта затея...
Altair
Так и есть!
FreeMan
2. программист системник скорее всего.
WiZarDX
1. grafix programmer

esli eto budet bez vsiakix tam OpenGL'ov i DirectX'ov.
GoodWind
Цитата
esli eto budet bez vsiakix tam OpenGL'ov i DirectX'ov.

?? 320x200x 256 colors под dos
Guest
nu pocemu,
mozno dojti i do 1024x768 32bit colors. s VESA rezimami. (LFB ili banked eto cto u kogo idet).
esli konecno takije rezimy u vas podderzivajuca...

opyt s programirovanijem VESA rezimov u menia est.
WiZarDX
sorry, cto ne zaregistrirovalsia vnaciale...

razjasnite mne odnu vesh' - podo cto budet P-ROBOTS pisatsia? pod DOS?

PS. esli cto, to ja storonnik DOSa smile.gif
Altair
Да, под ДОС.
WiZarDX
togda otlicno smile.gif

esli nuzna budet grafika, to obrashiajtes ko mne.
zelatelno po mail'u, a to na forume ja ne ciasto byvaju, t.k. doma NETa netu...

(wizardx@mail15.com)
Prometeus
А кто-нибудь писал непосредственно роботов под p-robots.
А то оказывается игрушка старючая а роботов в инете написаных кроме стандартных в пакете я не нашел. Вот написал робота который всех сделал хотел померяться с чужими.

ЗЫ. Мне такого рода прут игрушки. Не понимаю почему их так мало. Или если есть то тупые какие-то.
RL
Дети, хватит париться над этими мелочами. ;) Пора бы перейти на 32-х разрядную графику с разрешением 800*600. И попробуйте делать проги > 10 мегов. lol.gif
Altair
RL, между прочим, ребенок, тут никто 16 битными и не занимается.
Цитата
И попробуйте делать проги > 10 мегов. 

<_<
Плохо... слишком большой код, я уверен что его можно оптимизировать раза в полтора... чем меньше код, тем он надежнее.. windows доказала, что если весишь 200 МБ это не значит что конфетка.

Цитата
Пора бы перейти на 32-х разрядную графику с разрешением 800*600.

Нет, я сейчас занимаюсь DireсtX графикой...
1024*768 32 бита...
мое любимое разрешение.. такое было еще в старом добром ДОСе ...
Rl
У меня около 500Kb занимает код... А остальное музыка, картинки и данные... :low:
Altair
500 кб исходный текст кода или EXE?
если второе то не о чем не говорит, у меня 1,6 МБ не сжимая... (оптимизация по времени исполнения).
RL
Исходный текст конечно. Но картинки в формате BMP. Если знаешь как можно читать в TMT Pascal JPEG поделись опытом, буду благодарен!
Altair
Цитата
Если знаешь как можно читать в TMT Pascal JPEG поделись опытом, буду благодарен!

С удовольствием.
А именно: не занимайся бредом, качай библиотеку GraphiX:

http://stud3.tuwien.ac.at/%7Ee9826443/graphix/gxframe.html


она под FPC вообще-то, но и под TMT вроде пашет, так вот, она поддерживает куча граф. и медиа файлов.

Зачем изобретать велосипед, если он есть?


Цитата
GraphiX is a Graphics Library for Freepascal running under DOS, Windows and Linux
It is designed to provide an easy and fast access to various graphics modes
Resolutions from 320x200 upto 1600x1200 and higher at colordepths 8,15,16,24 and 32bits are supported
many drawing primitives - pixels, lines, bars, rectangles, circles, polygonens, ...
mouse-library - colored and size unlimited mouse pointers
image-handling-library - loading BMP, GIF, ICO, JPG, PCX, PBM/PGM/PPM, PNG, TGA, TIF - saving BMP, PPM, TGA
font-library - it supports FNT-bitmap-fonts, CHR-BGI-fonts, VGA-BIOS 16x8 font and Truetype-Fonts
graphics-effects-library - alphablending, saturated add/sub, masking operations, rotating, scaling, ...
triangle-output-library - it can be used for 3D things -flat, gouraud-shaded and textured triangles)
video & animation-library - AVI, FLI/FLC, GIF and MOV (Quicktime)

В крйнем случае, компильши на FPC и затем что надо в DLL пихаешь ...
RL
Спасибо за ссылку! :D
Но не все мне подходит. У меня TMT Pascal 3.90 Lite.
Модулей message.fpd, windows.fpd и др. нет, поэтому я не могу пользоваться DirectX. sad.gif
GoodWind
Цитата
не все мне подходит. У меня TMT Pascal 3.90 Lite.
Модулей message.fpd, windows.fpd и др. нет, поэтому я не могу пользоваться DirectX.

тот же трабл sad.gif
Altair
А чем не устраивает Free Pascal?
Можно на нем части кода писать и портировать в динамический библиотеки например....
RL
Качать с инета очень долго, ведь он весит около 16 мегов. sad.gif
Guest
Разве Free Pascal позволяет работать под Windows и с DirectX? huh.gif
GoodWind
Цитата
Разве Free Pascal позволяет работать под Windows и с DirectX?

кхы... посмотрите подменю compile->target
Altair
Цитата
Разве Free Pascal позволяет работать под Windows и с DirectX? 

ха-ха-ха lol.gif

А что нет?


Или вы увидели консольный режим IDE с псевдографикой, и решили что это ДОС? smile.gif
RL
охота воспроизвести MP3 в TMT Pascal. Может кто-нибудь указать ссылку где это найти?
Probel
Цитата(Altair @ 28.11.2004 9:17)
А чем не устраивает Free Pascal?
Можно на нем части кода писать и  портировать в динамический библиотеки например....

ты имеешь в виду, что можно запихнуть части grafix'а в dll а потом из TMT работать с ними?=) а можно по-подробнее плизз rolleyes.gif
Altair
Цитата
ты имеешь в виду, что можно запихнуть части grafix'а в dll а потом из TMT работать с ними?=)

мммм.. ну можно конечно...
MeD что-то пробовал ...
а что подробнее?
пишем DLL в которой исползуем все что надо из графикса..
напрмер INITGRAPh; процедура будет инициализировать граф. режим, а в описании используемм графикс и загружаем какие надо режимы...
Probel
мне б надо в TMT использовать все или почти все из графикса... а именно:
открытие всяких графических фалов (главное это BMP и JPEG), запуск всех видеорижимов графикса(если вдруг стандартные тмтэшные не захотят работать с графическими файлами)
как бы это сделать?
я вообще не умею dll делать и никогда с ними не работал
Altair
думаю поймешь что я имею ввиду..

library MyDLL; 
uses
Windows, Graphix, GxIMG {....} ;

procedure OutBMP(filename:string; x0,y0:integer);
begin
{имея filename, x0,y0 - выводим что надо}
end;

exports
OutBMP;

begin
end.


Цитата
я вообще не умею dll делать и никогда с ними не работал

ну так прочти про них...
Probel
Цитата(Altair @ 15.11.2005 21:02)
думаю поймешь что я имею ввиду..
library MyDLL; 
uses
Windows, Graphix, GxIMG {....} ;

procedure OutBMP(filename:string; x0,y0:integer);
begin
{имея filename, x0,y0 - выводим что надо}
end;

exports
OutBMP;

begin
end.


спасибо
Цитата
ну так прочти про них...

а у нас тут где-нить на форуме про это расказывается, или надо ковыряться во всем инэте такую инфу?...
Altair
вот тебе из DRKB:
Цитата
Если ваш компьютер работает под управлением операционной системы Windows, то вы не можете не знать о существовании динамических подсоединяемых библиотек (dynamic link libraries - DLL). Достаточно взглянуть на список файлов, расположенных в системном каталоге Windows - порой количество используемых операционной системой динамических библиотек достигает нескольких сотен. DLL являются неотъемлемой частью функционирования операционных систем семейства Microsoft Windows. Однако для вас может быть неочевидна необходимость использования динамических библиотек при разработке приложений. В рамках данной статьи мы поговорим о принципах функционирования DLL и их использования в процессе создания ваших собственных программ.

Для начала давайте выясним, что собой представляет динамическая подключаемая библиотека. Итак, DLL - это один или несколько логически законченных фрагментов кода, сохраненных в файле с расширением.dll. Этот код может быть запущен на выполнение в процессе функционирования какой-либо другой программы (такие приложения называются вызывающими по отношению к библиотеке), но сама DLL не является запускаемым файлом.

Существует два типа динамических библиотек - исполняемые и библиотеки ресурсов. Однако это не означает, что в одном файле не может находиться и код некоторой функции и какие-либо ресурсы. Просто иногда бывает удобно разнести реализацию исполняемых процедур и используемые приложением ресурсы в разные файлы.

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

Screen.Cursors[myCursor] := LoadCursor(HInstance, MYCURSOR');

LoadCursor - функция Windows API, которая вызывается приложением из динамической библиотеки User 32.dll. Кстати, примером хранимых в динамической библиотеке ресурсов могут являться такие стандартные диалоги Windows, как диалог открытия файла, диалог печати или настройки принтера. Эти диалоги находятся в файле Comctl32.dll. Однако многие прикладные разработчики используют функции вызова форм этих диалогов, совершенно не задумываясь, где хранится их описание.

Второй тип процедур - это те, которые используются только внутри самого файла библиотеки.


Аргументы в пользу использования DLL



Итак, прежде чем перейти к обсуждению структуры динамических библиотек, необходимо поговорить о тех преимуществах, которые предоставляет их использование разработчику. Во-первых, это повторное использование кода. Думаю, нет необходимости пояснять удобство использования один раз разработанных процедур и функций при создании нескольких приложений? Кроме того, в дальнейшем вы сможете продать некоторые из своих библиотек, не раскрывая исходных кодов. А чем тогда это лучше компонентов, спросите вы? А тем, что функции, хранящиеся в библиотеке, могут быть вызваны на выполнение из приложений, разработанных не на Object Pascal, а, например, с использованием C++Builder, Visual Basic, Visual C++ и т.д. Такой подход накладывает некоторые ограничения на принцип разработки библиотеки, но это возможно. Звучит заманчиво? Мне кажется, даже очень. Но это еще не все.

Во-вторых, использование DLL предоставляет возможность использования один загруженного в оперативную память кода несколькими приложениями. К примеру, если вы разрабатываете программное обеспечение для большого предприятия, то вполне возможно, что в различных созданных вами приложениях будут использоваться одни и те же функции, процедуры, формы и другие ресурсы. Естественно, что при выделении общих для нескольких приложений данных в DLL может привести к экономии как дискового пространства, так и оперативной памяти, иногда очень даже существенному.

В-третьих, следует поговорить вот о чем. Всего несколько лет назад при разработке программного обеспечения вы могли совершенно не волноваться относительно распространения ваших продуктов где-либо, кроме вашей страны. Я хочу сказать, что проблема перевода на другие языки текста на элементах управления (пункты меню, кнопки, выпадающие списки, подсказки), сообщений об ошибках и т.д. не стояла так остро, как сейчас. Однако, с повсеместным внедрением интернета у вас появилась возможность быстрой передачи готовых программных продуктов практически в любую точку мира. И что будут делать с вашей программой где-нибудь в Объединенных Арабских Эмиратах, если кроме как по-русски, она с пользователем общаться не умеет? Вы сами можете оценить этот эффект, если хоть раз на экране вашего компьютера вместо с детства знакомого русского языка появляется "арабская вязь" (например, из-за "сбоя" шрифтов). Итак, уже сейчас вы должны планировать возможность распространения ваших приложений в других странах (если, конечно, у вас есть желание получить как можно больше прибыли). Соответственно, встает вопрос быстрого перевода интерфейса вашей программы на другие языки. Одним из путей может являться создание ресурсов интерфейсов внутри DLL. К примеру, можно создать одно приложение, которое в зависимости от версии динамической библиотеки будет выводить сообщения на различных языках.

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


Основы разработки DLL



Разработка динамических библиотек не представляет собой некий сверхсложный процесс, доступный лишь избранным. Если вы достаточно хорошо знакомы с разработкой приложений на Object Pascal, то вам не составит особого труда научиться работать с механизмом DLL. Итак, рассмотрим те особенности создания DLL, которые вам необходимо знать, а в завершении статьи разработаем свою собственную библиотеку.

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

library MyFirstDLL;
uses
  SysUtils, Classes, Forms, Windows;

procedure HelloWorld(AForm : TForm);
begin
  MessageBox(AForm.Handle, 'Hello world!', 'DLL Message Box',
  MB_OK or MB_ICONEXCLAMATION);
end;

exports
  HelloWorld;

begin
end.

Первое, на что следует обратить внимание, это ключевое слово library, находящееся вверху страницы. Library определяет этот модуль как модуль библиотеки DLL. Далее идет название библиотеки. В нашем примере мы имеем дело с динамической библиотекой, содержащей единственную процедуру: HelloWorld. Причем обратите внимание, что данная процедура по структуре ничем не отличается от тех, которые вы помещаете в модули своих приложений. Ключевое слово exports сигнализирует компилятору о том, что перечисленные ниже функции и/или процедуры должны быть доступны из вызывающих приложений (т.е. они как бы "экспортируются" из библиотеки). Подробнее о механизме экспорта мы поговорим чуть позже.

И, наконец, в конце модуля можно увидеть ключевые слова begin и end. Внутри данного блока вы можете поместить код, который должен выполняться в процессе загрузки библиотеки. Достаточно часто этот блок остается пустым.

Как уже говорилось выше, все процедуры и функции, помещаемые в DLL, могут быть разделены на две группы: экспортируемые (вызываемые из других приложений) и локальные. Естественно, внутри библиотеки также могут быть описаны классы, которые в свою очередь содержат методы, но в рамках данной статьи я не буду на этом останавливаться.

Описание и реализация процедур и функций, вызываемых в пределах текущей DLL, ничем не отличаются от их аналогов в обычных проектах-приложениях. Их специфика заключается лишь в том, что вызывающая программа не будет иметь к ним доступа. Она просто не будет ничего знать об их существования, так же, как одни классы ничего не знают о тех методах, которые описаны в секции private других классов.

В дополнение к процедурам и функциям, DLL может содержать глобальные данные, доступ к которым разрешен для всех процедур и функций в библиотеке. Для 16-битных приложений эти данные существовали в единственном экземпляре независимо от количества загруженных в оперативную память программ, которые используют текущую библиотеку. Другими словами, если одна программа изменяет значение глобальной переменной a на 100, то для всех остальных приложений a будет значение 100. Для 32-битных приложений это не так. Теперь для каждого приложения создается отдельная копия глобальной области данных.



Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.