Crème - Columbia CS

Crème
Anthony Chan
Cheryl Lau
James Leslie
Joshua Mackler
What is Crème?
Cards Really Excite ME!
 Language to specify card games
 Automatic GUI generation

Why create Crème?

When using less domain specific
languages (Java, C++)
 Writing
card games takes time
 GUI tedious
 User interaction troublesome
Most card games share common ground,
Crème is the Solution
 Everyone loves card games

Why use Crème

Quick development of card games with
focus on
 Cards
 Layout
 Rules

Compact, Concise, Variable, Intuitive
A look at Crème

Defining Cards
Standard Deck
Deck.Ranksys.1=(King>Queen>Jack>Ten>Nine>
Eight>Seven>Six>Five>Four>Three>Two>Ace);
Deck.Ranksys.2=(SPADES>HEARTS>CLUBS>DIAMONDS);
Deck.Ranksys.3=(BLACK.RED);
“
> “ and “ . “
Colorizing feature – last dimension
A look at Crème

Defining Layout
Creating a Grid and dealing cards
Grid=[7,2];
Deck.deal ~ Grid[0-2,1](0,1);
Deck.deal ~ Grid[0-6,0-1](2,0);
Deck.deal ~ Grid[0,0](0,*);
Grid[x,y](visible,
non visible)
A look at Crème

Defining Rules
 Descending cards
Grid[0-6,1].rules ~ place(-1,*,*);

Conditionals
Grid[0-6,1].rules ~ if isEmpty then
{ place[Three,*,*]; else
{ place(+1,*,*); }
}

Take, Place, Action
A deeper look
at Crème

Lexing, Parsing, Tree
Walking
A deeper look at Crème

Deck, Grid, Rules, GUI
Crème in Action
Testing Crème
Individual Module testing
 Incremental Integration testing
 Used console print statements instead of
intermediate file format
 Tested each program for correct behavior

Lessons Learned from Crème
Dedicate a lot of time into choosing a cool
name
 Get an early start and communicate
regularly
 Divide and Conquer
 Make deadlines and enforce them
 Don’t go to Vegas the weekend before PLT
is due
