;; Quiz 2 sample solution
;;
;; this code requires the draw teachpack.
;; 
;; draw-square: posn number color -> true
;;
;; (draw-square position width color)
;;   draws a square with the upper left corner determined by
;;    the posn structure position using the width and color.
;; 
;;  sample usage: (draw-square (make-posn 100 100) 50 'Red)
;;
(define (draw-square position width color)
  (draw-solid-rect position width width color))

;; =========================================================
;; draw-2squares: posn number color color -> true
;;
;; (draw-2squares position width color1 color2)
;;   draw two squares next to each other horizontally
;;   the first square is drawn at posn (upper left corner of
;;   the first sqare matches the posn. The first square is
;;   drawn using color1.
;;   The function draws another square immediately to the right
;;     of the first square, but using color2
;;
;;  sample usage: (draw-2squares (make-posn 100 100) 50 'Red 'Black)  
(define (draw-2squares position width color1 color2)
  (and
   ;; draw first square at postion
   (draw-square position width color1)
   ;; draw second sqaure at postition shifted width along x axis
   (draw-square (make-posn 
				 (+ width (posn-x position))
				 (posn-y position)) 
                width color2)))


;; =========================================================
;; draw-2x2: posn number color color -> true
;;
;; (draw-2x2 position width color1 color2) 
;;   draws 4 squares arranged in a square. The upper left square
;;   drawn has it's top left corner at position and color is color1.
;;   There is also square drawn immediately to the right of the first
;;   sqaure using color 2. Two more squares are drawn, below these two,
;;   the colors are reversed to create something like a 2x2 checkerboard.
;;
;;  sample usage: (draw-2x2 (make-posn 100 100) 50 'Red 'Black)  


(define (draw-2x2 position width color1 color2)
  (and
   ;; draw top  2 squares 
   (draw-2squares position width color1 color2)
   ;; draw bottom 2 squares
   (draw-2squares (make-posn
                   (posn-x position)
                   (+ width (posn-y position)))
                  width
                  color2
                  color1)))

;; =========================================================
;; draw-4x4: posn number color color -> true
;;
;; (draw-4x4 position width color1 color2) 
;;   draws 16 squares arranged in a square. The upper left square
;;   drawn has it's top left corner at position and color is color1.
;;   The remaining 15 squares complete a 4x4 checkerboard that extends
;;   down and to the right of the first square.
;;
;;  sample usage: (draw-4x4 (make-posn 100 100) 50 'Red 'Black)  

(define (draw-4x4 position width color1 color2)
  (and
   (draw-2x2 position width color1 color2)
   (draw-2x2 (make-posn
              (+ width width (posn-x position))
              (posn-y position)) width color1 color2)
   (draw-2x2 (make-posn
              (posn-x position)
              (+ width width (posn-y position))) width color1 color2)
   (draw-2x2 (make-posn
              (+ width width (posn-x position))
              (+ width width (posn-y position))) width color1 color2)
   ))


;; =========================================================
;; draw-8x8: posn number color color -> true
;;
;; (draw-8x8 position width color1 color2) 
;;   draws 64 squares arranged in a square. The upper left square
;;   drawn has it's top left corner at position and color is color1.
;;   The remaining 63 squares complete a 8x8 checkerboard that extends
;;   down and to the right of the first square.
;;
;;  sample usage: (draw-8x8 (make-posn 100 100) 50 'Red 'Black)  

(define (draw-8x8 position width color1 color2)
  (and
   (draw-4x4 position width color1 color2)
   (draw-4x4 (make-posn
              (+ (* width 4) (posn-x position))
              (posn-y position)) width color1 color2)
   (draw-4x4 (make-posn
              (posn-x position)
              (+ (* width 4) (posn-y position))) width color1 color2)
   (draw-4x4 (make-posn
              (+ (* width 4) (posn-x position))
              (+ (* width 4) (posn-y position))) width color1 color2)
   ))

;; test code for draw-8x8 (which uses the other functions to draw
;; a checkerboard.
;(start 600 600)
;(draw-8x8 (make-posn 100 100) 50 'Red 'Black)