PasteRack.org
Paste # 27715
2024-04-17 11:09:41

Fork as a new paste.

Paste viewed 269 times.


Embed:

#lang racket
(require picturing-programs)
(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)(define WIDTH 8)(define HEIGHT 8)(define EMPTY 0)(define WHITE 1)(define BLACK 2)(define WHITE_KING 3)(define BLACK_KING 4)(define (initial-board)  (for/vector ([i WIDTH])    (for/list ([j HEIGHT])      (cond [(or (= i 0) (= i 2)) (if (= j 0) BLACK EMPTY)]            [(= i 1) (if (= j (if (odd? i) 1 0)) BLACK EMPTY)]            [(or (= i 5) (= i 7)) (if (= j 7) WHITE EMPTY)]            [(= i 6) (if (= j (if (odd? i) 0 1)) WHITE EMPTY)]            [else EMPTY]))))(define (display-board board)  (for ([i HEIGHT])    (begin      (for ([j WIDTH])        (display (case (vector-ref (vector-ref board i) j)                   [(EMPTY) " . "]                   [(WHITE) " W "]                   [(BLACK) " B "]                   [(WHITE_KING) " WK"]                   [(BLACK_KING) " BK"])))      (newline))))(define (move-piece board from to)  (vector-set! (vector-ref board (car to)) (cdr to) (vector-ref (vector-ref board (car from)) (cdr from)))  (vector-set! (vector-ref board (car from)) (cdr from) EMPTY)  board)(define (is-legal-move? board from to)  (let ([piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece EMPTY) #f]          [(or (= piece WHITE) (= piece BLACK)) (and (valid-normal-move? board from to) (no-jump? board from to))]          [(or (= piece WHITE_KING) (= piece BLACK_KING)) (valid-king-move? board from to)])))(define (valid-normal-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))]        [piece (vector-ref (vector-ref board (car from)) (cdr from))])    (cond [(= piece WHITE) (= dx 1)]          [(= piece BLACK) (= dx -1)])))(define (no-jump? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (eq? (vector-ref (vector-ref board (+ (car from) dx) (+ (cdr from) dy))) EMPTY)))(define (valid-king-move? board from to)  (let ([dx (- (car to) (car from))]        [dy (- (cdr to) (cdr from))])    (and (>= (abs dx) 1) (>= (abs dy) 1))))(define (main)  (define board (initial-board))  (display-board board)  ; Game loop here  )(main)

=>

#<syntax:/home/pasterack/pasterack/tmp/27715/27715code.scrbl:5:0 "#lang racket">:3:1968: read-syntax: expected a `)` to close `(`
  context...:
   /home/pasterack/racket88/collects/syntax/module-reader.rkt:214:17: body
   /home/pasterack/racket88/collects/syntax/module-reader.rkt:211:2: wrap-internal
   /home/pasterack/racket88/collects/racket/../syntax/module-reader.rkt:76:9: wrap-internal/wrapper
   /home/pasterack/racket88/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:138:19: loop
   /home/pasterack/racket88/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:112:0: get-tokens
   /home/pasterack/racket88/share/pkgs/scribble-lib/scribble/private/manual-code.rkt:56:0: typeset-code
   body of "/home/pasterack/pasterack/tmp/27715/27715code.scrbl"
   .../private/map.rkt:40:19: loop
   .../racket/cmdline.rkt:191:51
   body of "/home/pasterack/racket88/share/pkgs/scribble-lib/scribble/run.rkt"