From 00bfc53b7bdd1ffa436f417d43709e3fb28292ff Mon Sep 17 00:00:00 2001 From: Sakse Dalum Date: Mon, 20 Aug 2012 19:23:10 +0200 Subject: [PATCH 1/2] Added the spacecraft to level 1, fixed some bugs when lifting arrow blocks. --- robotgame/block.py | 11 +++++++---- robotgame/level1.py | 27 +++++++++++++++++++++++---- robotgame/loader.py | 24 ++++++++++++++++++------ 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/robotgame/block.py b/robotgame/block.py index a4d76f0..16f001b 100644 --- a/robotgame/block.py +++ b/robotgame/block.py @@ -33,11 +33,12 @@ import copy class Block(worldobject.WorldObject): def __init__(self, level, x, y, img_str='block1', movable=False, visible=True, - width=1, height=1, blit_area=None): + width=1, height=1, blit_area=None, + blocking=True, z=0): self.__dict__.update(locals()) - worldobject.WorldObject.__init__(self, level, x, y, + worldobject.WorldObject.__init__(self, level, x, y, z=z, movable=movable, visible=visible, - blit_area=blit_area) + blit_area=blit_area, blocking=blocking) for i in range(width): for j in range(height): @@ -119,6 +120,7 @@ class ArrowBlock(Block): self.anim = 'arrow_up' if direction == (0, 1): self.anim = 'arrow_down' + self.img_str = self.anim def activate(self, setting): self.movable = True @@ -148,7 +150,8 @@ class ArrowBlock(Block): worldobject.WorldObject.update(self, e, t, dt) def draw(self, window): - self.img = self.level.imgs[self.anim][int(self.frame)] + if not self.holder: + self.img = self.level.imgs[self.anim][int(self.frame)] Block.draw(self, window) class RisingBlock(Block): diff --git a/robotgame/level1.py b/robotgame/level1.py index b03e062..6fba1a1 100644 --- a/robotgame/level1.py +++ b/robotgame/level1.py @@ -62,9 +62,28 @@ class Level1(level.Level): self.tiles.append( tile.Tile(self, i*64, j*48, self.imgs['ground1'])) - self.player.set_pos(64 * 15, 48 * 30) + start_pos = 7 * 64, 34 * 48 + + self.player.set_pos(*start_pos) self.player.set_init_pos() + self.objects.append(block.Block(self, start_pos[0] - 2 * 64, + start_pos[1] + 48, + self.imgs['spacecraft'], z=16)) + self.objects.append(block.InvisBlock(self, start_pos[0] - 2 * 64, + start_pos[1])) + self.objects.append(block.InvisBlock(self, start_pos[0] - 64, + start_pos[1])) + self.objects.append(block.InvisBlock(self, start_pos[0] - 64, + start_pos[1] + 48)) + self.objects.append(block.InvisBlock(self, start_pos[0], + start_pos[1] + 48)) + + self.add_tile(start_pos[0] + 4 * 64, start_pos[1] - 3 * 48, + 'indoor%d' % random.randint(1, 6), blocking=False) + self.add_tile(start_pos[0] + 2 * 64, start_pos[1] - 7 * 48, + 'indoor%d' % random.randint(1, 6), blocking=False) + for i in range(self.size[0] / 64): if not i % 3: self.objects.append(block.Block(self, i * 64, @@ -536,14 +555,14 @@ class Level1(level.Level): class CompletionBlock(block.Block): def __init__(self, level, x, y, task, number): self.__dict__.update(locals()) - block.Block.__init__(self, level, x, y) + block.Block.__init__(self, level, x, y, blocking=False) def update(self, e, t, dt): - self.img = self.level.imgs['symbol%02d-0016' % (self.task + 12)] + self.img = self.level.imgs['symbol%02d-0018' % (self.task + 12)] for t in range(1, 4): if (self.level.task_completions[-t:] == self.level.solution[:t] and t >= self.number): - self.img = self.level.imgs['symbol%02d-0018' % (self.task + 12)] + self.img = self.level.imgs['symbol%02d-0019' % (self.task + 12)] break class Wheel(block.Block): diff --git a/robotgame/loader.py b/robotgame/loader.py index 8189918..0f2fdc4 100644 --- a/robotgame/loader.py +++ b/robotgame/loader.py @@ -40,12 +40,18 @@ class Loader(object): self.imgs[o] = pygame.image.load(os.path.join( self.directory, 'tiles', '%s.png' % o)) - for o in range(1, 18): + for o in range(1, 13): for i in range(16, 19): self.imgs['symbol%02d-%04d' % (o, i)] = ( pygame.image.load(os.path.join( self.directory, 'symbols', 'blocks', 'block%02d-%04d.png' % (o, i)))) + for o in range(13, 18): + for i in range(16, 20): + self.imgs['symbol%02d-%04d' % (o, i)] = ( + pygame.image.load(os.path.join( + self.directory, 'symbols', 'blocks', + 'block%02d-%04d.png' % (o, i)))) for o in range(1, 7): self.imgs['indoor%d' % o] = pygame.image.load(os.path.join( @@ -59,8 +65,9 @@ class Loader(object): self.directory, 'blocks', '%s.png' % o)) self.imgs['lasersource_left'] = pygame.transform.flip( self.imgs['lasersource_right'], 1, 0) - - l = ['hole', 'well', 'wall', 'wall_outside', 'intro-screen'] + + l = ['hole', 'well', 'wall', 'wall_outside', 'intro-screen', + 'spacecraft'] for o in l: self.imgs[o] = pygame.image.load(os.path.join( self.directory, '%s.png' % o)) @@ -136,12 +143,18 @@ class Loader(object): if anim in ('arrow_left',): img = pygame.transform.flip(img, 1, 0) + if (anim in ('arrow_left', 'arrow_right', + 'arrow_up', 'arrow_down') + and len(self.imgs[anim]) >= 16): + self.imgs[anim + '_lifted'] = img + continue + self.imgs[anim].append(img) ####### PLAYER ####### for anim, directory in ( - [('idle_up', os.path.join('robot_idle', 'up')), + (('idle_up', os.path.join('robot_idle', 'up')), ('idle_down', os.path.join('robot_idle', 'down')), ('idle_right', os.path.join('robot_idle', 'right')), ('idle_left', os.path.join('robot_idle', 'right')), @@ -187,8 +200,7 @@ class Loader(object): 'left_up')), ('lever_left_down', os.path.join('robot_lever', 'vertical', 'right_down')) - ] - ): + )): self.imgs['robot_' + anim] = [] From d37bca5bc23bf8a3461f959987dff0cf8120787d Mon Sep 17 00:00:00 2001 From: Sakse Dalum Date: Mon, 20 Aug 2012 19:51:02 +0200 Subject: [PATCH 2/2] Added some prettier graphics to be used as laser beams. --- resources/graphics/laser_beam_horisontal.png | Bin 0 -> 210 bytes resources/graphics/laser_beam_vertical.png | Bin 0 -> 203 bytes robotgame/laser.py | 12 +++++++++--- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 resources/graphics/laser_beam_horisontal.png create mode 100644 resources/graphics/laser_beam_vertical.png diff --git a/resources/graphics/laser_beam_horisontal.png b/resources/graphics/laser_beam_horisontal.png new file mode 100644 index 0000000000000000000000000000000000000000..8d207802a4acfe5048af76363cd1448d8082b46c GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^96-#| zgW!U_%O?XxI14-?iy0WWg+Z8+Vb&Z8pdfpRr>`sf9S#veBbBZ#EmA-s$r9Iy66gHf z+|;}h2Ir#G#FEq$h4Rdj3k literal 0 HcmV?d00001 diff --git a/resources/graphics/laser_beam_vertical.png b/resources/graphics/laser_beam_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..08a8d81c31c460b89ffc8f20c213d83ce20b5855 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1c!3HD^Kbl$tDaPU;cPEB*=VV?2Ic!PZ?k)`f zL2$v|<&%LToCO|{#S9GG!XV7ZFl&wkP>{XE)7O>#4u^=Kk+^BfQy!p@WQl7;iF1B# zZfaf$gL6@8Vo7R>LV0FMhJw4NZ$Nk>pEyvFnx~6n2*>s0ALkD&_&L9E;ahv=!}S_# pPaa`l?UxW>(9>x5op4Qyabpm-=Y~_y{s46_c)I$ztaD0e0sw@>Iwt@C literal 0 HcmV?d00001 diff --git a/robotgame/laser.py b/robotgame/laser.py index cc68f85..c02a8aa 100644 --- a/robotgame/laser.py +++ b/robotgame/laser.py @@ -66,18 +66,23 @@ class Laser(worldobject.WorldObject): self.start_dark = 0 + self.surf = pygame.Surface(self.level.game.window.get_size(), + pygame.SRCALPHA) + def update(self, e, t, dt): self.start_dark = (t % 200) / 100 worldobject.WorldObject.update(self, e, t, dt) def draw(self, window): + self.surf.fill((0, 0, 0, 0)) + colors = [(155, 0, 0), (255, 0, 0)] c = self.start_dark if self.x0d != self.x1d: length = self.x1d - self.x0d for i in range(0, length, 8): x0d = self.x0d + i - pygame.draw.line(window, colors[c], + pygame.draw.line(self.surf, colors[c], (x0d - self.level.camera_x, self.y0d - self.level.camera_y), (x0d + min(8, length - i) - self.level.camera_x, @@ -87,10 +92,11 @@ class Laser(worldobject.WorldObject): length = self.y1d - self.y0d for i in range(0, length, 8): y0d = self.y0d + i - pygame.draw.line(window, colors[c], + pygame.draw.line(self.surf, colors[c], (self.x0d - self.level.camera_x, y0d - self.level.camera_y), (self.x0d - self.level.camera_x, y0d + min(8, length - i) - self.level.camera_y), 2) c ^= 1 - + + window.blit(self.surf, (0, 0))