def ProcessInput(self, events, pressed_keys):
for event in events:
if event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN:
# Move to the next scene when the user pressed Enter
pass
if event.type == pygame.MOUSEBUTTONDOWN:
self.start_button.isClicked(event)
self.help_button.isClicked(event)
self.difficulty_button.isClicked(event)
if event.type == pygame.MOUSEBUTTONUP:
self.start_button.isClicked(event)
self.help_button.isClicked(event)
self.difficulty_button.isClicked(event)
if event.type == pygame.MOUSEMOTION:
self.start_button.isHovered(event)
self.help_button.isHovered(event)
self.difficulty_button.isHovered(event)
python类KEYDOWN的实例源码
def Kaboom(score):
init()
gameDisplay.blit(GameOver,(382,175))
pygame.draw.rect(gameDisplay, white, (200, 400, 550, 50))
text = smallfont.render("Press [RETURN] to continue and [Q] to quit", True, darkBlue)
gameDisplay.blit(text, [370,400])
text = smallfont.render("Score : " + str(score), True, red)
gameDisplay.blit(text, [450,420])
pygame.display.update()
gameExit = True
while gameExit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
gameExit = False
gameloop()
if event.key == pygame.K_q:
pygame.quit()
def main():
pygame.init()
screen = pygame.display.set_mode((500,500))
screen.fill((255, 0, 0))
s = pygame.Surface(screen.get_size(), pygame.SRCALPHA, 32)
pygame.draw.line(s, (0,0,0), (250, 250), (250+200,250))
width = 1
for a_radius in range(width):
radius = 200
pygame.gfxdraw.aacircle(s, 250, 250, radius-a_radius, (0, 0, 0))
screen.blit(s, (0, 0))
pygame.display.flip()
try:
while 1:
event = pygame.event.wait()
if event.type == pygame.QUIT:
break
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE or event.unicode == 'q':
break
pygame.display.flip()
finally:
pygame.quit()
def program_loop(self):
while not process_ev.process_events():
self.update()
self.draw()
# Handeling pygame events
#def process_events():
# for event in pygame.event.get():
# if event.type == pygame.QUIT:
# return True
# #elif event.type == pygame.KEYDOWN:
# # game.Player1.key_event(event)
# return False
def ProcessInput(self, events, pressed_keys):
for event in events:
if event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN:
# Move to the next scene when the user pressed Enter
pass
if event.type == pygame.MOUSEBUTTONDOWN:
for button in self.buttons:
button.isClicked(event)
if event.type == pygame.MOUSEBUTTONUP:
for button in self.buttons:
button.isClicked(event)
if event.type == pygame.MOUSEMOTION:
for button in self.buttons:
button.isHovered(event)
def ProcessInput(self, events, pressed_keys):
"""
Process Input from user
Inherited from SceneBase
Args: self
events - list of pygame events
pressed_keys
"""
for event in events:
if event.type == pygame.KEYDOWN and event.key == pygame.K_RETURN:
# Move to the next scene when the user pressed Enter
pass
if event.type == pygame.MOUSEBUTTONDOWN:
self.easy_button.isClicked(event)
self.adv_button.isClicked(event)
if event.type == pygame.MOUSEBUTTONUP:
self.easy_button.isClicked(event)
self.adv_button.isClicked(event)
if event.type == pygame.MOUSEMOTION:
self.easy_button.isHovered(event)
self.adv_button.isHovered(event)
def handleEvent(self, event):
if self.mode:
self.mode.handleEvent(event)
if event.type == pg.KEYDOWN:
if event.key == pg.K_ESCAPE:
self.pause = not self.pause
if self.pause:
self.messageScene("pause")
else:
self.messageScene("unpause")
if event.type == self.SCENE_EVENT:
if event.category == "start_game":
if event.data == "solo":
self.mode = SinglePlayer(self.screen)
self.mode.startGame()
if event.data == "coop":
self.mode = MultiPlayer(self.screen)
self.mode.startGame()
if event.category == "no_mode":
self.mode = None
if event.category == "screen":
self.screen = pg.display.get_surface()
def handleEvent(self, event):
self.collisionEngine.eventHandler(event)
self.scene.handleEvent(event)
if event.type == pg.KEYDOWN:
if event.key == pg.K_RETURN:
self.camera.duration = 0
if event.type == self.SCENE_EVENT:
if event.category == "complete":
self._nextScene()
if event.category == "transition":
self._handleTransition(event)
if event.category == "death":
self._handleDeath()
if event.category == "revive":
self._handleRevive()
if event.category == "pause":
if self.lives != 0:
self.pause = True
self.messageMenu("transition", "pause_menu")
if event.category == "unpause":
self.pause = False
self._loadUI(self.maxLives, self.lives)
def handleEvent(self, event):
if event.type == pg.KEYDOWN:
if event.key == pg.K_UP:
self.arrow.moveUp()
if event.key == pg.K_DOWN:
self.arrow.moveDown()
if event.key == pg.K_RETURN:
self.audio.state = "enter"
if self.arrow.index == 0:
self.messageMenu("transition", "blank_menu")
self.messageCutScene("transition", "office_cutscene")
if self.arrow.index == 1:
self.messageMenu("transition", "blank_menu")
self.messageScene("start_game", "coop")
if self.arrow.index == 2:
self.messageMenu("transition", "options_menu")
if self.arrow.index == 3:
quit()
def handle_event(self, event):
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.update('left')
if event.key == pygame.K_RIGHT:
self.update('right')
if event.key == pygame.K_UP:
self.update('up')
if event.key == pygame.K_DOWN:
self.update('down')
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT:
self.update('stand_left')
if event.key == pygame.K_RIGHT:
self.update('stand_right')
if event.key == pygame.K_UP:
self.update('stand_up')
if event.key == pygame.K_DOWN:
self.update('stand_down')
def handle_events(*args):
settings_window, camera, scroll, done, dims, screen, bodies, G, COR = args
for event in pg.event.get():
if event.type == pg.VIDEORESIZE:
width, height = event.w, event.h
dims, screen = V2(width, height), pg.display.set_mode((width, height), pg.RESIZABLE)
elif event.type == pg.KEYDOWN:
scroll.key(event.key, 1)
camera.key_down(event.key)
elif event.type == pg.KEYUP:
scroll.key(event.key, 0)
camera.key_up(event.key)
elif event.type == pg.MOUSEBUTTONDOWN:
handle_mouse(settings_window, camera, event, bodies, dims, G, COR, scroll)
done |= event.type == pg.QUIT
return done, dims, screen
def notify(self, event):
if self.isActivated:
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.optionList[self.selector.selectedIndex].deselect()
self.selector.moveUp()
self.scrollUp()
self.optionList[self.selector.selectedIndex].select()
elif event.key == pygame.K_DOWN:
self.optionList[self.selector.selectedIndex].deselect()
self.selector.moveDown()
self.scrollDown()
self.optionList[self.selector.selectedIndex].select()
elif event.key == pygame.K_SPACE:
self.chosenOptionIndex = self.selectedIndex()
self.isActivated = False
elif event.key == pygame.K_RETURN:
self.chosenOptionIndex = self.selectedIndex()
self.isActivated = False
def tick(self):
"""
Pulls all keyboard events from the event queue and processes them according to our keyboard_registry/descriptions.
Triggers events for all registered keys like: 'key_down.[desc]' (when pressed) and 'key_up.[desc]' (when released),
where desc is the lowercase string after `pygame.K_`... (e.g. 'down', 'up', etc..).
"""
events = pygame.event.get([pygame.KEYDOWN, pygame.KEYUP])
for e in events:
# a key was pressed that we are interested in -> set to True or False
if e.key in self.keyboard_registry:
if e.type == pygame.KEYDOWN:
self.keyboard_registry[e.key] = True
self.trigger_event("key_down." + self.descriptions[e.key])
else:
self.keyboard_registry[e.key] = False
self.trigger_event("key_up." + self.descriptions[e.key])
def manager(field):
put_tile = False
for event in pygame.event.get():
if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.dict["key"] == pygame.K_ESCAPE):
sys.exit()
elif event.type == pygame.KEYDOWN and (event.dict["key"] == pygame.K_RIGHT or event.dict["key"] == pygame.K_d):
field.change_right_move(True)
elif event.type == pygame.KEYUP and (event.dict["key"] == pygame.K_RIGHT or event.dict["key"] == pygame.K_d):
field.change_right_move(False)
elif event.type == pygame.KEYDOWN and (event.dict["key"] == pygame.K_LEFT or event.dict["key"] == pygame.K_q):
field.change_left_move(True)
elif event.type == pygame.KEYUP and (event.dict["key"] == pygame.K_LEFT or event.dict["key"] == pygame.K_q):
field.change_left_move(False)
elif event.type == pygame.MOUSEBUTTONDOWN and event.dict["button"] == 4:
field.change_tile(1)
elif event.type == pygame.MOUSEBUTTONDOWN and event.dict["button"] == 5:
field.change_tile(-1)
elif event.type == pygame.MOUSEBUTTONDOWN and event.dict["button"] == 1:
field.put_tile()
def manager(jeff, field, frame, level_select):
for event in pygame.event.get():
if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.dict["key"] == pygame.K_ESCAPE):
sys.exit()
elif event.type == pygame.KEYDOWN and jeff.is_dead() and event.dict["key"] == pygame.K_r:
jeff = Jeff.Jeff([300, Constant.GROUND_HEIGHT - 50])
field.reload_level()
elif event.type == pygame.KEYDOWN and (jeff.is_dead() or field.is_level_ended()) and event.dict["key"] == pygame.K_m:
jeff = Jeff.Jeff([300, Constant.GROUND_HEIGHT - 50])
frame = "MENU"
elif event.type == pygame.KEYDOWN and field.is_level_ended() and event.dict["key"] == pygame.K_n:
next_level = level_select.get_next_level(field.get_level_file())
if next_level != "":
jeff = Jeff.Jeff([300, Constant.GROUND_HEIGHT - 50])
field.load_level(next_level)
elif event.type == pygame.KEYDOWN and event.dict["key"] == pygame.K_SPACE:
jeff.jump(True)
elif event.type == pygame.KEYUP and event.dict["key"] == pygame.K_SPACE:
jeff.jump(False)
return jeff, frame
def getEvent():
"""
retrieve events from the clock, such as button clicks
:return (tuple): (string(messageName), messageParam0, ...)
"""
for event in pygame.event.get():
if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
return ('end', 0)
elif event.type == pygame.KEYDOWN and event.key == 257:
return ('buttonClick', 1)
elif event.type == pygame.KEYDOWN and event.key == 258:
return ('buttonClick', 2)
elif event.type == pygame.KEYDOWN and event.key == 259:
return ('buttonClick', 4)
#elif event.type == pygame.KEYDOWN:
# print event.key
return None
def update( self, dt, fps=8 ):
self.display_time( dt.hour, dt.minute )
pygame.display.flip()
# handle exits
was_quit = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
was_quit = True
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
was_quit = True
if not was_quit:
self.clock.tick( fps )
return was_quit
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
lhv = len(self.home_square.value)
self.changed_since_check = True
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
self.home_square.value = self.home_square.value[0:lhv - 1]
elif not self.board.grid[4][18]:
char = event.unicode
if len(char) > 0 and lhv < 2 and char in self.digits:
self.home_square.value += char
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
elif event.type == pygame.MOUSEMOTION and self.drag:
if self.board.grid[4][18]:
self.home_square.value = ""
self.home_square.update_me = True
elif event.type == pygame.MOUSEBUTTONUP:
for each in self.board.units:
if each.is_door is True:
self.board.all_sprites_list.move_to_front(each)
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
char = event.unicode
if len(char) > 0:
if char == self.middle.value:
if len(self.right.value) > 0:
self.left.value += char
next_letter = self.right.value[0]
self.middle.value = next_letter
self.right.value = self.right.value[1:]
self.kbrd.get_btns_to_hl(next_letter)
self.mainloop.sfx.play(15)
elif len(self.middle.value) > 0:
self.left.value += char
self.middle.value = ""
self.check_entry()
for each in [self.left, self.middle, self.right]:
each.update_me = True
else:
self.mainloop.sfx.play(16)
self.mainloop.redraw_needed[0] = True
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
char = event.unicode
if len(char) > 0:
if char == self.middle.value:
if len(self.right.value) > 0:
self.left.value += char
next_letter = self.right.value[0]
self.middle.value = next_letter
self.right.value = self.right.value[1:]
self.kbrd.get_btns_to_hl(next_letter)
self.mainloop.sfx.play(15)
elif len(self.middle.value) > 0:
self.left.value += char
self.middle.value = ""
self.check_entry()
for each in [self.left, self.middle, self.right]:
each.update_me = True
else:
self.mainloop.sfx.play(16)
self.mainloop.redraw_needed[0] = True
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
char = event.unicode
if len(char) > 0:
if char == self.middle.value:
if len(self.right.value) > 0:
self.left.value += char
next_letter = self.right.value[0]
self.middle.value = next_letter
self.right.value = self.right.value[1:]
self.kbrd.get_btns_to_hl(next_letter)
self.mainloop.sfx.play(15)
elif len(self.middle.value) > 0:
self.left.value += char
self.middle.value = ""
self.check_entry()
for each in [self.left, self.middle, self.right]:
each.update_me = True
else:
self.mainloop.sfx.play(16)
self.mainloop.redraw_needed[0] = True
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
lhv = len(self.home_square.value)
self.changed_since_check = True
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
self.home_square.value = self.home_square.value[0:lhv - 1]
elif not self.board.grid[4][18]:
char = event.unicode
if len(char) > 0 and char in self.digits:
self.home_square.value = char
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
elif event.type == pygame.MOUSEMOTION and self.drag:
if self.board.grid[4][18]:
self.home_square.value = ""
self.home_square.update_me = True
elif event.type == pygame.MOUSEBUTTONUP:
for each in self.board.units:
if each.is_door is True:
self.board.all_sprites_list.move_to_front(each)
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
lhv = len(self.home_square.value)
self.changed_since_check = True
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
self.home_square.value = self.home_square.value[0:lhv - 1]
elif not self.board.grid[4][16]:
char = event.unicode
if len(char) > 0 and char in self.digits:
self.home_square.value = char
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
elif event.type == pygame.MOUSEMOTION and self.drag:
if self.board.grid[4][16]:
self.home_square.value = ""
self.home_square.update_me = True
elif event.type == pygame.MOUSEBUTTONUP:
for each in self.board.units:
if each.is_door is True:
self.board.all_sprites_list.move_to_front(each)
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and not self.correct:
lhv = len(self.home_square.value)
self.changed_since_check = True
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
self.home_square.value = self.home_square.value[0:lhv - 1]
else:
char = event.unicode
if (len(char) > 0 and lhv < 5 and char in self.digits):
self.home_square.value += char
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
elif event.type == pygame.MOUSEBUTTONUP:
self.home_square.update_me = True
if self.board.active_ship == self.home_square.unit_id:
self.home_square.perm_outline_width = 5
self.home_square = self.ans_h
self.board.active_ship = self.home_square.unit_id
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
lhv = len(self.home_square.value)
self.changed_since_check = True
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
self.home_square.value = self.home_square.value[0:lhv - 1]
else:
char = event.unicode
if char in self.digits:
if len(char) > 0 and lhv < self.max_len:
self.home_square.value += char
else:
self.home_square.value = char
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
def handle(self, event):
gd.BoardGame.handle(self, event) # send event handling up
if self.show_msg == False:
if event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN:
lhv = len(self.home_square.value)
self.changed_since_check = True
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
self.home_square.value = self.home_square.value[0:lhv - 1]
else:
char = event.unicode
if char in self.digits:
if len(char) > 0 and lhv < 3:
self.home_square.value += char
else:
self.home_square.value = char
self.home_square.update_me = True
self.mainloop.redraw_needed[0] = True
def onKeyDown(self, event):
if not self.select_item:
if event.type == pygame.KEYDOWN and event.key == pygame.K_DELETE:
pass
elif event.type == pygame.KEYDOWN and event.key != pygame.K_RETURN and event.key != pygame.K_KP_ENTER and event.key != pygame.K_TAB:
lhv = len(self.value)
if event.key == pygame.K_BACKSPACE:
if lhv > 0:
if self.ls.lang.ltr_text:
self.value = self.value[0:lhv - 1]
else:
self.value = self.value[1:lhv]
else:
char = event.unicode
if len(char) > 0 and lhv < 21:
if self.ls.lang.ltr_text:
self.value = self.value + char
else:
self.value = char + self.value
self.ls.reload_selects()
self.ls.set_scrollbar_top(self.ls.scroll_min_top)
elif event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER or event.key == pygame.K_TAB:
self.nextFocus()
self.update_trigger()
def touch_handler(self, event):
#handle keypresses...
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_BACKSPACE:
self.panel.text.del_letter()
elif event.key == pygame.K_RETURN or event.key == pygame.K_KP_ENTER:
self.panel.new_line()
elif event.key == pygame.K_ESCAPE:
self.close(None)
elif event.key == pygame.K_LEFT:
self.panel.text.cursor_left()
elif event.key == pygame.K_RIGHT:
self.panel.text.cursor_right()
elif len(event.unicode) > 0:
self.panel.text.add_letter(event.unicode)
super(Keyboard,self).touch_handler(event)
def show(self):
"""
Shows the game over panel.
"""
self.display.set_screen_caption('Game Over')
for event in pygame.event.get():
if (event.type == pygame.KEYDOWN):
if (event.key == pygame.K_RETURN):
return (True, "main_menu", None)
if (event.key == pygame.K_s):
return (True, "save_progress", None)
if (event.type == pygame.QUIT):
return (False, '', None)
self.display.display_single_image(self.resources['game_over_msg'],
self.resources['game_over_pos'])
self.display.display_single_image(self.resources['game_over_char'],
self.resources['game_over_pos'])
self.display.display_single_image(self.resources['press_enter'],
self.resources['press_enter_pos'])
self.display.display_single_image(self.resources['save_msg'],
self.resources['save_msg_pos'])
return (True, 'game_over', None)
def test_input(self):
i = inputs.Input()
test_inputs = [(pygame.KEYDOWN, {'key':pygame.K_1}),
(pygame.KEYDOWN, {'key':pygame.K_2}),
(pygame.KEYDOWN, {'key':pygame.K_2}),
(pygame.KEYDOWN, {'key':pygame.K_UP}),
(pygame.KEYDOWN, {'key':pygame.K_LEFT}),
(pygame.KEYUP, {'key':pygame.K_r}),
# (pygame.KEYDOWN, {'key':pygame.K_q})
]
for e in [pygame.event.Event(*x) for x in test_inputs]:
i.handle_events(e)
self.assertEqual(i.get_swcha(), 0xAF)
self.assertEqual(i.get_swchb(), 0x7F)
self.assertEqual(i.get_paddle0(), 0x1)
self.assertEqual(i.get_input7(), 0xFF)