Smart decisions: an architectural design game
design patterns : elements of reusable object - oriented software .