Пример #1
0
def get_360_controller():
    '''
    Assume pygame.init() is called before this
    '''
    pygame.joystick.init()
    # Initialize a joystick object: grabs the first joystick
    PLATFORM = platform.uname()[0].upper()
    WINDOWS_PLATFORM = PLATFORM == 'WINDOWS'
    WINDOWS_XBOX_360 = False
    JOYSTICK_NAME = ''
    joysticks = xinput.XInputJoystick.enumerate_devices()
    device_numbers = list(map(attrgetter('device_number'), joysticks))
    joystick = None
    if device_numbers:
        joystick = pygame.joystick.Joystick(device_numbers[0])
        JOYSTICK_NAME = joystick.get_name().upper()
        print('Joystick: {} using "{}" device'.format(PLATFORM, JOYSTICK_NAME))
        if 'XBOX 360' in JOYSTICK_NAME and WINDOWS_PLATFORM:
            WINDOWS_XBOX_360 = True
            joystick = xinput.XInputJoystick(device_numbers[0])
            print('Using xinput.XInputJoystick')
            return joystick
        else:
            # put other logic here for handling platform + device type in the event loop
            print('Using pygame joystick')
            joystick.init()
            
    return False
Пример #2
0
    def __init__(self):

        # Set initial values for guitar state
        self.controller = xinput.XInputJoystick(0)
        self.curState = self.controller.get_state()
        # Check a controller is plugged in
        if self.curState is None:
            sys.exit("Please plug in a guitar.")
        self.prevState = self.curState
        self.whammyDown = self.GetWhammy() > WHAMMY_EDGE
        self.prevWhammyDown = self.whammyDown
        self.thrown = self.GetOrientation() > THROW_EDGE
        self.prevThrown = self.thrown
Пример #3
0
def getJoystick():
    WINDOWS_XBOX_360 = False
    JOYSTICK_NAME = ''
    joysticks = xinput.XInputJoystick.enumerate_devices()
    device_numbers = list(map(attrgetter('device_number'), joysticks))
    joystick = None
    if device_numbers:
        joystick = pygame.joystick.Joystick(device_numbers[0])
        JOYSTICK_NAME = joystick.get_name().upper()
        if 'XBOX 360' in JOYSTICK_NAME:
            WINDOWS_XBOX_360 = True
            joystick = xinput.XInputJoystick(device_numbers[0])
        else:
            # put other logic here for handling platform + device type in the event loop
            joystick.init()

    return joystick, WINDOWS_XBOX_360
def init():
    global XBOX_CONTROLLER, JOYSTICK_NAME, joystick, buttons_codes, axis_codes, d_pad_codes
    global pygame, screen, screen_rect, clock

    pygame.init()
    pygame.joystick.init()

    clock = pygame.time.Clock()
    # Initialize a joystick object: grabs the first joystick
    if PLATFORM == 'WINDOWS':
        joysticks = xinput.XInputJoystick.enumerate_devices()
        if DEBUG:
            print(
                "Joysticks returned by XInputJoystick : {}".format(joysticks))
        device_numbers = list(map(attrgetter('device_number'), joysticks))
        if DEBUG:
            print("Joysticks device numbers : {}".format(device_numbers))
        if device_numbers:
            joystick = pygame.joystick.Joystick(device_numbers[0])
            JOYSTICK_NAME = joystick.get_name().upper()
            if DEBUG:
                print('Joystick: {} using "{}" device'.format(
                    PLATFORM, JOYSTICK_NAME))
            if 'XBOX' in JOYSTICK_NAME:
                XBOX_CONTROLLER = True
                joystick = xinput.XInputJoystick(device_numbers[0])
                buttons_codes = DualMappingObject(
                    (0, 'A'), (1, 'B'), (2, 'X'), (3, 'Y'), (4, 'LB'),
                    (5, 'RB'), (6, 'BACK'), (7, 'START'), (8, 'LS'), (9, 'RS'),
                    (10, 'XB'))
                axis_codes = DualMappingObject(('LX', 1), ('LY', 0), ('RX', 4),
                                               ('RY', 3), ('LT', 2), ('RT', 5))
                if DEBUG:
                    print('Using xinput.XInputJoystick')
            else:
                # put other logic here for handling platform + device type in the event loop
                if DEBUG:
                    print('Using pygame joystick')
                joystick.init()
                buttons_codes = DualMappingObject(
                    (0, 'A'), (1, 'B'), (2, 'X'), (3, 'Y'), (4, 'LB'),
                    (5, 'RB'), (6, 'BACK'), (7, 'START'), (8, 'LS'), (9, 'RS'),
                    (10, 'XB'))
                axis_codes = DualMappingObject(('LX', 0), ('LY', 1), ('RX', 4),
                                               ('RY', 3), ('LT', 2), ('RT', 2))
        d_pad_codes = DualMappingObject(
            (0, 'DOWN'), (0, 'UP'), (0, 'LEFT'),
            (0, 'RIGHT'))  # setting this as a default just in case
    elif PLATFORM == 'DARWIN':
        joysticks = []
        for i in range(0, pygame.joystick.get_count()):
            joysticks.append(pygame.joystick.Joystick(i))
            joysticks[-1].init()
            if DEBUG:
                print("Detected joystick '", joysticks[-1].get_name(), "'")
        buttons_codes = DualMappingObject(
            (11, 'A'), (12, 'B'), (13, 'X'), (14, 'Y'), (8, 'LB'), (9, 'RB'),
            (5, 'BACK'), (4, 'START'), (6, 'LS'), (7, 'RS'), (10, 'XB'))
        axis_codes = DualMappingObject(('LX', 0), ('LY', 1), ('RX', 2),
                                       ('RY', 3), ('LT', 4), ('RT', 5))
        d_pad_codes = DualMappingObject((1, 'DOWN'), (0, 'UP'), (2, 'LEFT'),
                                        (3, 'RIGHT'))
Пример #5
0
def controller_worker(controller_continuous_array, controller_buttons_array, continuous_ref_array, btns_ref_array, RUN):
    #/////////////////////////////
    # IMPORTS AND PROJECT VARIABLES
    #/////////////////////////////

    # imports
    from operator import attrgetter
    import platform
    import pygame
    import pygame.locals
    from threading import Thread

    # custom imports
    from mappingobject import DualMappingObject
    #import draw
    import analysis

    PLATFORM = platform.uname()[0].upper()

    if PLATFORM == 'WINDOWS':
        import xinput

    __version__ = '1.0.0'
    __vernum__ = tuple([int(s) for s in __version__.split('.')])

    DEBUG = False

    max_fps = 60
    trigger_error_win = -3.051850947599719e-05
    controller_values = {'A':0, 'B':0, 'X':0, 'Y':0, 'LB':0, 'RB':0, 'LS':0, 'RS':0, 'BACK':0, 'START':0, 'XB':0,
                         'DPAD':[0,0], 'LX':0, 'LY':0, 'RX':0, 'RY':0, 'LT':0, 'RT':0}
    analysis_values = {'LXVel':0, 'LYVel':0, 'RXVel':0, 'RYVel':0, 'LTVel':0, 'RTVel':0, 'Density':0}
    # [end IMPORTS AND PROJECT VARIABLES]



    #/////////////////////////////
    # PYGAME AND CONTROLLER INIT
    #/////////////////////////////

    XBOX_CONTROLLER = False
    JOYSTICK_NAME = ''
    joystick = None
    clock = None

    #global XBOX_CONTROLLER, JOYSTICK_NAME, joystick, buttons_codes, axis_codes, d_pad_codes
    #global pygame, screen, screen_rect, clock

    pygame.init()
    pygame.joystick.init()

    clock = pygame.time.Clock()
    # Initialize a joystick object: grabs the first joystick
    if PLATFORM == 'WINDOWS':
        joysticks = xinput.XInputJoystick.enumerate_devices()
        if DEBUG:
            print("Joysticks returned by XInputJoystick : {}".format(joysticks))
        device_numbers = list(map(attrgetter('device_number'), joysticks))
        if DEBUG:
            print("Joysticks device numbers : {}".format(device_numbers))
        if device_numbers:
            joystick = pygame.joystick.Joystick(device_numbers[0])
            JOYSTICK_NAME = joystick.get_name().upper()
            if DEBUG:
                print('Joystick: {} using "{}" device'.format(PLATFORM, JOYSTICK_NAME))
            if 'XBOX' in JOYSTICK_NAME:
                XBOX_CONTROLLER = True
                joystick = xinput.XInputJoystick(device_numbers[0])
                buttons_codes = DualMappingObject((0,'A'), (1,'B'), (2,'X'), (3,'Y'), (4,'LB'), (5,'RB'), (6,'BACK'),
                                                  (7,'START'), (8,'LS'), (9,'RS'), (10,'XB'))
                axis_codes = DualMappingObject(('LX',1), ('LY',0), ('RX',4), ('RY',3), ('LT',2), ('RT',5))
                if DEBUG:
                    print('Using xinput.XInputJoystick')
            else:
                # put other logic here for handling platform + device type in the event loop
                if DEBUG:
                    print('Using pygame joystick')
                joystick.init()
                buttons_codes = DualMappingObject((0,'A'), (1,'B'), (2,'X'), (3,'Y'), (4,'LB'), (5,'RB'), (6,'BACK'),
                                                  (7,'START'), (8,'LS'), (9,'RS'), (10,'XB'))
                axis_codes = DualMappingObject(('LX',0), ('LY',1), ('RX',4), ('RY',3), ('LT',2), ('RT',2))
        d_pad_codes = DualMappingObject((0,'DOWN'), (0,'UP'), (0,'LEFT'), (0,'RIGHT')) # setting this as a default just in case
    elif PLATFORM == 'DARWIN':
        joysticks = []
        for i in range(0, pygame.joystick.get_count()):
            joysticks.append(pygame.joystick.Joystick(i))
            joysticks[-1].init()
            if DEBUG:
                print("Detected joystick '", joysticks[-1].get_name(), "'")
        buttons_codes = DualMappingObject((11, 'A'), (12, 'B'), (13, 'X'), (14, 'Y'), (8, 'LB'), (9, 'RB'), (5, 'BACK'),
                                          (4, 'START'), (6, 'LS'), (7, 'RS'), (10, 'XB'))
        axis_codes = DualMappingObject(('LX', 0), ('LY', 1), ('RX', 2), ('RY', 3), ('LT', 4), ('RT', 5))
        d_pad_codes = DualMappingObject((1, 'DOWN'), (0, 'UP'), (2, 'LEFT'), (3, 'RIGHT'))
    # [end PYGAME AND CONTROLLER INIT]



    #/////////////////////////////
    # EVENT HANDLING FUNCTIONS
    #/////////////////////////////

    def update_d_pad_mac(event, event_type):
        if event_type == JOYBUTTONDOWN:
            if d_pad_codes[event.button] == 'DOWN':
                controller_values['DPAD'][1] = -1
            elif d_pad_codes[event.button] == 'UP':
                controller_values['DPAD'][1] = 1
            elif d_pad_codes[event.button] == 'LEFT':
                controller_values['DPAD'][0] = -1
            elif d_pad_codes[event.button] == 'RIGHT':
                controller_values['DPAD'][0] = 1
        elif event_type == JOYBUTTONUP:
            if d_pad_codes[event.button] == 'DOWN':
                controller_values['DPAD'][1] = 0
            elif d_pad_codes[event.button] == 'UP':
                controller_values['DPAD'][1] = 0
            elif d_pad_codes[event.button] == 'LEFT':
                controller_values['DPAD'][0] = 0
            elif d_pad_codes[event.button] == 'RIGHT':
                controller_values['DPAD'][0] = 0


    def update_triggers_windows(axis, value):
        if XBOX_CONTROLLER:
            if axis == axis_codes['RT']:
                controller_values['RT'] = value
            elif axis == axis_codes['LT']:
                controller_values['LT'] = value
        else:
            if value > 0:
                controller_values['LT'] = value
            elif value < 0:
                controller_values['RT'] = -value


    def update_axis_motion_windows(axis, value):
        global controller_values
        if axis == axis_codes['LY']:
            if XBOX_CONTROLLER:
                controller_values['LY'] = value
            else:
                controller_values['LY'] = -value
        elif axis == axis_codes['LX']:
            controller_values['LX'] = value
        elif axis == axis_codes['RY']:
            if XBOX_CONTROLLER:
                controller_values['RY'] = value
            else:
                controller_values['RY'] = -value
        elif axis == axis_codes['RX']:
            controller_values['RX'] = value
        else:
            update_triggers_windows(axis, value)


    def handle_axis_motion(axis, value):
        global controller_values
        if DEBUG:
            print('JOYAXISMOTION: axis {}, value {}'.format(event.axis, event.value))
        if axis in axis_codes:
            if PLATFORM == 'WINDOWS':
                update_axis_motion_windows(axis, value)
            elif PLATFORM == 'DARWIN':
                controller_values[axis_codes[axis]] = -value if axis in [axis_codes['LY'], axis_codes['RY']] else value


    def handle_button_down(event):
        if DEBUG:
            print('JOYBUTTONDOWN: button {}'.format(event.button))
        if event.button in buttons_codes:
            controller_values[buttons_codes[event.button]] = 1
        elif PLATFORM == 'DARWIN' and event.button in d_pad_codes:
            update_d_pad_mac(event, JOYBUTTONDOWN)
        else:
            if DEBUG:
                print('Button not mapped')


    def handle_button_up(event):
        if DEBUG:
            print('JOYBUTTONUP: button {}'.format(event.button))
        if event.button in buttons_codes:
            controller_values[buttons_codes[event.button]] = 0
        elif PLATFORM == 'DARWIN' and event.button in d_pad_codes:
            update_d_pad_mac(event, JOYBUTTONUP)
        else:
            if DEBUG:
                print('Button not mapped')


    def handle_hat_motion(event):
        # pygame sends this; xinput sends a button instead--the handler converts the button to a hat event
        if DEBUG:
            print('JOYHATMOTION: joy {} hat {} value {}'.format(event.joy, event.hat, event.value))
        controller_values['DPAD'] = event.value
    # [end EVENT HANDLING FUNCTIONS]



    #/////////////////////////////
    # ANALYSIS OBJECTS
    #/////////////////////////////

    # ls_velocity = analysis.StickVelocityTracker(max_fps)
    # rs_velocity = analysis.StickVelocityTracker(max_fps)
    # lt_velocity = analysis.TriggerVelocityTracker(max_fps)
    # rt_velocity = analysis.TriggerVelocityTracker(max_fps)
    # density = analysis.DensityTracker(['A', 'B', 'X', 'Y', 'LB', 'RB'], max_fps)
    # [end ANALYSIS OBJECTS]



    #/////////////////////////////
    # MAIN CONTROLLER UPDATE LOOP
    #/////////////////////////////

    while RUN:
        clock.tick(max_fps)
        if XBOX_CONTROLLER:
            joystick.dispatch_events()

        for event in pygame.event.get():
            if DEBUG:
                print('event: {}'.format(pygame.event.event_name(event.type)))
            if event.type == JOYAXISMOTION:
                handle_axis_motion(event.axis, event.value)
            elif event.type == JOYBUTTONDOWN:
                handle_button_down(event)
            elif event.type == JOYBUTTONUP:
                handle_button_up(event)
            elif event.type == JOYHATMOTION:
                handle_hat_motion(event)

        # analysis objects update
        # ls_velocity.tick(controller_values['LX'], controller_values['LY'])
        # rs_velocity.tick(controller_values['RX'], controller_values['RY'])
        # lt_velocity.tick(controller_values['LT'])
        # rt_velocity.tick(controller_values['RT'])
        # density.tick(controller_values)
        # analysis_values['LXVel'] = ls_velocity['X']['LongTermVel']
        # analysis_values['LYVel'] = ls_velocity['Y']['LongTermVel']
        # analysis_values['RXVel'] = rs_velocity['X']['LongTermVel']
        # analysis_values['RYVel'] = rs_velocity['Y']['LongTermVel']
        # analysis_values['LTVel'] = lt_velocity['LongTermVel']
        # analysis_values['RTVel'] = rt_velocity['LongTermVel']
        # analysis_values['Density'] = density.get()

        if DEBUG:
            print("Controller values : {}".format(controller_values))

        #update array
        with controller_continuous_array.get_lock():
            for i, elem in enumerate(continuous_ref_array):
                controller_continuous_array[i].value = controller_values[elem]

        with controller_buttons_array.get_lock():
            for i, elem in enumerate(btns_ref_array):
                controller_buttons_array[i].value = controller_values[elem]
Пример #6
0
pygame.mixer.pre_init(44100, 32, 2, 4096)
pygame.init()
pygame.mixer.init(44100, -16, 2, 2048)
screen = pygame.display.set_mode((screen_x, screen_y), 0, 32)
pygame.display.set_caption('Mario')
menufont = pygame.font.Font("SuperMarioBros.ttf", 90)
gamefont = pygame.font.Font("SuperMarioBros.ttf", 70)
myfont = pygame.font.Font("SuperMarioBros.ttf", 30)

pygame.joystick.init()
joysticks = xinput.XInputJoystick.enumerate_devices()
device_numbers = list(map(attrgetter('device_number'), joysticks))
joystick = [None, None]
if device_numbers:
    joystick[0] = xinput.XInputJoystick(device_numbers[0])
    if len(device_numbers) > 1:
        joystick[1] = xinput.XInputJoystick(device_numbers[1])

try:
    sheet = pygame.image.load('sprites.png')
    background = pygame.image.load('background.png').convert()
    back_menu = pygame.image.load('back_menu.png').convert()
    mario_wins = pygame.image.load('mario_wins.png').convert()
    luigi_wins = pygame.image.load('luigi_wins.png').convert()
    draw_round = pygame.image.load('draw_round.png').convert()
    jump_sound = pygame.mixer.Sound('Jump.wav')
    coin_sound = pygame.mixer.Sound('Coin.wav')
    bomb_sound = pygame.mixer.Sound('Bomb.wav')
    death_sound = pygame.mixer.Sound('Death.wav')
    mush_sound = pygame.mixer.Sound('Mush_up.wav')
Пример #7
0
# Initialize a joystick object: grabs the first joystick
PLATFORM = platform.uname()[0].upper()
WINDOWS_PLATFORM = PLATFORM == 'WINDOWS'
WINDOWS_XBOX_360 = False
JOYSTICK_NAME = ''
joysticks = xinput.XInputJoystick.enumerate_devices()
device_numbers = list(map(attrgetter('device_number'), joysticks))
joystick = None
if device_numbers:
    joystick = pygame.joystick.Joystick(device_numbers[0])
    JOYSTICK_NAME = joystick.get_name().upper()
    print('Joystick: {} using "{}" device'.format(PLATFORM, JOYSTICK_NAME))
    if 'XBOX 360' in JOYSTICK_NAME and WINDOWS_PLATFORM:
        WINDOWS_XBOX_360 = True
        joystick = xinput.XInputJoystick(device_numbers[0])
        print('Using xinput.XInputJoystick')
    else:
        # put other logic here for handling platform + device type in the event loop
        print('Using pygame joystick')
        joystick.init()

screen = pygame.display.set_mode((640, 480))
screen_rect = screen.get_rect()
clock = pygame.time.Clock()
black = Color('black')
white = Color('white')
red = Color('red')

# button display
button_a = Struct(rect=Rect(560, 200, 20, 20), value=0)
Пример #8
0
def main():

    print("Startup")

    controller = xinput.XInputJoystick(0)

    # Dynamic get rate
    #rate = xinput.determine_optimal_sample_rate()
    rate = 200

    operands = [0]
    operators = []
    outStr = ""
    i = 0
    j = 0
    ans = 0
    opCounter = 0
    sign = 1

    print("Operation: +")

    state = controller.get_state()
    prevState = state
    up = GetOrientation(state) > THROW_EDGE
    prevUp = up
    whammyDown = GetWhammy(state) > WHAMMY_EDGE
    prevWhammyDown = whammyDown

    while True:
        # Wait on sample rate
        time.sleep(1.0 / rate)

        # Get state of controller
        state = controller.get_state()
        #print(xinput.struct_dict(state.gamepad))

        # Check orientation
        if up is False and GetOrientation(
                state) > THROW_EDGE + THROW_HYSTERESIS:
            up = True
        elif up is True and GetOrientation(
                state) < THROW_EDGE - THROW_HYSTERESIS:
            up = False

        # Check whammy
        if whammyDown is False and GetWhammy(
                state) > WHAMMY_EDGE + WHAMMY_HYSTERESIS:
            whammyDown = True
        elif whammyDown is True and GetWhammy(
                state) < WHAMMY_EDGE - WHAMMY_HYSTERESIS:
            whammyDown = False

        # Check various controls
        # Check strum down
        if GetButtons(state) & BTN_BIT_STRUM_DOWN and not GetButtons(
                prevState) & BTN_BIT_STRUM_DOWN:
            #print("Strum down")
            #print('i = ' + str(i))

            # Check for insert operand
            operand = GetButtons(state) & 0x1F
            # Overwrite ans
            ans = 0

            #print("j: " + str(j))
            if operands[i] == 0:
                if j >= 0:
                    operands[i] = operand
                    outStr = outStr[:-1] + "{0:d}".format(operand)
                    if operand < 10:
                        j += 1
                    else:
                        j += 2
                else:
                    if operand < 10:
                        operands[i] = operand / 10
                        j -= 1
                    else:
                        operands[i] = operand / 100
                        j -= 2
                    outStr = outStr + str(operand)

            elif j >= 0:
                if operand < 10:
                    operands[i] = operands[i] * 10 + operand * sign
                    j += 1
                else:
                    operands[i] = operands[i] * 100 + operand * sign
                    j += 2
                outStr = outStr + str(operand)

            elif j < 0:
                if operand < 10:
                    operands[i] = operands[i] + operand * (10**j) * sign
                    j -= 1
                else:
                    operands[i] = operands[i] + operand * (10**(j - 1)) * sign
                    j -= 2

                outStr = outStr + str(operand)

            #print("Operands: " + str(operands))
            print(outStr + "\t\t\tOperation: " + opTable[opCounter] +
                  "               ",
                  end='\r')
            playStrum(state)

        # Check strum up
        if GetButtons(state) & BTN_BIT_STRUM_UP and not GetButtons(
                prevState) & BTN_BIT_STRUM_UP:
            #print("Strum up")

            if operands[0] == 0 and len(operands) == 1:
                #outStr = '0'
                outStr = str(ans)
                operands[0] = ans

            operator = opTable[opCounter]
            operators.append(operator)
            operands.append(0)
            outStr = outStr + ' ' + operator + ' 0'

            i += 1
            j = 0
            sign = 1

            if outStr != "":
                print(outStr, end='\r')
            else:
                print("Please input at an operand.")

            #sys.stdout.flush

        # Check for whammy press
        if whammyDown and not prevWhammyDown:
            #print("Whammy down")

            opCounter += 1
            if opCounter >= len(opTable):
                opCounter = 0

            #print("opCounter: " + str(opCounter))
            print(outStr + "\t\t\tOperation: " + opTable[opCounter] +
                  "               ",
                  end='\r')

        # Check for thrown guitar
        if up and not prevUp:
            #winsound.PlaySound('slide_whistle_up.wav', winsound.SND_FILENAME)
            try:
                # Lists to hold what ops go where
                expOps = []
                mulOps = []
                addOps = []
                result = 0
                for i in range(len(operators)):
                    if operators[i] == '^':
                        expOps.append(i)
                    if operators[i] == '*':
                        mulOps.append(i)
                    elif operators[i] == '+':
                        addOps.append(i)

                # Perform ops in order of operations
                for i in range(len(expOps)):
                    expOp = expOps[len(expOps) - i - 1]
                    result = operands[expOp]**operands[expOp + 1]
                    operands[expOp] = result
                    operands.pop(expOp + 1)
                    shortenList(expOps, expOp)
                    shortenList(mulOps, expOp)
                    shortenList(addOps, expOp)

                for mulOp in mulOps:
                    result = operands[mulOp] * operands[mulOp + 1]
                    operands[mulOp] = result
                    operands.pop(mulOp + 1)
                    shortenList(mulOps, mulOp)
                    shortenList(addOps, mulOp)

                for addOp in addOps:
                    result = operands[addOp] + operands[addOp + 1]
                    operands[addOp] = result
                    operands.pop(addOp + 1)
                    shortenList(addOps, addOp)

                result = operands[0]
                ans = result

                outStr = outStr + " = " + str(result) + "\t\t\t        "
                if not outStr == " = 0" + "\t\t\t             ":
                    print(outStr)
                    print("\t\t\t\tOperation: " + opTable[opCounter], end="\r")

            #except:
            #	print("Invalid equation, clearing.")

            finally:
                i = 0
                j = 0
                sign = 1
                outStr = ""
                operands = [0]
                operators.clear()

        # Check for back button
        if GetButtons(state) & BTN_BIT_BACK and not GetButtons(
                prevState) & BTN_BIT_BACK:
            # Erase last character of operand or delete operator
            if operands[i] != 0 and j >= 0:
                operands[i] = int(operands[i] / 10)
                outStr = outStr[:-1]
                j -= 1
                if operands[i] == 0:
                    outStr = outStr + "0"

            elif operands[i] != 0 and j <= -1:
                operands[i] -= operands[i] % (10**(j + 2))
                j += 1
                outStr = outStr[:-1]

            elif outStr[-1:] == ".":
                outStr = outStr[:-1]
                j = len(str(operands[i])) - 1

            elif operands[i] == 0 and len(operators) >= 1:
                operands.pop(i)
                operators.pop(len(operators) - 1)
                i -= 1
                outStr = outStr[:-4]

            else:
                pass

            print(outStr + "         ", end='\r')
            #print("Operands: " + str(operands))
            #print("j: " + str(j))
            #print("Operators:" + str(operators))

        # Check for pad down button
        if GetButtons(state) & BTN_BIT_PAD_DOWN and not GetButtons(
                prevState) & BTN_BIT_PAD_DOWN:
            # Make negative
            if operands[i] != 0:
                operands[i] *= -1
                #outStr = outStr[:-(j+1)] + '-' + outStr[-(j+1):]
                outStr = negateOperand(outStr)
                sign = sign * -1

            #print(operands)
            print(outStr, end='\r')

        # Check for Start button
        if GetButtons(state) & BTN_BIT_START and not GetButtons(
                prevState) & BTN_BIT_START:
            # If no dot yet, add one
            if j >= 0:
                j = -1
                outStr = outStr + "."

            print(outStr, end='\r')

        prevState = state
        prevUp = up
        prevWhammyDown = whammyDown