Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.19 KB | None | 0 0
  1. #client
  2. from sense_emu import SenseHat
  3. from signal import pause
  4. from copy import deepcopy
  5. from time import sleep
  6. from collections import namedtuple
  7. import socket
  8.  
  9. # Create a TCP/IP socket
  10. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  11.  
  12. # Connect the socket to the port where the server is listening
  13. server_address = ('192.168.1.17', 10000)
  14. print('connecting to {} port {}'.format(*server_address))
  15. sock.connect(server_address)
  16.  
  17. sock.setblocking(False)
  18.  
  19.  
  20. green = (0, 255, 0)
  21. white = (255, 255, 255)
  22. black = (0, 0, 0)
  23. red = (255,0, 0)
  24.  
  25. e = namedtuple('e','action direction')
  26.  
  27. ball_color_positive = green
  28. ball_color_negative = red
  29. ball_color = ball_color_positive
  30. pos_ball = {'x':3,'y':4,'dir_x':1,'dir_y':1}
  31. pos_left_paddle = {'x':0,'y':[0,1,2], 'move':0}
  32. pos_right_paddle = {'x':7,'y':[5,6,7], 'move':0}
  33. pos = {'ball':pos_ball, 'l_paddle':pos_left_paddle, 'r_paddle':pos_right_paddle}
  34. last = deepcopy(pos)
  35.  
  36. hat = SenseHat()
  37.  
  38. def update_screen_paddle(paddle):
  39. s_last = set(last[paddle]['y'])
  40. s_pos = set(pos[paddle]['y'])
  41. s_diff_last_pos = s_last -s_pos
  42. s_diff_pos_last = s_pos - s_last
  43.  
  44. for i in s_diff_last_pos:
  45. hat.set_pixel(last[paddle]['x'],i, black)
  46. for i in s_diff_pos_last:
  47. hat.set_pixel(last[paddle]['x'],i, white)
  48.  
  49. def update_screen():
  50. global pos, last
  51.  
  52. hat.set_pixel(last['ball']['x'],last['ball']['y'], black)
  53. hat.set_pixel(pos['ball']['x'],pos['ball']['y'], ball_color)
  54.  
  55. update_screen_paddle('l_paddle')
  56. update_screen_paddle('r_paddle')
  57.  
  58. last = deepcopy(pos)
  59.  
  60.  
  61. def move_paddle(data, step, min = 0, max = 5):
  62. if data[0] + step <= max and data[0] + step >= min:
  63. for i in range(len(data)):
  64. data[i] += step
  65. return data
  66.  
  67. def ev_move_paddle(event,paddle,left,right):
  68. step = 0
  69. if event.action in ('pressed', 'held'):
  70. step = {left: -1,right: 1,}.get(event.direction, 0)
  71. pos[paddle]['y'] = move_paddle(pos[paddle]['y'],step)
  72. pos[paddle]['move'] = step
  73.  
  74. def ev_enter(event):
  75. global is_working
  76. if event.action in ('pressed', 'held'):
  77. is_working = {'middle': False}.get(event.direction, True)
  78.  
  79. def ev_move_l_paddle(event):
  80. ev_move_paddle(event,'l_paddle','left','right')
  81.  
  82. def ev_move_r_paddle(event):
  83. ev_move_paddle(event,'r_paddle','up','down')
  84.  
  85. def ev_ball(position):
  86. global ball_color
  87. ball_color = ball_color_positive
  88. if position:
  89. x = int(position[0])
  90. y = int(position[1])
  91. else:
  92. x = pos['ball']['x'] + pos['ball']['dir_x']
  93. y = pos['ball']['y'] + pos['ball']['dir_y']
  94.  
  95. if y > 7:
  96. pos['ball']['dir_y'] = -1
  97. y = 6
  98. if y < 0:
  99. pos['ball']['dir_y'] = 1
  100. y = 1
  101.  
  102. if x > 6:
  103. pos['ball']['dir_x'] = -1
  104. x = 5
  105. if y not in pos['r_paddle']['y']:
  106. ball_color = ball_color_negative
  107.  
  108. if x <1:
  109. pos['ball']['dir_x'] = 1
  110. x = 2
  111. if y not in pos['l_paddle']['y']:
  112. ball_color = ball_color_negative
  113. pos['ball']['x'] = x
  114. pos['ball']['y'] = y
  115.  
  116.  
  117.  
  118. hat.clear()
  119. for i in range(0,3):
  120. hat.set_pixel(pos['l_paddle']['x'],pos['l_paddle']['y'][i], white)
  121. hat.set_pixel(pos['r_paddle']['x'],pos['r_paddle']['y'][i], white)
  122. update_screen()
  123.  
  124. is_working = True
  125. while is_working:
  126. try:
  127. data = None
  128. print("rec")
  129. data = sock.recv(256)
  130. print("recEnd",data)
  131. for mov in data.decode().split():
  132. print('mov:',mov)
  133. if mov == 'left':
  134. ev_move_l_paddle(e('pressed','left'))
  135. elif mov == 'right':
  136. ev_move_l_paddle(e('pressed','right'))
  137. else:
  138. ev_ball(mov.split('.'))
  139. except:
  140. pass
  141. for event in hat.stick.get_events():
  142. ev_move_l_paddle(event)
  143. ev_move_r_paddle(event)
  144. if event.action in ('pressed', 'held'):
  145. sock.sendall(bytes(event.direction+' ', 'utf-8'))
  146. ev_enter(event)
  147. update_screen()
  148. #ev_ball()
  149. update_screen()
  150. sleep(0.5)
  151.  
  152.  
  153. #server
  154. from sense_emu import SenseHat
  155. from signal import pause
  156. from copy import deepcopy
  157. from time import sleep
  158. from collections import namedtuple
  159. import socket
  160.  
  161. #socket.setblocking(False)
  162. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  163.  
  164. # Bind the socket to the port
  165. server_address = ('192.168.1.17', 10000)
  166. print('starting up on {} port {}'.format(*server_address))
  167.  
  168. sock.bind(server_address)
  169.  
  170. # Listen for incoming connections
  171. sock.listen(1)
  172. # Wait for a connection
  173. print('waiting for a connection')
  174. connection, client_address = sock.accept()
  175. print('connection from', client_address)
  176. #sock.setblocking(False)
  177. connection.setblocking(False)
  178.  
  179.  
  180. green = (0, 255, 0)
  181. white = (255, 255, 255)
  182. black = (0, 0, 0)
  183. red = (255,0, 0)
  184.  
  185. e = namedtuple('e', 'action direction')
  186.  
  187. ball_color_positive = green
  188. ball_color_negative = red
  189. ball_color = ball_color_positive
  190. pos_ball = {'x':3,'y':4,'dir_x':1,'dir_y':1}
  191. pos_left_paddle = {'x':0,'y':[0,1,2], 'move':0}
  192. pos_right_paddle = {'x':7,'y':[5,6,7], 'move':0}
  193. pos = {'ball':pos_ball, 'l_paddle':pos_left_paddle, 'r_paddle':pos_right_paddle}
  194. last = deepcopy(pos)
  195.  
  196. hat = SenseHat()
  197.  
  198. def update_screen_paddle(paddle):
  199. s_last = set(last[paddle]['y'])
  200. s_pos = set(pos[paddle]['y'])
  201. s_diff_last_pos = s_last -s_pos
  202. s_diff_pos_last = s_pos - s_last
  203.  
  204. for i in s_diff_last_pos:
  205. hat.set_pixel(last[paddle]['x'],i, black)
  206. for i in s_diff_pos_last:
  207. hat.set_pixel(last[paddle]['x'],i, white)
  208.  
  209. def update_screen():
  210. global pos, last
  211.  
  212. hat.set_pixel(last['ball']['x'],last['ball']['y'], black)
  213. hat.set_pixel(pos['ball']['x'],pos['ball']['y'], ball_color)
  214.  
  215. update_screen_paddle('l_paddle')
  216. update_screen_paddle('r_paddle')
  217.  
  218. last = deepcopy(pos)
  219.  
  220.  
  221. def move_paddle(data, step, min = 0, max = 5):
  222. if data[0] + step <= max and data[0] + step >= min:
  223. for i in range(len(data)):
  224. data[i] += step
  225. return data
  226.  
  227. def ev_move_paddle(event,paddle,left,right):
  228. step = 0
  229. if event.action in ('pressed', 'held'):
  230. step = {left: -1,right: 1,}.get(event.direction, 0)
  231. pos[paddle]['y'] = move_paddle(pos[paddle]['y'],step)
  232. pos[paddle]['move'] = step
  233.  
  234. def ev_enter(event):
  235. global is_working
  236. if event.action in ('pressed', 'held'):
  237. is_working = {'middle': False}.get(event.direction, True)
  238.  
  239. def ev_move_l_paddle(event):
  240. ev_move_paddle(event,'l_paddle','left','right')
  241.  
  242. def ev_move_r_paddle(event):
  243. ev_move_paddle(event,'r_paddle','up','down')
  244.  
  245. def ev_ball():
  246. global ball_color
  247. ball_color = ball_color_positive
  248. x = pos['ball']['x'] + pos['ball']['dir_x']
  249. y = pos['ball']['y'] + pos['ball']['dir_y']
  250.  
  251. if y > 7:
  252. pos['ball']['dir_y'] = -1
  253. y = 6
  254. if y < 0:
  255. pos['ball']['dir_y'] = 1
  256. y = 1
  257.  
  258. if x > 6:
  259. pos['ball']['dir_x'] = -1
  260. x = 5
  261. if y not in pos['r_paddle']['y']:
  262. ball_color = ball_color_negative
  263.  
  264. if x <1:
  265. pos['ball']['dir_x'] = 1
  266. x = 2
  267. if y not in pos['l_paddle']['y']:
  268. ball_color = ball_color_negative
  269. pos['ball']['x'] = x
  270. pos['ball']['y'] = y
  271.  
  272.  
  273.  
  274. hat.clear()
  275. for i in range(0,3):
  276. hat.set_pixel(pos['l_paddle']['x'],pos['l_paddle']['y'][i], white)
  277. hat.set_pixel(pos['r_paddle']['x'],pos['r_paddle']['y'][i], white)
  278. update_screen()
  279.  
  280. is_working = True
  281. while is_working:
  282. try:
  283. data = None
  284. print("rec")
  285. data = connection.recv(256);
  286. print("recEnd", data)
  287. for mov in data.decode().split(): # move enemy paddle
  288. ev_move_r_paddle(e('pressed',mov))
  289.  
  290. except:
  291. pass
  292. for event in hat.stick.get_events():
  293. ev_move_l_paddle(event)
  294. ev_move_r_paddle(event)
  295. if event.action in ('pressed', 'held'):
  296. connection.sendall(bytes(event.direction+' ','utf-8')) # send moves
  297. ev_enter(event)
  298. update_screen()
  299. ev_ball()
  300. connection.sendall(bytes(f"{pos['ball']['x']}.{pos['ball']['y']}",'utf-8')) # send ball pos
  301. update_screen()
  302. sleep(0.5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement