Skip to content

Commit 3e6373f

Browse files
committed
draft of tictactoe versioning
1 parent c37fd80 commit 3e6373f

File tree

2 files changed

+75
-55
lines changed

2 files changed

+75
-55
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,83 @@
1-
import sys
2-
import socket
31
import tkinter
4-
import threading
52
from math import floor
3+
import socket # VER: recv
4+
import threading # VER: recv
5+
import sys # VER: commandline
66

77
class TicTacToe():
88
def __init__(self, grid_size=100, width=5, height=4, addr_to='127.0.0.1'):
99
self.grid_size = grid_size
1010
self.width = width
1111
self.height = height
12-
13-
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
14-
try:
15-
self.sock.bind(('0.0.0.0', 5005))
16-
except OSError as ex:
17-
print('cant bind socket - is another client is already running on this port?')
1812
self.addr_to = (addr_to, 5005)
1913

2014
self.root = tkinter.Tk()
2115
self.root.resizable(False, False)
22-
self.root.bind('<ButtonPress>', self.mouse_click)
2316
self.canvas = tkinter.Canvas(self.root, width=grid_size*width, height=grid_size*height)
2417
self.canvas.pack()
25-
26-
thread = threading.Thread(target=self.recv)
27-
thread.daemon=True
28-
thread.start()
29-
30-
self.grid = ['' for i in range(self.width*self.height)]
31-
self.draw_grid()
32-
33-
self.fill = 'O'
18+
# VER: recv
19+
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # VER: recv
20+
#self.sock.bind(('0.0.0.0', 5005)) # VER: recv NOT 2players
21+
try: # VER: 2players
22+
self.sock.bind(('0.0.0.0', 5005)) # VER: 2players
23+
except OSError as ex: # VER: 2players
24+
print('cant bind socket - is another client is already running on this port?') # VER: 2players
25+
# VER: recv
26+
thread = threading.Thread(target=self.recv) # VER: recv
27+
thread.daemon=True # VER: recv
28+
thread.start() # VER: recv
29+
# VER: mouse
30+
self.root.bind('<ButtonPress>', self.mouse_click) # VER: mouse
31+
# VER: mouse
32+
#self.fill = 'black' # VER: mouse NOT 2players
33+
self.fill = 'O' # VER: 2players
34+
# VER: draw_grid
35+
self.grid = ['' for i in range(self.width*self.height)] # VER: local_state
36+
self.draw_grid() # VER: draw_grid
3437

3538
self.root.mainloop()
36-
37-
def mouse_click(self, event):
38-
x, y = floor(event.x/self.grid_size), floor(event.y/self.grid_size)
39-
if (not any(self.grid)):
40-
self.fill = 'X'
41-
self.grid[x+y*self.width] = self.fill
42-
#self.sock.sendto(','.join(map(str,(x,y,self.fill))).encode('utf8'), self.addr_to)
43-
self.sock.sendto(','.join(self.grid).encode('utf8'), self.addr_to)
44-
self.draw_grid()
45-
46-
def draw_grid(self):
47-
self.canvas.delete(tkinter.ALL)
48-
s = self.grid_size
49-
for y in range(self.height):
50-
for x in range(self.width):
51-
fill = self.grid[x+y*self.width]
52-
if fill == 'X':
53-
self.canvas.create_line(x*s, y*s, (x+1)*s, (y+1)*s, fill="red", width=4)
54-
self.canvas.create_line(x*s, (y+1)*s, (x+1)*s, y*s, fill="red", width=4)
55-
elif fill == 'O':
56-
self.canvas.create_oval(x*s, y*s, (x+1)*s, (y+1)*s, outline='blue', width=4)
57-
else:
58-
self.canvas.create_rectangle(x*s, y*s, (x+1)*s, (y+1)*s, fill=fill)
59-
self.canvas.create_rectangle(x*s, y*s, (x+1)*s, (y+1)*s, outline='black', width=4)
60-
#self.canvas.create_text(x*s+s/2, y*s+s/2, text=f'{x},{y}', fill='black')
61-
self.canvas.update()
62-
63-
def recv(self):
64-
while True:
65-
data, self.addr_to = self.sock.recvfrom(1024)
66-
print(f"received bytes: {data} from {self.addr_to}")
67-
self.grid[:] = data.decode('utf8').strip().split(',')
68-
self.draw_grid()
39+
# VER: mouse
40+
def mouse_click(self, event): # VER: mouse
41+
x, y = floor(event.x/self.grid_size), floor(event.y/self.grid_size) # VER: mouse
42+
#self.sock.sendto(','.join(map(str,(x,y,self.fill))).encode('utf8'), self.addr_to) # VER: mouse NOT local_state
43+
if (not any(self.grid)): # VER: 2players
44+
self.fill = 'X' # VER: 2players
45+
self.grid[x+y*self.width] = self.fill # VER: local_state
46+
self.sock.sendto(','.join(self.grid).encode('utf8'), self.addr_to) # VER: local_state
47+
self.draw_grid() # VER: local_state
48+
# VER: draw_grid
49+
def draw_grid(self): # VER: draw_grid
50+
self.canvas.delete(tkinter.ALL) # VER: local_state
51+
s = self.grid_size # VER: draw_grid
52+
for y in range(self.height): # VER: draw_grid
53+
for x in range(self.width): # VER: draw_grid
54+
fill = self.grid[x+y*self.width] # VER: local_state
55+
if fill == 'X': # VER: 2players
56+
self.canvas.create_line(x*s, y*s, (x+1)*s, (y+1)*s, fill="red", width=4) # VER: 2players
57+
self.canvas.create_line(x*s, (y+1)*s, (x+1)*s, y*s, fill="red", width=4) # VER: 2players
58+
elif fill == 'O': # VER: 2players
59+
self.canvas.create_oval(x*s, y*s, (x+1)*s, (y+1)*s, outline='blue', width=4) # VER: 2players
60+
else: # VER: 2players
61+
#if fill: # VER: local_state NOT 2players
62+
self.canvas.create_rectangle(x*s, y*s, (x+1)*s, (y+1)*s, fill=fill) # VER: local_state
63+
self.canvas.create_rectangle(x*s, y*s, (x+1)*s, (y+1)*s, outline='black', width=4) # VER: draw_grid
64+
#self.canvas.create_text(x*s+s/2, y*s+s/2, text=f'{x},{y}', fill='black') # VER: draw_grid NOT 2players
65+
self.canvas.update() # VER: draw_grid
66+
# VER: recv
67+
def recv(self): # VER: recv
68+
while True: # VER: recv
69+
data, self.addr_to = self.sock.recvfrom(1024) # VER: recv
70+
print(f"received bytes: {data} from {self.addr_to}") # VER: recv
71+
data = data.decode('utf8').strip().split(',') # VER: recv_draw
72+
# VER: recv_draw
73+
#x, y, fill = int(data[0]), int(data[1]), data[2] # VER: recv_draw NOT local_state
74+
#s = self.grid_size # VER: recv_draw NOT local_state
75+
#self.canvas.create_rectangle(x*s, y*s, (x+1)*s, (y+1)*s, fill=fill) # VER: recv_draw NOT local_state
76+
self.grid[:] = data # VER: local_state
77+
self.draw_grid() # VER: local_state
6978

7079
if __name__ == '__main__':
71-
if len(sys.argv) == 1:
72-
sys.argv.append('127.0.0.1')
73-
TicTacToe(addr_to=sys.argv[1])
80+
if len(sys.argv) == 1: # VER: commandline
81+
sys.argv.append('127.0.0.1') # VER: commandline
82+
TicTacToe(addr_to=sys.argv[1]) # VER: commandline
83+
#TicTacToe() # VER: NOT commandline
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{"versions": {
2+
"": {"parents": []},
3+
"draw_grid": {"parents": [""]},
4+
"recv": {"parents": ["draw_grid"]},
5+
"recv_draw": {"parents": ["recv"]},
6+
"mouse": {"parents": ["recv_draw"]},
7+
"local_state": {"parents": ["mouse"]},
8+
"2players": {"parents": ["local_state"]},
9+
"commandline": {"parents": ["2players"]}
10+
}}

0 commit comments

Comments
 (0)