---
id: map-row
name: Map.row
category: map
kind: namespace-method
tokens: Map.row
sig: Map.row(y, cells)
tip: Fill one row of the tilemap from a string of tile characters.
order: 1
ns: Map
member: row
---
Fills a single map row from a string, one character per cell — an easy, readable way to author a level directly in source. Character y selects the row (from the top, starting at 0), and each character of cells becomes the tile at that column. Call Map.size first, then one Map.row per row; the string length should match the map width. By convention '#' is a wall and '.' is open floor, but you may use any characters as your own tile codes and interpret them however you like with Map.tile.
Parameters:
- `y` — the row index to fill, from the top (`0`-based)
- `cells` — a string of tile characters, one per column
```ludic
program HandDrawnLevel {
const GRID_WIDTH: int = 10
const GRID_HEIGHT: int = 5
const TILE_SIZE: int = 16
handler BuildLevel phase Start {
Map.size(width: GRID_WIDTH, height: GRID_HEIGHT)
Map.row(y: 0, cells: "##########")
Map.row(y: 1, cells: "#........#")
Map.row(y: 2, cells: "#..####..#")
Map.row(y: 3, cells: "#........#")
Map.row(y: 4, cells: "##########")
}
handler DrawWorld phase Render {
Screen.clear(Color.MidnightBlue)
for row in 0 .. GRID_HEIGHT {
for column in 0 .. GRID_WIDTH {
if Map.tile(x: column, y: row) == '#' {
Screen.fill_rectangle(
x: column * TILE_SIZE,
y: row * TILE_SIZE,
width: TILE_SIZE,
height: TILE_SIZE,
color: Color.White)
}
}
}
Screen.show()
}
}
```