#~ WiimotePyConnect v1.5
# coding=utf-8
import cwiid
import pylab
import time
import curses
stdscr = curses.initscr()
stdscr.refresh()
curses.curs_set(0)
#Mapeos
bWiimote = {8:\'A\', 4:\'B\', 2:\'1\', 1:\'2\', 16:\'-\', 4096:\'+\', 128:\'Home\', 2048:\'Up\', 1024:\'Down\', 256:\'Left\', 512:\'Right\'}
fullLeds = {1:1, 2:3, 3:7, 4:15}
ledsP = {1:1, 2:2, 3:4, 4:8}
thresh = 20
def main():
play = True
while play:
stdscr.clear()
#Conectar wiimotes
stdscr.addstr(\'Cuantos jugadores se conectarán? \')
c = int(stdscr.getstr())
stdscr.addstr(\'Cual es el límite? \')
l = int(stdscr.getstr())
wm = []
for i in range(c):
stdscr.addstr(\'Presione 1+2 en el Wiimote \' + str(i+1) + \'...\\n\')
stdscr.refresh()
wm.append(cwiid.Wiimote())
wm[i].rpt_mode = cwiid.RPT_BTN | cwiid.RPT_ACC
wm[i].led = ledsP[(i+1)%4]
stdscr.addstr(\'Conectado\\n\')
stdscr.addstr(\'El juego comenzará despues de que todos los jugadores presionen A\\n\')
stdscr.refresh()
start = False
ok = []
okTry = []
for i in range(c):
ok.append(False)
okTry.append(True)
while not start:
pressed = checkButtons(wm, c)
for i in range(c):
if \'A\' in pressed[i]:
ok[i] = True
if ok == okTry:
start = True
stdscr.addstr(\'Preparados...\\n\')
stdscr.refresh()
time.sleep(2)
stdscr.addstr(\'Listos...\\n\')
stdscr.refresh()
time.sleep(2)
playing = True
prev0 = []
prev1 = []
prev2 = []
points = []
prevpoints = []
loosers = []
for i in range(c):
prev0.append(0)
prev1.append(0)
prev2.append(0)
points.append(-1)
prevpoints.append(-1)
while playing:
####Buttons pressed
pressed = checkButtons(wm, c)
####Check movement
for i in range(c):
if i not in loosers:
ac0 = wm[i].state[\'acc\'][0]
if abs(prev0[i] - ac0) > thresh:
points[i] += 1
prev0[i] = ac0
ac1 = wm[i].state[\'acc\'][1]
if abs(prev1[i] - ac1) > thresh:
points[i] += 1
prev1[i] = ac1
ac2 = wm[i].state[\'acc\'][2]
if abs(prev2[i] - ac2) > thresh:
points[i] += 1
prev2[i] = ac2
#####
if prevpoints != points:
stdscr.clear()
for i in range(c):
if points[i] > l and i not in loosers:
loosers.append(i)
if i not in loosers:
p = points[i]*100/l
if p < 25:
wm[i].led = fullLeds[1]
elif p < 50:
wm[i].led = fullLeds[2]
elif p < 75:
wm[i].led = fullLeds[3]
else:
wm[i].led = fullLeds[4]
dis = \'[\'
for j in range(p):
dis += \'|\'
for j in range(100-p):
dis += \' \'
dis += \']\'
stdscr.addstr(\'Jugador \' + str(i+1) + \': \' + dis + \'\\n\')
else:
stdscr.addstr(\'Jugador \' + str(i+1) + \': PERDIÓ\\n\')
wm[i].led = 0
stdscr.refresh()
prevpoints = points[:]
if len(loosers) == c-1:
playing = False
for i in range(c):
if i not in loosers:
winner = i
stdscr.addstr(\'EL GANADOR ES EL JUGADOR \' + str(winner + 1) + \'\\n\')
stdscr.addstr(\'Mantén presionado A para volver a jugar o el B para terminar\\n\')
stdscr.refresh()
while True:
####Buttons pressed
pressed = checkButtons(wm, c)
####
if \'A\' in pressed[winner]:
break
elif \'B\' in pressed[winner]:
play = False
break
wm[winner].led = fullLeds[4]
wm[winner].rumble = True
time.sleep(0.5)
wm[winner].led = 0
wm[winner].rumble = False
time.sleep(0.5)
#Funciones
def checkPressed(w, mapp):
buttons = w[\'buttons\']
bn = sorted(mapp.keys())
bn.reverse()
p = []
for i in bn:
if i <= buttons:
p.append(mapp[i])
buttons -= i
return p
def checkButtons(wm, c):
pressed = []
for i in range(c):
pressed.append(checkPressed(wm[i].state,bWiimote))
return pressed
main()
curses.endwin()