I'm not sure what you have sofar, but here's a short overview of how you can use TDirectDrawsurface in your game.

First the surfaces for your tiles.

const
MAXTILES = 9;

var
Tiles : array[0..MAXTILES] of TDirectDrawSurface;

for imgCounter := 0 to MAXTILES do
begin
Tiles[imgCounter] := TDirectDrawsurface.Create(DXDraw1.ddraw);
Tiles[imgCounter].LoadFromGraphic(Form1.DXImagelist1.items.items[imgCounter].picture.graphic);
end;
The images 0 through 9 correspond with the images in your dximagelist.

Then you have your tilemap. I assume you'll use two maps one for the tiles and one for the objects. I'll only show you the tiles version, as the objectversion is nearly the same.

const
MAPWIDTH = 250;
MAPHEIGHT = 250;

var
TileInfo : array [0..MAPWIDTH, 0..MAPHEIGHT ] of byte;

You probably have you own load version, here's an very very basic one
for xpos:=0 to MAPWIDTH do
for ypos:=0 to MAPHEIGHT do
begin
TileInfo[xpos,ypos] := random(10);
end;
end;

Then you can draw these tiles using:
for xpos := 0 to (form1.Width) div 32 do
for ypos := 0 to form1.Height div 32 do
dxdraw1.surface.draw((xpos*32),(ypos*32),tiles[1].clientrect,
tiles[TileInfo[xpos, ypos],false);

You can use objects in a similar manner.

I hope some of this made any sense, I haven't cheched the code, so you may a warning or two (hope not)

Otherwise you can also read tutorials 3 and 4 on my website. I have explained things (and more) much better.