Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #client
- from sense_emu import SenseHat
- from signal import pause
- from copy import deepcopy
- from time import sleep
- from collections import namedtuple
- import socket
- # Create a TCP/IP socket
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # Connect the socket to the port where the server is listening
- server_address = ('192.168.1.17', 10000)
- print('connecting to {} port {}'.format(*server_address))
- sock.connect(server_address)
- sock.setblocking(False)
- green = (0, 255, 0)
- white = (255, 255, 255)
- black = (0, 0, 0)
- red = (255,0, 0)
- e = namedtuple('e','action direction')
- ball_color_positive = green
- ball_color_negative = red
- ball_color = ball_color_positive
- pos_ball = {'x':3,'y':4,'dir_x':1,'dir_y':1}
- pos_left_paddle = {'x':0,'y':[0,1,2], 'move':0}
- pos_right_paddle = {'x':7,'y':[5,6,7], 'move':0}
- pos = {'ball':pos_ball, 'l_paddle':pos_left_paddle, 'r_paddle':pos_right_paddle}
- last = deepcopy(pos)
- hat = SenseHat()
- def update_screen_paddle(paddle):
- s_last = set(last[paddle]['y'])
- s_pos = set(pos[paddle]['y'])
- s_diff_last_pos = s_last -s_pos
- s_diff_pos_last = s_pos - s_last
- for i in s_diff_last_pos:
- hat.set_pixel(last[paddle]['x'],i, black)
- for i in s_diff_pos_last:
- hat.set_pixel(last[paddle]['x'],i, white)
- def update_screen():
- global pos, last
- hat.set_pixel(last['ball']['x'],last['ball']['y'], black)
- hat.set_pixel(pos['ball']['x'],pos['ball']['y'], ball_color)
- update_screen_paddle('l_paddle')
- update_screen_paddle('r_paddle')
- last = deepcopy(pos)
- def move_paddle(data, step, min = 0, max = 5):
- if data[0] + step <= max and data[0] + step >= min:
- for i in range(len(data)):
- data[i] += step
- return data
- def ev_move_paddle(event,paddle,left,right):
- step = 0
- if event.action in ('pressed', 'held'):
- step = {left: -1,right: 1,}.get(event.direction, 0)
- pos[paddle]['y'] = move_paddle(pos[paddle]['y'],step)
- pos[paddle]['move'] = step
- def ev_enter(event):
- global is_working
- if event.action in ('pressed', 'held'):
- is_working = {'middle': False}.get(event.direction, True)
- def ev_move_l_paddle(event):
- ev_move_paddle(event,'l_paddle','left','right')
- def ev_move_r_paddle(event):
- ev_move_paddle(event,'r_paddle','up','down')
- def ev_ball(position):
- global ball_color
- ball_color = ball_color_positive
- if position:
- x = int(position[0])
- y = int(position[1])
- else:
- x = pos['ball']['x'] + pos['ball']['dir_x']
- y = pos['ball']['y'] + pos['ball']['dir_y']
- if y > 7:
- pos['ball']['dir_y'] = -1
- y = 6
- if y < 0:
- pos['ball']['dir_y'] = 1
- y = 1
- if x > 6:
- pos['ball']['dir_x'] = -1
- x = 5
- if y not in pos['r_paddle']['y']:
- ball_color = ball_color_negative
- if x <1:
- pos['ball']['dir_x'] = 1
- x = 2
- if y not in pos['l_paddle']['y']:
- ball_color = ball_color_negative
- pos['ball']['x'] = x
- pos['ball']['y'] = y
- hat.clear()
- for i in range(0,3):
- hat.set_pixel(pos['l_paddle']['x'],pos['l_paddle']['y'][i], white)
- hat.set_pixel(pos['r_paddle']['x'],pos['r_paddle']['y'][i], white)
- update_screen()
- is_working = True
- while is_working:
- try:
- data = None
- print("rec")
- data = sock.recv(256)
- print("recEnd",data)
- for mov in data.decode().split():
- print('mov:',mov)
- if mov == 'left':
- ev_move_l_paddle(e('pressed','left'))
- elif mov == 'right':
- ev_move_l_paddle(e('pressed','right'))
- else:
- ev_ball(mov.split('.'))
- except:
- pass
- for event in hat.stick.get_events():
- ev_move_l_paddle(event)
- ev_move_r_paddle(event)
- if event.action in ('pressed', 'held'):
- sock.sendall(bytes(event.direction+' ', 'utf-8'))
- ev_enter(event)
- update_screen()
- #ev_ball()
- update_screen()
- sleep(0.5)
- #server
- from sense_emu import SenseHat
- from signal import pause
- from copy import deepcopy
- from time import sleep
- from collections import namedtuple
- import socket
- #socket.setblocking(False)
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- # Bind the socket to the port
- server_address = ('192.168.1.17', 10000)
- print('starting up on {} port {}'.format(*server_address))
- sock.bind(server_address)
- # Listen for incoming connections
- sock.listen(1)
- # Wait for a connection
- print('waiting for a connection')
- connection, client_address = sock.accept()
- print('connection from', client_address)
- #sock.setblocking(False)
- connection.setblocking(False)
- green = (0, 255, 0)
- white = (255, 255, 255)
- black = (0, 0, 0)
- red = (255,0, 0)
- e = namedtuple('e', 'action direction')
- ball_color_positive = green
- ball_color_negative = red
- ball_color = ball_color_positive
- pos_ball = {'x':3,'y':4,'dir_x':1,'dir_y':1}
- pos_left_paddle = {'x':0,'y':[0,1,2], 'move':0}
- pos_right_paddle = {'x':7,'y':[5,6,7], 'move':0}
- pos = {'ball':pos_ball, 'l_paddle':pos_left_paddle, 'r_paddle':pos_right_paddle}
- last = deepcopy(pos)
- hat = SenseHat()
- def update_screen_paddle(paddle):
- s_last = set(last[paddle]['y'])
- s_pos = set(pos[paddle]['y'])
- s_diff_last_pos = s_last -s_pos
- s_diff_pos_last = s_pos - s_last
- for i in s_diff_last_pos:
- hat.set_pixel(last[paddle]['x'],i, black)
- for i in s_diff_pos_last:
- hat.set_pixel(last[paddle]['x'],i, white)
- def update_screen():
- global pos, last
- hat.set_pixel(last['ball']['x'],last['ball']['y'], black)
- hat.set_pixel(pos['ball']['x'],pos['ball']['y'], ball_color)
- update_screen_paddle('l_paddle')
- update_screen_paddle('r_paddle')
- last = deepcopy(pos)
- def move_paddle(data, step, min = 0, max = 5):
- if data[0] + step <= max and data[0] + step >= min:
- for i in range(len(data)):
- data[i] += step
- return data
- def ev_move_paddle(event,paddle,left,right):
- step = 0
- if event.action in ('pressed', 'held'):
- step = {left: -1,right: 1,}.get(event.direction, 0)
- pos[paddle]['y'] = move_paddle(pos[paddle]['y'],step)
- pos[paddle]['move'] = step
- def ev_enter(event):
- global is_working
- if event.action in ('pressed', 'held'):
- is_working = {'middle': False}.get(event.direction, True)
- def ev_move_l_paddle(event):
- ev_move_paddle(event,'l_paddle','left','right')
- def ev_move_r_paddle(event):
- ev_move_paddle(event,'r_paddle','up','down')
- def ev_ball():
- global ball_color
- ball_color = ball_color_positive
- x = pos['ball']['x'] + pos['ball']['dir_x']
- y = pos['ball']['y'] + pos['ball']['dir_y']
- if y > 7:
- pos['ball']['dir_y'] = -1
- y = 6
- if y < 0:
- pos['ball']['dir_y'] = 1
- y = 1
- if x > 6:
- pos['ball']['dir_x'] = -1
- x = 5
- if y not in pos['r_paddle']['y']:
- ball_color = ball_color_negative
- if x <1:
- pos['ball']['dir_x'] = 1
- x = 2
- if y not in pos['l_paddle']['y']:
- ball_color = ball_color_negative
- pos['ball']['x'] = x
- pos['ball']['y'] = y
- hat.clear()
- for i in range(0,3):
- hat.set_pixel(pos['l_paddle']['x'],pos['l_paddle']['y'][i], white)
- hat.set_pixel(pos['r_paddle']['x'],pos['r_paddle']['y'][i], white)
- update_screen()
- is_working = True
- while is_working:
- try:
- data = None
- print("rec")
- data = connection.recv(256);
- print("recEnd", data)
- for mov in data.decode().split(): # move enemy paddle
- ev_move_r_paddle(e('pressed',mov))
- except:
- pass
- for event in hat.stick.get_events():
- ev_move_l_paddle(event)
- ev_move_r_paddle(event)
- if event.action in ('pressed', 'held'):
- connection.sendall(bytes(event.direction+' ','utf-8')) # send moves
- ev_enter(event)
- update_screen()
- ev_ball()
- connection.sendall(bytes(f"{pos['ball']['x']}.{pos['ball']['y']}",'utf-8')) # send ball pos
- update_screen()
- sleep(0.5)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement