Welcome.
i discovered this community when i decided to start my first roguelike project and immediately registered in order to share my ideas with you experienced roguelike programmers...
There are much more seasoned veteran rogue developers at rec.games.roguelike.development newsgroup if you wish to jump through the hoops to access that.
I know that a large part of you think that many aspects of roguelikes are not to be designed in advance
Wow! This is news to me. Where you get that from? I know that in times when Thomas Biskup himself still walked the rgrd threads some people really were like that but it was years ago. Seems you have not had a look at Roguelike Dev FAQ.
This section is very old but still reflects the it is better to make some design before standpoint.
// entities represents anything in the dungeon
//
class Entity
{
Char glyph;
Color Background;
Color Foreground;
int X, Y;
}
Do you need glyph and colors for every single entity or just for a class of entities? I have appearance data stored in static table. Color-shifting is solved by assigning special value to foreground. Drawing routine then checks for this special constant and randomly selects displayed hue. Added bonus is multicolored monsters glitter every screen refresh and you need not to worry when to change their appearance.
// hero and monsters are actors
Why not items too? Unless you wish to close yourself way to intelligent artifacts or self-acting equipment I would include those too.
class Dungeon
{
grid of tiles (empty, wall, corridor, room, door etc)
list of entities
}
I am slightly uneasy about stuffing list of Entities in the Dungeon. However to really comment on it I would need to know how you plan to solve going to another level.
class Entity
{
// This method has the following meaning:
// if the hero touches this entity, what happens?
// for example an ItemEntity should return the PickUpItemAction
// I'd really appreciate suggestion for the name of this method...
// I know that ProvidedInteraction is not very clear...
//
Action ProvidedInteraction(Actor actor);
}
"Default Action", "Default Behavior", "Auto Interaction". I prefer to have that logic in Hero class though. Decentralized organization makes this harder for me to maintain. When I dislike something in stumble, autopickup or bump behavior I do not need to change it in several places but in merely one.