Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.18 KB | None | 0 0
  1. # This file has been written to your home directory for convenience. It is
  2. # saved as "/home/pi/joystick_events-2019-09-25-15-04-24.py"
  3.  
  4. from sense_emu import SenseHat
  5. from signal import pause
  6. from copy import deepcopy
  7. from time import sleep
  8. import socket
  9.  
  10. HOST='169.254.37.224'
  11. PORT=12345
  12.  
  13. green = (0, 255, 0)
  14. white = (255, 255, 255)
  15. black = (0, 0, 0)
  16. red = (255,0, 0)
  17.  
  18. ball_color_positive = green
  19. ball_color_negative = red
  20. ball_color = ball_color_positive
  21. pos_ball = {'x':3,'y':4,'dir_x':1,'dir_y':1}
  22. pos_left_paddle = {'x':0,'y':[0,1,2], 'move':0}
  23. pos_right_paddle = {'x':7,'y':[5,6,7], 'move':0}
  24. pos = {'ball':pos_ball, 'l_paddle':pos_left_paddle, 'r_paddle':pos_right_paddle}
  25. last = deepcopy(pos)
  26.  
  27. hat = SenseHat()
  28.  
  29. def update_screen_paddle(paddle):
  30. s_last = set(last[paddle]['y'])
  31. s_pos = set(pos[paddle]['y'])
  32. s_diff_last_pos = s_last -s_pos
  33. s_diff_pos_last = s_pos - s_last
  34.  
  35. for i in s_diff_last_pos:
  36. hat.set_pixel(last[paddle]['x'],i, black)
  37. for i in s_diff_pos_last:
  38. hat.set_pixel(last[paddle]['x'],i, white)
  39.  
  40. def update_screen():
  41. global pos, last
  42.  
  43. hat.set_pixel(last['ball']['x'],last['ball']['y'], black)
  44. hat.set_pixel(pos['ball']['x'],pos['ball']['y'], ball_color)
  45.  
  46. update_screen_paddle('l_paddle')
  47. update_screen_paddle('r_paddle')
  48.  
  49. last = deepcopy(pos)
  50.  
  51.  
  52. def move_paddle(data, step, min = 0, max = 5):
  53. if data[0] + step <= max and data[0] + step >= min:
  54. for i in range(len(data)):
  55. data[i] += step
  56. return data
  57.  
  58. def ev_move_paddle(event,paddle,left,right):
  59. step = 0
  60. if event.action in ('pressed', 'held'):
  61. step = {left: -1,right: 1,}.get(event.direction, 0)
  62. pos[paddle]['y'] = move_paddle(pos[paddle]['y'],step)
  63. pos[paddle]['move'] = step
  64.  
  65. def ev_enter(event):
  66. global is_working
  67. if event.action in ('pressed', 'held'):
  68. is_working = {'middle': False}.get(event.direction, True)
  69.  
  70. def ev_move_l_paddle(event):
  71. if event.action=='pressed':
  72. ev_move_paddle(event,'l_paddle','left','right')
  73.  
  74. def ev_move_r_paddle(event):
  75. if event.direction=='down' and event.action=='pressed':
  76. s.sendall(b'down')
  77. if event.direction=='up' and event.action=='pressed':
  78. s.sendall(b'up')
  79. if event.action=='pressed':
  80. ev_move_paddle(event,'r_paddle','up','down')
  81.  
  82. def ev_ball():
  83. global ball_color
  84. ball_color = ball_color_positive
  85. x = pos['ball']['x'] + pos['ball']['dir_x']
  86. y = pos['ball']['y'] + pos['ball']['dir_y']
  87.  
  88. if y > 7:
  89. pos['ball']['dir_y'] = -1
  90. y = 6
  91. if y < 0:
  92. pos['ball']['dir_y'] = 1
  93. y = 1
  94.  
  95. if x > 6:
  96. pos['ball']['dir_x'] = -1
  97. x = 5
  98. if y not in pos['r_paddle']['y']:
  99. ball_color = ball_color_negative
  100.  
  101. if x <1:
  102. pos['ball']['dir_x'] = 1
  103. x = 2
  104. if y not in pos['l_paddle']['y']:
  105. ball_color = ball_color_negative
  106. pos['ball']['x'] = x
  107. pos['ball']['y'] = y
  108.  
  109.  
  110.  
  111. hat.clear()
  112. for i in range(0,3):
  113. hat.set_pixel(pos['l_paddle']['x'],pos['l_paddle']['y'][i], white)
  114. hat.set_pixel(pos['r_paddle']['x'],pos['r_paddle']['y'][i], white)
  115. update_screen()
  116.  
  117. with socket.socket(socket.AF_INET,socket.SOCK_STREAM) as s:
  118. s.connect((HOST,PORT))
  119. s.setblocking(False)
  120.  
  121. is_working = True
  122. while is_working:
  123. for event in hat.stick.get_events():
  124. ev_move_r_paddle(event)
  125. ev_enter(event)
  126. update_screen()
  127. try:
  128. data=s.recv(128)
  129. print(data)
  130. if data==b'up':
  131. print('up')
  132. print(pos_right_paddle['y'][1])
  133. if pos_left_paddle['y'][1]>=2:
  134. for i in range(len(pos_left_paddle['y'])):
  135. pos_left_paddle['y'][i]-=1
  136. if data==b'down':
  137. print('down')
  138. if pos_left_paddle['y'][1]<=5:
  139. for i in range(len(pos_left_paddle['y'])):
  140. pos_left_paddle['y'][i]+=1
  141. except:
  142. pass
  143. ev_ball()
  144. update_screen()
  145. sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement