On this page:
<drawing-the-cat>
1.18.6 Drawing the Cat

This code is three large, similar constants, bundled up into the cat function. The thinking-cat is the one that is visible when the game is being played. It differs from the others in that it does not have a mouth. The mad-cat is the one that you see when the cat loses. It differs from the others in that its pinks turn pink. Finally, the happy-cat shows up when the cat wins and it is just like the thinking-cat except it has a smile.

  (define/contract (cat mode)
    (-> (or/c 'mad 'happy 'thinking) image?)
    (define face-width 36)
    (define face-height 22)
  
    (define face-color
      (cond
        [(eq? mode 'mad) 'pink]
        [else 'lightgray]))
  
    (define left-ear
      (regular-polygon 3 8 'solid 'black (/ pi -3)))
    (define right-ear
      (regular-polygon 3 8 'solid 'black 0))
    (define ear-x-offset 14)
    (define ear-y-offset 9)
  
    (define eye (overlay (ellipse 12 8 'solid 'black)
                         (ellipse 6 4 'solid 'limegreen)))
    (define eye-x-offset 8)
    (define eye-y-offset 3)
  
    (define nose
      (regular-polygon 3 5 'solid 'black (/ pi 2)))
  
    (define mouth-happy
      (overlay (ellipse 8 8 'solid face-color)
               (ellipse 8 8 'outline 'black)
               (move-pinhole
                (rectangle 10 5 'solid face-color)
                0
                4)))
    (define mouth-no-expression
      (overlay (ellipse 8 8 'solid face-color)
               (ellipse 8 8 'outline face-color)
               (rectangle 10 5 'solid face-color)))
  
    (define mouth
      (cond
        [(eq? mode 'happy) mouth-happy]
        [else mouth-no-expression]))
    (define mouth-x-offset 4)
    (define mouth-y-offset -5)
  
    (define (whiskers img)
      (add-line
       (add-line
        (add-line
         (add-line
          (add-line
           (add-line
            img
            6 4 30 12 'black)
           6 4 30 4 'black)
          6 4 30 -4 'black)
         -6 4 -30 12 'black)
        -6 4 -30 4 'black)
       -6 4 -30 -4 'black))
    (whiskers
     (overlay
      (move-pinhole left-ear (- ear-x-offset) ear-y-offset)
      (move-pinhole right-ear (- ear-x-offset 1) ear-y-offset)
      (ellipse (+ face-width 4) (+ face-height 4) 'solid 'black)
      (ellipse face-width face-height 'solid face-color)
      (move-pinhole mouth (- mouth-x-offset) mouth-y-offset)
      (move-pinhole mouth mouth-x-offset mouth-y-offset)
      (move-pinhole eye (- eye-x-offset) eye-y-offset)
      (move-pinhole eye eye-x-offset eye-y-offset)
      (move-pinhole nose -1 -4))))
  
  (define thinking-cat (cat 'thinking))
  (define happy-cat (cat 'happy))
  (define mad-cat (cat 'mad))