Contents in Detail xv
Implementing Dice of Doom, Version 1 ................................................................... 306
Defining Some Global Variables ............................................................... 306
Representing the Game Board .................................................................. 307
Decoupling Dice of Doom’s Rules from the Rest of the Game ........................ 309
Generating a Game Tree ......................................................................... 311
Calculating Passing Moves ....................................................................... 312
Calculating Attacking Moves .................................................................... 313
Finding the Neighbors ............................................................................. 314
Attacking ............................................................................................... 315
Reinforcements ........................................................................................ 316
Trying Out Our New game-tree Function .................................................... 317
Playing Dice of Doom Against Another Human ........................................... 318
Creating an Intelligent Computer Opponent ............................................................. 321
The Minimax Algorithm ............................................................................ 323
Turning Minimax into Actual Code ............................................................ 323
Creating a Game Loop with an AI Player ................................................... 324
Playing Our First Human vs. Computer Game ............................................. 325
Making Dice of Doom Faster ................................................................................. 326
Closures ................................................................................................. 326
Memoization .......................................................................................... 328
Tail Call Optimization .............................................................................. 331
A Sample Game on the 3-by-3 Board ........................................................ 334
What You’ve Learned ........................................................................................... 336
16
THE MAGIC OF LISP MACROS 339
A Simple Lisp Macro ............................................................................................ 340
Macro Expansion .................................................................................... 341
How Macros Are Transformed .................................................................. 342
Using the Simple Macro ........................................................................... 345
More Complex Macros ......................................................................................... 345
A Macro for Splitting Lists ......................................................................... 346
Avoiding Repeated Execution in Macros .................................................... 347
Avoiding Variable Capture ....................................................................... 348
A Recursion Macro .................................................................................. 350
Macros: Dangers and Alternatives .......................................................................... 352
What You’ve Learned ........................................................................................... 353
17
DOMAIN-SPECIFIC LANGUAGES 355
What Is a Domain? .............................................................................................. 355
Writing SVG Files ................................................................................................ 356
Creating XML and HTML with the tag Macro .............................................. 357
Creating SVG-Specific Macros and Functions ............................................. 361
Building a More Complicated SVG Example .............................................. 362
Creating Custom Game Commands for Wizard’s Adventure Game ............................ 365
Creating New Game Commands by Hand ................................................. 366
Let’s Try the Completed Wizard’s Adventure Game! .................................... 371
What You’ve Learned ........................................................................................... 373