# Practice Exercises for Keyboard ## 1 The program template contains a program designed to echo the message `"Pressed up arrow"` or `"Pressed down arrow"` whenever the appropriate key is pressed. Debug the program template and fix the program. [Keyboard debugging template](http://www.codeskulptor.org/#exercises_keyboard_debug_template.py) \-\-- [Keyboard debugging solution](http://www.codeskulptor.org/#exercises_keyboard_debug_solution.py) \-\-- [Keyboard debugging (Checker)](http://www.codeskulptor.org/iipp-practice-experimental/#exercises_keyboard_debug_template.py) --- ```py # Key board debugging - debug and fix the code below import simplegui message = "Welcome!" # Handler for keydown def keydown(key): global message if key == "up": # <======= KEY_MAP must be used message = "Up arrow" elif key == "down": # <======= KEY_MAP must be used message = "Down arrow" # Handler to draw on canvas def draw(canvas): canvas.draw_text(message, [50,112], 48, "Red") # Create a frame and assign callbacks to event handlers frame = simplegui.create_frame("Home", 300, 200) frame.set_draw_handler(draw) # Start the frame animation frame.start() ``` ## 2 Complete the program template below so that each press of the up arrow increases the radius of the white ball centered in the middle of the canvas by a small fixed amount and each press of the down arrow key decreases the radius of the ball by the same amount. Your added code should be placed in the keydown handler. (Note that `draw_circle` will throw an error if the radius of the circle is decreased to zero or less.) [Ball radius 1 template](http://www.codeskulptor.org/#exercises_keyboard_ball1_template.py) \-\-- [Ball radius 1 solution](http://www.codeskulptor.org/#exercises_keyboard_ball1_solution.py) \-\-- [Ball radius 1 (Checker)](http://www.codeskulptor.org/iipp-practice-experimental/#exercises_keyboard_ball1_template.py) --- ```py # Ball radius control - version 1 try: import simplegui except ModuleNotFoundError: import simplequi as simplegui WIDTH = 300 HEIGHT = 200 ball_radius = 50 BALL_RADIUS_INC = 3 # Handler for keydown def keydown(key): global ball_radius if key == simplegui.KEY_MAP['up']: ball_radius += BALL_RADIUS_INC elif key == simplegui.KEY_MAP['down']: ball_radius -= BALL_RADIUS_INC # Handler to draw on canvas def draw(canvas): # note that CodeSkulptor throws an error if radius is not positive canvas.draw_circle([WIDTH / 2, HEIGHT / 2], ball_radius, 1, "White", "White") # Create a frame and assign callbacks to event handlers frame = simplegui.create_frame("Home", 300, 200) frame.set_keydown_handler(keydown) frame.set_draw_handler(draw) # Start the frame animation frame.start() ``` ## 3 Complete the program template so that the program displays `"Space bar down"` on the canvas while the space bar is held down and `"Space bar up"` while the space bar is up. You will need to add code to both the keydown and keyup handlers. [Space bar template](http://www.codeskulptor.org/#exercises_keyboard_spacebar_template.py) \-\-- [Space bar solution](http://www.codeskulptor.org/#exercises_keyboard_spacebar_solution.py) \-\-- [Space bar (Checker)](http://www.codeskulptor.org/iipp-practice-experimental/#exercises_keyboard_spacebar_template.py) ## 4 **Challenge:** Complete the program template below so that holding down the up arrow key increases the radius of the white ball centered in the middle of the canvas by a small fixed amount each frame. Releasing the up arrow key causes that growth to cease. You will need to add code to the keydown and keyup handlers as well as the draw handler. [Ball radius 2 template](http://www.codeskulptor.org/#exercises_keyboard_ball2_template.py) \-\-- [Ball radius 2 solution](http://www.codeskulptor.org/#exercises_keyboard_ball2_solution.py) \-\-- [Ball radius 2 (Checker)](http://www.codeskulptor.org/iipp-practice-experimental/#exercises_keyboard_ball2_template.py)