PasteRack.org | ||
Paste # 79118 | ||
2024-04-17 11:09:27 | ||
Fork as a new paste. | ||
Paste viewed 269 times. | ||
Tweet | ||
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/79118/79118code.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/79118/79118code.scrbl" .../private/map.rkt:40:19: loop .../racket/cmdline.rkt:191:51 body of "/home/pasterack/racket88/share/pkgs/scribble-lib/scribble/run.rkt"