1
- import sys
2
- import socket
3
1
import tkinter
4
- import threading
5
2
from math import floor
3
+ import socket # VER: recv
4
+ import threading # VER: recv
5
+ import sys # VER: commandline
6
6
7
7
class TicTacToe ():
8
8
def __init__ (self , grid_size = 100 , width = 5 , height = 4 , addr_to = '127.0.0.1' ):
9
9
self .grid_size = grid_size
10
10
self .width = width
11
11
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?' )
18
12
self .addr_to = (addr_to , 5005 )
19
13
20
14
self .root = tkinter .Tk ()
21
15
self .root .resizable (False , False )
22
- self .root .bind ('<ButtonPress>' , self .mouse_click )
23
16
self .canvas = tkinter .Canvas (self .root , width = grid_size * width , height = grid_size * height )
24
17
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
34
37
35
38
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
69
78
70
79
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
0 commit comments