Форум: "Игры";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
ВнизА не устраивать ли нам небольшие конкурсы по кодингу? (ч.4) Найти похожие ветки
← →
Antonn © (2005-08-14 12:25) [440]6)Игра должна быть выполнена без использования каких-либо внешних файлов кроме стандартных. То есть игра должна целиком размещаться в одном EXE файле.
Полная свобода использования посторонних библиотек (с учетом пункта #6).
Т.е. библиотеки зашивать в ЕХЕ? И что значит "стандартных"? Это физику на ODE делать будут?
сжатия его UPX"ом.
совершенно не нравится мне этот пункт...
← →
Zak3D[@Tm] © (2005-08-14 12:56) [441]Нет. Имеются ввиду библиотеки выполненые в *.pas"ах.
Стандартные это теже Opengl,DirectX... Длл-ки.
//
сжатия его UPX"ом.
совершенно не нравится мне этот пункт...
\\
Почему?
Можно более чем 128 килов использовать =).
← →
Sphinx © (2005-08-14 14:22) [442]То есть исспользование собственных движков, даже с открытым кодом запрещено...жаль...
И еще тут играет огромную роль компилятор...
У меня библиотека движка (который только меши грузить пока умеет и рендерить их) под FPC "весит" в два раза больше чем в D7 :(
Я тут посчитал...если буду учавствовать...баллов 6 штрафа точно огребу %)
← →
Zak3D[@Tm] © (2005-08-14 14:29) [443]Почему же?
Собственные движки использовать можно и нужно, но если они не закрыты в Длл.
← →
Sphinx © (2005-08-14 14:39) [444]2 Zak3D[@Tm] ©
Как раз в dll я его пихаю (упорно сопротивляется надо сказать :))
Но код библиотеки я скрывать не буду...если допишу хотябы половину чего задумал до ума...
>"То есть игра должна целиком размещаться в одном EXE файле."
У меня будет тогда
1) game.exe
2) engine3d.dll
Хотя, до срока сдачи еще ой как долго...может и перенесу из библиотеки в исполняемый всё...
← →
NewWonder © (2005-08-14 17:43) [445]Никаких внешних файлов и exe на 128 Кб? Это интересненько. У меня ничего путного (на фоне других) не получится, но попытка - не пытка. Буду пробовать. Так что записывайте меня в участники :)
← →
Кефир87 © (2005-08-14 19:49) [446]
program race;
uses
Windows, OpenGL, Messages;
const
Class_name = "race_wnd";
var
msg : TMsg;
wnd_main : HWND;
DC : HDC;
RC : HGLRC;
do_exit : Boolean = False;
procedure Render;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
SwapBuffers(DC);
end;
function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //îáðàáîò÷èê ñîîáùåíèé
begin
Result := DefWindowProc(hwnd, msg, wparam, lparam);
case Msg of
WM_DESTROY:begin
do_exit := True;
PostQuitMessage(0);
end;
end;
end;
function CreateWnd(w,h:Integer):HWND;
var
wc:TWndClass;
begin
with wc do
begin
style := 0;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := 0;
hCursor := 0;
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := Class_name;
lpszClassName := Class_name;
end;
RegisterClass(wc);
Result := CreateWindow(Class_name,
"Race",
WS_OVERLAPPEDWINDOW or WS_CLIPSIBLINGS or WS_CLIPCHILDREN,
(GetSystemMetrics(SM_CXSCREEN)-w) div 2,
(GetSystemMetrics(SM_CYSCREEN)-h) div 2,
w,
h,
0,
0,
0,
nil);
ShowCursor(False);
if Result<>0 then
begin
ShowWindow(Result, SW_NORMAL);
UpdateWindow(Result);
end;
end;
procedure DoOpenGL;
var
pfd : TPixelFormatDescriptor;
n : Integer;
begin
FillChar(pfd, sizeof(pfd), 0);
with pfd do
begin
nSize := sizeof(pfd);
nVersion := 1;
dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;
iPixelType := PFD_TYPE_RGBA;
cColorBits := 24;
cDepthBits := 16;
iLayerType := PFD_MAIN_PLANE;
end;
n := ChoosePixelFormat(DC, @pfd);
SetPixelFormat(DC, n, @pfd);
DescribePixelFormat(DC, n, sizeof(pfd), pfd);
RC := wglCreateContext(DC);
wglMakeCurrent(DC, RC);
end;
procedure NoOpenGL;
begin
wglMakeCurrent(0, 0);
wglDeleteContext(RC);
end;
begin
wnd_main := CreateWnd(640, 480);
DC := GetDC(wnd_main);
DoOpenGL;
while msg.message<>WM_QUIT do
begin
if(PeekMessage(msg, 0, 0, 0, PM_NOREMOVE)) then
begin
if(GetMessage(msg, 0, 0, 0))then
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end
else
Render();
end;
NoOpenGL;
end.
Пол дела сделано... почти 16 кб...
← →
grouzd[E]v © (2005-08-14 20:17) [447][446] Кефир87 © (14.08.05 19:49)
> Пол дела сделано... почти 16 кб...
Гм... имхо код еще "немного" вырастет =))
---
... we are walking on a thin line and you better avoid the risk ...
← →
XProger © (2005-08-14 20:33) [448]NewWonder, а без попыток "что-либо" сделать ты никогда не научишься это "что-либо" делать...
Antonn, "в размер не впишусь, канвас много тянет" а ты шутник... ;)
← →
Zak3D[@Tm] © (2005-08-14 21:08) [449]Кефир87
Это только по началу такой скачёк веса, далее он будет расти не так стремительно =).
← →
Darthman © (2005-08-14 21:37) [450]Lakmus: ничего общего с ПМ2. Делал похоже на сценарий WC3. Графику рисовал не сам, возможно, отсюда и впечатление такое.
← →
Кефир87 © (2005-08-15 00:04) [451]Каждый лишний килобайт - трагедия
← →
Antonn © (2005-08-15 08:29) [452]XProger © (14.08.05 20:33) [448]
Antonn, "в размер не впишусь, канвас много тянет" а ты шутник... ;)
Просто доставляет удовольствие чертыхаться с канвасом:)
И мне главное не победа, а участие(хотя второе/третье место очень даже не плохо:))))
← →
Sapersky (2005-08-15 11:12) [453]в размер не впишусь, канвас много тянет
Уж сколько раз твердили миру:
http://prdownloads.sourceforge.net/skinner/FastLib.zip?download
Гораздо функциональнее (фактически "карманный фотошоп") и даёт минимальный размер exe. Там в комплекте VCL-пример, но есть ещё WinAPI-примеры на DelphiGFX:
http://delphigfx.mastak.ru/samples/samp30.rar, samp32, samp33, samp71
Хотя, предупреждаю сразу, документации никакой нет. Глюки - есть. Общая устойчивость к ним - слабая (например, вылетает при загрузке файла, если этого файла нет). Так что чертыхания будет гарантированно больше, чем с TBitmap.
← →
Antonn © (2005-08-15 12:24) [454]Sapersky (15.08.05 11:12) [453]
а оно мне надо? :)
канвас - средство моего самовыражения:))
← →
Sphinx © (2005-08-15 12:45) [455]Самые "тяжелые" библиотеки на мой взгляд (размер примерный)
1) SysUtils (включает в себя Classes) = +75 кб
2) Classes = +45 кб
3) DirectInput = + 85 кб
Придется даже без TList обходится :)
← →
Antonn © (2005-08-15 12:52) [456]Sphinx © (15.08.05 12:45) [455]
Придется даже без TList обходится :)
я вот вместо него TMemoryStream надумал использовать:)
> 3) DirectInput = + 85 кб
вообще нету
← →
Кефир87 © (2005-08-15 13:06) [457]А нахрен все это надо? У меня только Windows, Messages, OpenGL а там в основном объявления функций и типов 8) Нафик ВЦЛ!
← →
Sphinx © (2005-08-15 13:07) [458]2 Antonn ©
Программирующим на VCL эти данные не помогут :) все эти модули (кроме DInput) уже включены как говорится...
А DI - это для меня важно, я им пользуюсь обычно...придется отказатсья :(
← →
Antonn © (2005-08-15 13:59) [459]Sphinx © (15.08.05 13:07) [458]
ну и ладно, не очень то и огорчился:)))
← →
XProger © (2005-08-16 00:09) [460]Sphinx, "Придется даже без TList обходится" или придётся узнать что такое списки...
← →
Sphinx © (2005-08-16 01:02) [461]2 XProger ©
спивок - массив нетипизированых указателей...не думай что ты самый умный ;)
Ты очень хороший программист, и не порти моё мнение о себе ;)PPointerList = ^TPointerList;
TPointerList = array [0..MaxListSize] of Pointer
TList = class(TObject)
private
FList: PPointerList;
...
Дело не в природе TList а в том, как он реализован, можно и самому переписать всё это - что не трудно, но тут уже готовое есть ;)
Кстати я ошибся там...
не в SisUtils включено Classes
а наоборот в Classes - SysUtils
← →
Sphinx © (2005-08-16 01:32) [462]блин...
и редактирования тут нету..
читать так:
"Список - массив...." и далее по тексту...
← →
XProger © (2005-08-16 03:46) [463]Sphinx, то что ты привёл списком назвать нельзя, т.к. это обычный массив указателей...
type
PListItem = ^TListItem;
TListItem = record
data : pointer;
Next : PListItem;
end;
var
items : PListItem;
items - список
← →
Sphinx © (2005-08-16 10:57) [464]2 XProger ©
То что я привел - это исходник класса TList от Борланда *посмеиваясь*
Извени...но в данном случае ты знаешь что ты не прав, но не хочешь это признать ;)
C:\Program Files\Borland\Delphi7\Source\Rtl\Common\Classes.pas{ Maximum TList size }
MaxListSize = Maxint div 16;
...
{ TList class }
PPointerList = ^TPointerList;
TPointerList = array[0..MaxListSize - 1] of Pointer;
TListSortCompare = function (Item1, Item2: Pointer): Integer;
TListNotification = (lnAdded, lnExtracted, lnDeleted);
// these operators are used in Assign and go beyond simply copying
// laCopy = dest becomes a copy of the source
// laAnd = intersection of the two lists
// laOr = union of the two lists
// laXor = only those not in both lists
// the last two operators can actually be thought of as binary operators but
// their implementation has been optimized over their binary equivalent.
// laSrcUnique = only those unique to source (same as laAnd followed by laXor)
// laDestUnique = only those unique to dest (same as laOr followed by laXor)
TListAssignOp = (laCopy, laAnd, laOr, laXor, laSrcUnique, laDestUnique);
TList = class(TObject)
private
FList: PPointerList;
FCount: Integer;
FCapacity: Integer;
protected
function Get(Index: Integer): Pointer;
procedure Grow; virtual;
procedure Put(Index: Integer; Item: Pointer);
procedure Notify(Ptr: Pointer; Action: TListNotification); virtual;
procedure SetCapacity(NewCapacity: Integer);
procedure SetCount(NewCount: Integer);
public
destructor Destroy; override;
function Add(Item: Pointer): Integer;
procedure Clear; virtual;
procedure Delete(Index: Integer);
class procedure Error(const Msg: string; Data: Integer); overload; virtual;
class procedure Error(Msg: PResStringRec; Data: Integer); overload;
procedure Exchange(Index1, Index2: Integer);
function Expand: TList;
function Extract(Item: Pointer): Pointer;
function First: Pointer;
function IndexOf(Item: Pointer): Integer;
procedure Insert(Index: Integer; Item: Pointer);
function Last: Pointer;
procedure Move(CurIndex, NewIndex: Integer);
function Remove(Item: Pointer): Integer;
procedure Pack;
procedure Sort(Compare: TListSortCompare);
procedure Assign(ListA: TList; AOperator: TListAssignOp = laCopy; ListB: TList = nil);
property Capacity: Integer read FCapacity write SetCapacity;
property Count: Integer read FCount write SetCount;
property Items[Index: Integer]: Pointer read Get write Put; default;
property List: PPointerList read FList;
end;
← →
Sapersky (2005-08-16 11:11) [465]Список и то, и другое. В [463] - связный, у Борланда - линейный (не уверен, что правильно их обозвал, но суть в том, что есть несколько разновидностей).
← →
Sphinx © (2005-08-16 11:37) [466]2 Sapersky
Я знаю что XProger привел связаный список...но он же сказал "Sphinx, то что ты привёл списком назвать нельзя, т.к. это обычный массив указателей..." ;)
← →
dRake © (2005-08-16 14:00) [467]У борланда вообще не список. А хз что :) В этом XProger прав.
Список это в общем случае совокупность элементов, причем у каждого элемента имеется указатель на предыдущий или следующий элемент (односвязный список) или на оба сразу (двусвязный список), односвязный список который задается указателем на первый элемент (стек) или на последний элемент (очередь). Короче господа учите мат часть :)
← →
Sphinx © (2005-08-16 14:30) [468]Ну раз пошла такая пьянка :)
И затронули тему матчасти...
Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения.
http://www.rsdn.ru/article/alg/list.xml#EHA
← →
A22 © (2005-08-16 14:52) [469]нормальный list в STL. не массив
← →
Zer0 © (2005-08-16 15:10) [470]давайте тогда уже начнем обсуждать особенности поведения мух-дроздофил в период разможения. вобщемто если есть желание потрепаться не по теме помойму надо сразу топать в соотвествующий раздел форума =)
← →
NewWonder © (2005-08-17 09:55) [471]>> NewWonder, а без попыток "что-либо" сделать ты никогда не
>> научишься это "что-либо" делать...
Полностью согласен. Поэтому уже начал писать гоночки к конкурсу ;) Конкурс и впрямь интересный :)
← →
DR0N © (2005-08-17 10:25) [472]2NewWonder так держать! Конкурс и в прямь очень интересный!
← →
Zer0 © (2005-08-18 22:29) [473]хорошо хоть лимит в 128к есть, не будет ODE и прочих левых приблуд.
← →
NewWonder © (2005-08-18 22:41) [474]
> Zer0 ©
Оно хорошо тем, что есть возможность потренироваться кодить в условиях минимальных объёмов.
← →
DR0N © (2005-08-19 00:11) [475]Сделал музыку которая генерируется на лету в миди.. всего 3 килобайта в ЕХЕ прирост и никаких FMOD =)... Теперь ищу хорушую нотную книгу что бы содрать оттуда композицию =0)
← →
Кефир87 © (2005-08-19 14:26) [476]Я не стал выяснять с чего ркчь пошла о списках... Но разубежите меня если я не прав: при использовании дин. массивов и стрингов добавляется 1кб к экзе. По этому лично я намериваюсь использовать двусвязные циркулярные списки 8)
← →
Darthman © (2005-08-19 21:32) [477]//я намериваюсь использовать двусвязные циркулярные списки
Мощно задвинул!
← →
NewWonder © (2005-08-19 22:48) [478]А я вот пробую на API сделать окно. Медленно но верно подхожу к написанию самого главного. exe уменьшился до 17 Кб
← →
Кефир87 © (2005-08-19 23:19) [479]
> NewWonder © (19.08.05 22:48) [478]
> А я вот пробую на API сделать окно.
А что сложного?function CreateWnd(w,h:Integer):HWND;
var
wc:TWndClass;
begin
with wc do
begin
style := 0;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := 0;
hCursor := 0;
hbrBackground := COLOR_BTNFACE + 1;
lpszMenuName := Class_name;
lpszClassName := Class_name;
end;
RegisterClass(wc);
Result := CreateWindow(Class_name,
WND_TITLE,
WS_OVERLAPPEDWINDOW or WS_CLIPSIBLINGS or WS_CLIPCHILDREN,
(GetSystemMetrics(SM_CXSCREEN)-w) div 2,
(GetSystemMetrics(SM_CYSCREEN)-h) div 2,
w,
h,
0,
0,
0,
nil);
ShowCursor(False);
if Result<>0 then
begin
ShowWindow(Result, SW_NORMAL);
UpdateWindow(Result);
end;
end;function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
Result := DefWindowProc(hwnd, msg, wparam, lparam);
case Msg of
WM_DESTROY:begin
PostQuitMessage(0);
end;
WM_KEYDOWN:;
WM_KEYUP :;
WM_TIMER :;
end;
end;
Вот. А главный цикл я так делаю 8)while msg.message<>WM_QUIT do
begin
if(PeekMessage(msg, 0, 0, 0, PM_NOREMOVE)) then
begin
if(GetMessage(msg, 0, 0, 0))then
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
end;
8) Вот какой я крутой кодер 8)
← →
XProger © (2005-08-20 00:06) [480]
if(PeekMessage(msg, 0, 0, 0, PM_NOREMOVE)) then
begin
if(GetMessage(msg, 0, 0, 0))then
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end;
СУПЕР! Но всё же почему не:
if PeekMessage(msg, 0, 0, 0, PM_REMOVE) then
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
Страницы: 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 вся ветка
Форум: "Игры";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];
Память: 1.59 MB
Время: 0.22 c