awacke1 commited on
Commit
1a61bb6
Β·
verified Β·
1 Parent(s): 6d823a6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +145 -0
app.py ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import json
3
+
4
+ # Initialize session state if not already done
5
+ if 'board' not in st.session_state:
6
+ st.session_state.board = [
7
+ ['β™œ', 'β™ž', '♝', 'β™›', 'β™š', '♝', 'β™ž', 'β™œ'],
8
+ ['β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ'],
9
+ [None] * 8,
10
+ [None] * 8,
11
+ [None] * 8,
12
+ [None] * 8,
13
+ ['β™™', 'β™™', 'β™™', 'β™™', 'β™™', 'β™™', 'β™™', 'β™™'],
14
+ ['β™–', 'β™˜', 'β™—', 'β™•', 'β™”', 'β™—', 'β™˜', 'β™–']
15
+ ]
16
+ if 'current_player' not in st.session_state:
17
+ st.session_state.current_player = 'white'
18
+ if 'selected_piece' not in st.session_state:
19
+ st.session_state.selected_piece = None
20
+
21
+ # Create the HTML/JavaScript for the chess board
22
+ chess_board_html = f"""
23
+ <html>
24
+ <head>
25
+ <style>
26
+ .chess-board {{
27
+ width: 100%;
28
+ max-width: 1024px;
29
+ height: 1024px;
30
+ display: grid;
31
+ grid-template-columns: repeat(8, 1fr);
32
+ gap: 2px;
33
+ padding: 10px;
34
+ background: #2f2f2f;
35
+ }}
36
+ .square {{
37
+ aspect-ratio: 1;
38
+ display: flex;
39
+ align-items: center;
40
+ justify-content: center;
41
+ font-size: 3.5em;
42
+ cursor: pointer;
43
+ transition: background-color 0.2s;
44
+ }}
45
+ .square:hover {{
46
+ opacity: 0.8;
47
+ }}
48
+ .white {{
49
+ background: #e8e8e8;
50
+ }}
51
+ .black {{
52
+ background: #b0b0b0;
53
+ }}
54
+ .selected {{
55
+ background: #ffd700 !important;
56
+ }}
57
+ .game-info {{
58
+ font-size: 1.5em;
59
+ margin: 20px;
60
+ text-align: center;
61
+ }}
62
+ </style>
63
+ </head>
64
+ <body>
65
+ <div class="game-info">
66
+ Current Player: {'White' if st.session_state.current_player == 'white' else 'Black'}
67
+ </div>
68
+ <div class="chess-board" id="board">
69
+ """
70
+
71
+ # Generate the squares with pieces
72
+ for row in range(8):
73
+ for col in range(8):
74
+ piece = st.session_state.board[row][col] or ''
75
+ is_selected = (st.session_state.selected_piece and
76
+ st.session_state.selected_piece['row'] == row and
77
+ st.session_state.selected_piece['col'] == col)
78
+ square_color = 'white' if (row + col) % 2 == 0 else 'black'
79
+ selected_class = ' selected' if is_selected else ''
80
+ chess_board_html += f"""
81
+ <div class="square {square_color}{selected_class}"
82
+ onclick="handleClick({row}, {col})"
83
+ data-row="{row}"
84
+ data-col="{col}">
85
+ {piece}
86
+ </div>
87
+ """
88
+
89
+ # Add JavaScript for handling moves
90
+ chess_board_html += """
91
+ </div>
92
+ <script>
93
+ function handleClick(row, col) {
94
+ const data = {
95
+ row: row,
96
+ col: col
97
+ };
98
+ window.parent.postMessage({
99
+ type: 'streamlit:message',
100
+ data: data
101
+ }, '*');
102
+ }
103
+ </script>
104
+ </body>
105
+ </html>
106
+ """
107
+
108
+ # Display the chess board
109
+ st.components.v1.html(chess_board_html, height=1200)
110
+
111
+ # Handle moves through Streamlit's session state
112
+ if st.session_state.get('clicked_square'):
113
+ clicked = st.session_state.clicked_square
114
+ row, col = clicked['row'], clicked['col']
115
+
116
+ if st.session_state.selected_piece:
117
+ # Move the piece
118
+ selected = st.session_state.selected_piece
119
+ st.session_state.board[row][col] = st.session_state.board[selected['row']][selected['col']]
120
+ st.session_state.board[selected['row']][selected['col']] = None
121
+ st.session_state.selected_piece = None
122
+ st.session_state.current_player = 'black' if st.session_state.current_player == 'white' else 'white'
123
+ elif st.session_state.board[row][col]:
124
+ # Select the piece
125
+ st.session_state.selected_piece = {'row': row, 'col': col}
126
+
127
+ # Clear the clicked square
128
+ st.session_state.clicked_square = None
129
+ st.rerun()
130
+
131
+ # Add a reset button
132
+ if st.button('Reset Game'):
133
+ st.session_state.board = [
134
+ ['β™œ', 'β™ž', '♝', 'β™›', 'β™š', '♝', 'β™ž', 'β™œ'],
135
+ ['β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ', 'β™Ÿ'],
136
+ [None] * 8,
137
+ [None] * 8,
138
+ [None] * 8,
139
+ [None] * 8,
140
+ ['β™™', 'β™™', 'β™™', 'β™™', 'β™™', 'β™™', 'β™™', 'β™™'],
141
+ ['β™–', 'β™˜', 'β™—', 'β™•', 'β™”', 'β™—', 'β™˜', 'β™–']
142
+ ]
143
+ st.session_state.current_player = 'white'
144
+ st.session_state.selected_piece = None
145
+ st.rerun()