blob: 44c7febb9062dab8723a8738d5a1206087de2417 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
(ns tic-tac-toe.core
(:require [reagent.core :as reagent :refer [atom]]
[tic-tac-toe.logic :as logic]))
(defonce app-state
(atom {:board (logic/new-board logic/board-size)}))
(defn naught [i j]
[:g
[:rect {:id "back"
:x (+ 0.05 i)
:y (+ 0.05 j)}]
[:circle {:id "naught"
:cx (+ 0.5 i)
:cy (+ 0.5 j)}]])
(defn cross [i j]
[:g
[:rect {:id "back"
:x (+ 0.05 i)
:y (+ 0.05 j)}]
[:g {:id "cross"}
(let [offset 0.25]
[:line {:x1 (+ i offset) :y1 (+ j offset) :x2 (+ i (- 1 offset)) :y2 (+ j (- 1 offset))}])
(let [offset 0.25]
[:line {:x1 (+ i offset) :y1 (+ j (- 1 offset)) :x2 (+ i (- 1 offset)) :y2 (+ j offset)}])]])
(defn blank [i j]
[:rect {:id "blank"
:x (+ 0.05 i)
:y (+ 0.05 j)
:on-click #(swap! app-state assoc-in [:board j i] 1)}])
(defn tictactoe []
[:div
[:h1 "Welcome to Tic Tac Toe"]
(into
[:svg {:view-box (str "0 0 " logic/board-size " " logic/board-size)
:width 500 :height 500}]
(for [i (range logic/board-size)
j (range logic/board-size)]
(case (get-in @app-state [:board j i])
0 [blank i j]
1 [cross i j]
2 [naught i j])))])
(enable-console-print!)
(reagent/render-component [tictactoe]
(. js/document (getElementById "app")))
|