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