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)) |


















