Hi, please find an attached patch which enables basic keyboard support. You can't change level options yet, but it permits to browse menus and play without the use of a mouse. Yours truly, with love -- Jean-Yves Lamoureux
Index: monsterz.py =================================================================== --- monsterz.py (revision 137) +++ monsterz.py (working copy) @@ -512,7 +512,23 @@ self.speed = 1 self.new_level() self.oldticks = pygame.time.get_ticks() + self.keyboard_used = False + self.keyboard_x = 0 + self.keyboard_y = 0 + def keyboard_handle(self, key): + if (key == K_UP) and (self.keyboard_y != 0): + self.keyboard_y-=1 + if (key == K_DOWN) and (self.keyboard_y != BOARD_HEIGHT-1): + self.keyboard_y+=1 + if (key == K_LEFT) and (self.keyboard_x != 0): + self.keyboard_x-=1 + if (key == K_RIGHT) and (self.keyboard_x != BOARD_WIDTH-1): + self.keyboard_x+=1 + if (key == K_SPACE) and (self.keyboard_used == True): + self.clicks.append((self.keyboard_x,self.keyboard_y)) + self.keyboard_used = True + def get_random(self, no_special = False): if not no_special and randint(0, SPECIAL_FREQ) == 0: return ITEM_SPECIAL @@ -697,6 +713,7 @@ else: timer = 0 if timer > SCROLL_DELAY / 2: + self.keyboard_used = False global_xoff = 0 yoff = (SCROLL_DELAY - timer) * (SCROLL_DELAY - timer) global_yoff = yoff * 50 * 50 / SCROLL_DELAY / SCROLL_DELAY @@ -728,6 +745,7 @@ x, y = data.board2screen((i, j)) xoff, yoff = self.extra_offset[i][j] if self.lost_timer: + self.keyboard_used = False; d = LOST_DELAY - self.lost_timer xoff += (i * 2 - 7) * 4 * d / LOST_DELAY yoff += (j * 2 - 7) * 4 * d / LOST_DELAY @@ -774,6 +792,11 @@ # Draw selector if necessary if self.select: system.blit(data.selector, select_coord) + + # Draw keyboard selector around keyboard position + if(self.keyboard_used == True): + key_selected = (24 + self.keyboard_x * ITEM_SIZE, 24 + self.keyboard_y * ITEM_SIZE) + system.blit(data.selector, key_selected) def piece_draw(self, sprite, (x, y)): width = ITEM_SIZE @@ -1160,7 +1183,7 @@ if self.time <= 0: system.play('laugh') self.select = None - self.show_move = False + self.show_move = False self.lost_timer = LOST_DELAY return # Handle moves from the AI: @@ -1376,6 +1399,7 @@ msat = [0] * 4 marea = None + selected_text = 0 def iterate_menu(self): self.generic_draw() self.copyright_draw() @@ -1383,16 +1407,16 @@ shapes = [2, 3, 4, 0] messages = ['NEW GAME', 'HELP', 'SCORES', 'QUIT'] x, y = data.screen2board(pygame.mouse.get_pos()) - if y == 4 and 2 <= x <= 5: + if (y == 4 and 2 <= x <= 5) or self.selected_text == 0: marea = STATUS_NEW self.msat[0] = 255 - elif y == 5 and 2 <= x <= 5: + elif y == 5 and 2 <= x <= 5 or self.selected_text == 1: marea = STATUS_HELP self.msat[1] = 255 - elif y == 6 and 2 <= x <= 5: + elif y == 6 and 2 <= x <= 5 or self.selected_text == 2: marea = STATUS_SCORES self.msat[2] = 255 - elif y == 7 and 2 <= x <= 5: + elif y == 7 and 2 <= x <= 5 or self.selected_text == 3: marea = STATUS_QUIT self.msat[3] = 255 else: @@ -1421,6 +1445,14 @@ for event in pygame.event.get(): if self.generic_event(event): return + elif event.type == KEYDOWN and event.key == K_DOWN: + if self.selected_text < 3: + self.selected_text+=1 + elif event.type == KEYDOWN and event.key == K_UP: + if self.selected_text >=0: + self.selected_text-=1 + elif event.type == KEYDOWN and (event.key == K_SPACE or event.key == K_RETURN): + self.status = marea elif event.type == KEYDOWN and event.key == K_ESCAPE: system.play('whip') self.status = STATUS_QUIT @@ -1444,6 +1476,8 @@ nsat = [0] * 8 narea = None + selected_text = 0 + def iterate_new(self): items = settings.get('items') difficulty = settings.get('difficulty') @@ -1451,16 +1485,16 @@ self.copyright_draw() messages = ['CLASSIC', 'PUZZLE', '', 'TRAINING'] x, y = data.screen2board(pygame.mouse.get_pos()) - if y == 2 and 1 <= x <= 6: + if (y == 2 and 1 <= x <= 6) or self.selected_text==0: narea = GAME_CLASSIC self.nsat[0] = 255 - elif y == 3 and 1 <= x <= 5: + elif (y == 3 and 1 <= x <= 5) or self.selected_text==1: narea = GAME_PUZZLE self.nsat[1] = 255 #elif y == 4 and 1 <= x <= 4: # narea = GAME_QUEST # self.nsat[2] = 255 - elif y == 5 and 1 <= x <= 4: + elif (y == 5 and 1 <= x <= 4) or self.selected_text==2: narea = GAME_TRAINING self.nsat[3] = 255 elif (x, y) == (1, 6): @@ -1532,6 +1566,23 @@ if difficulty > 1: settings.set('difficulty', difficulty - 1) return + elif event.type == KEYDOWN and event.key == K_DOWN: + if self.selected_text < 2: + self.selected_text+=1 + elif event.type == KEYDOWN and event.key == K_UP: + if self.selected_text >=0: + self.selected_text-=1 + elif event.type == KEYDOWN and (event.key == K_SPACE or event.key == K_RETURN): + system.play('whip') + self.game = Game(type = narea) + self.status = STATUS_GAME + + elif event.type == KEYDOWN and event.key == K_RETURN: + system.play('whip') + self.game = Game(type = narea) + self.status = STATUS_GAME + return + elif event.type == MOUSEBUTTONDOWN and narea is not None: system.play('whip') self.game = Game(type = narea) @@ -1576,8 +1627,16 @@ return self.game.lost_timer = -1 return - elif event.type == KEYDOWN and (event.key == K_p or event.key == K_SPACE) and self.game.lost_timer >= 0: + elif event.type == KEYDOWN and (event.key == K_p) and self.game.lost_timer >= 0: self.game.pause() + elif event.type == KEYDOWN and (event.key == K_RETURN or event.key == K_SPACE) and self.game.splash: + system.play('whip') + self.game.splash = False + if self.game.lost_timer == -1: + system.play('whip') + self.status = STATUS_MENU + elif event.type == KEYDOWN: + self.game.keyboard_handle(event.key) elif event.type == MOUSEBUTTONDOWN: x, y = pygame.mouse.get_pos() if self.game.lost_timer >= 0:
Attachment:
signature.asc
Description: This is a digitally signed message part