Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # This file has been written to your home directory for convenience. It is
- # saved as "/home/pi/joystick_events-2019-09-25-15-04-24.py"
- from sense_emu import SenseHat
- from signal import pause
- from copy import deepcopy
- from time import sleep
- import socket
- HOST='169.254.37.224'
- PORT=12345
- green = (0, 255, 0)
- white = (255, 255, 255)
- black = (0, 0, 0)
- red = (255,0, 0)
- 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):
- if event.action=='pressed':
- ev_move_paddle(event,'l_paddle','left','right')
- def ev_move_r_paddle(event):
- if event.direction=='down' and event.action=='pressed':
- s.sendall(b'down')
- if event.direction=='up' and event.action=='pressed':
- s.sendall(b'up')
- if event.action=='pressed':
- 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()
- with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
- s.connect((HOST,PORT))
- s.setblocking(False)
- is_working = True
- while is_working:
- for event in hat.stick.get_events():
- ev_move_r_paddle(event)
- ev_enter(event)
- update_screen()
- try:
- data=s.recv(128)
- print(data)
- if data==b'up':
- print('up')
- print(pos_right_paddle['y'][1])
- if pos_left_paddle['y'][1]>=2:
- for i in range(len(pos_left_paddle['y'])):
- pos_left_paddle['y'][i]-=1
- if data==b'down':
- print('down')
- if pos_left_paddle['y'][1]<=5:
- for i in range(len(pos_left_paddle['y'])):
- pos_left_paddle['y'][i]+=1
- except:
- pass
- ev_ball()
- update_screen()
- sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement