how to load an image to a grid using pygame, instead of just using a fill color?

iCodeLikeImDrunk picture iCodeLikeImDrunk · Sep 30, 2012 · Viewed 7.6k times · Source

I am trying to create a "map of a city" using pygame. I want to be able to put images of buildings in specific grid coords rather than just filling them in with a color.

This is how I am creating this map grid:

def clear():
    for r in range(rows):
        for c in range(rows):
            if r%3 == 1 and c%3 == 1:
                color = brown;
                grid[r][c] = 1;
            else:
                color = white;
                grid[r][c] = 0; 
            pygame.draw.rect(screen, color, [(margin+width)*c+margin, (margin+height)*r+margin, width, height])         
    pygame.display.flip();

Now how do I put images of buildings in those brown colored grids at those specific locations? I've tried some of the samples online but can't seem to get them to work. Any help is appreciated.

If anyone have a good source for free sprites that I can use for pygame, please let me know. Thanks!

this is the grid map i created

Answer

ninMonkey picture ninMonkey · Sep 30, 2012

Here's an example I wrote. It uses a numpy to store tile data. The code plus image is downloadable at: http://code.google.com/p/ninmonkey/source/.../maptiles (If that fails, use this url: https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/ninmonkey/source-archive.zip )

  • Press S to toggle mouse scrolling.
  • Map.tiles is a 2d numpy.array that stores tile's id

tileset demo

If you want to add units/sprites that are on top of the tilemap: (Your buildings might count as this)

  • store location using world coordinates
  • draw them using a world2screen coordinate function.

The function will add the map offset to their world coordinates. So if the map offset is (-100,0) and your unit's world coordinate is (0,0), you render at (-100,0) placing them a the top left part of the map, as expected, even though you are scrolled.