1lint commited on
Commit
b35651f
·
0 Parent(s):

init commit

Browse files
Files changed (4) hide show
  1. .gitattributes +34 -0
  2. .gitignore +1 -0
  3. README.md +13 -0
  4. app.py +65 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ test*
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Multitac
3
+ emoji: 💻
4
+ colorFrom: indigo
5
+ colorTo: green
6
+ sdk: gradio
7
+ sdk_version: 3.29.0
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ Multiple people can connect from different browsers to a shared game state of tic-tac-toe
13
+ Let's play a round!! Your move
app.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+
4
+ ENFORCE_RULES = False
5
+ MAX_EVENTS = 10
6
+
7
+ board_state = np.full((3, 3), "")
8
+ turn_state = ["X", 0]
9
+ event_log = []
10
+
11
+ def place(evt: gr.SelectData, gr_request: gr.Request):
12
+ if evt.value:
13
+ return board_state, "\n".join(event_log)
14
+
15
+ client_id = hash(gr_request.client.host[0])
16
+ if ENFORCE_RULES and client_id == turn_state[1]:
17
+ return board_state, update_events("may not move twice in a row")
18
+
19
+ turn_state[1] = client_id
20
+ row, column = evt.index
21
+ board_state[row, column] = turn_state[0]
22
+
23
+ if (board_state[row,:] == turn_state[0]).all() or (board_state[:,column] == turn_state[0]).all():
24
+ return board_state, update_events("has won!!!!")
25
+
26
+
27
+ turn_state[0] = "O" if turn_state[0] == "X" else "X"
28
+ return board_state, update_events("made the last move")
29
+
30
+ def reset(gr_request: gr.Request):
31
+ board_state.fill("")
32
+
33
+ turn_state[0] = "X"
34
+ turn_state[1] = hash(gr_request.client.host[0])
35
+
36
+ return board_state, update_events("has reset the board state")
37
+
38
+
39
+ def update_events(message=None):
40
+ if message:
41
+ event_log.append(f"player {turn_state[1] % 10000} {message}, {turn_state[0]} moves next")
42
+ if len(event_log) > MAX_EVENTS:
43
+ event_log.pop(0)
44
+ return "\n".join(event_log)
45
+
46
+ def refresh_display():
47
+ return board_state, "\n".join(event_log)
48
+
49
+
50
+ with gr.Blocks(analytics_enabled=False) as demo:
51
+ events = gr.Textbox(interactive=False, label="Turn")
52
+ board = gr.Dataframe(interactive=False, type="array")
53
+
54
+ board.select(place, [], [board, events])
55
+
56
+ reset_button = gr.Button(value="Reset Board")
57
+ reset_button.click(reset, [], [board, events])
58
+
59
+ demo.load(refresh_display, [], [board, events])
60
+
61
+ # this causes gradio frontend to freeze with orange borders on my machine
62
+ #demo.load(refresh_display, [], [board, events], every=10)
63
+
64
+ demo.queue()
65
+ demo.launch()