diff --git a/Background.py b/Background.py new file mode 100644 index 0000000..50dac2a --- /dev/null +++ b/Background.py @@ -0,0 +1,40 @@ +""" +Background entity class +""" + + +import pygame +import os + +from BackgroundLayer import BackgroundLayer + + +class Background(): + imgDir = os.path.join(os.path.dirname(__file__), 'data') + backgroundImage = pygame.image.load(os.path.join(imgDir, 'background.png'))#.convert() + backgroundImages = ( + pygame.transform.scale(backgroundImage.subsurface((0, 0, 800, 150)), (3200, 600)), + pygame.transform.scale(backgroundImage.subsurface((0, 150, 800, 150)), (3200, 600)), + pygame.transform.scale(backgroundImage.subsurface((0, 300, 800, 150)), (3200, 600)), + ) + for image in backgroundImages: + image.set_colorkey((255,0,255)) + + def __init__(self, mainGameClass): + pygame.sprite.Sprite.__init__(self) + + self.layers = ( + BackgroundLayer(Background.backgroundImages[0], mainGameClass, 0.25), + BackgroundLayer(Background.backgroundImages[1], mainGameClass, 0.5), + BackgroundLayer(Background.backgroundImages[2], mainGameClass, 1), + ) + + + def update(self): + for layer in self.layers: + layer.update() + + + def draw(self, surface): + for layer in self.layers: + layer.draw(surface) diff --git a/BackgroundLayer.py b/BackgroundLayer.py new file mode 100644 index 0000000..79a4fed --- /dev/null +++ b/BackgroundLayer.py @@ -0,0 +1,27 @@ +""" +Background layer entity class +""" + + +import pygame + +from BackgroundLayerFrame import BackgroundLayerFrame + + +class BackgroundLayer(): + def __init__(self, image, mainGameClass, speedMultiplier): + offset = image.get_width() + + self.frames = pygame.sprite.Group() + + self.frames.add(BackgroundLayerFrame(image, mainGameClass, (0, 0), speedMultiplier)) + self.frames.add(BackgroundLayerFrame(image, mainGameClass, (offset, 0), speedMultiplier)) + + + def update(self): + for frame in self.frames: + frame.update() + + + def draw(self, surface): + self.frames.draw(surface) diff --git a/BackgroundLayerFrame.py b/BackgroundLayerFrame.py new file mode 100644 index 0000000..3c8686e --- /dev/null +++ b/BackgroundLayerFrame.py @@ -0,0 +1,29 @@ +""" +Background layer frame entity class +""" + + +import pygame + + +class BackgroundLayerFrame(pygame.sprite.Sprite): + def __init__(self, image, mainGameClass, offset, speedMultiplier): + pygame.sprite.Sprite.__init__(self) + + self.image = image + self.mainGameClass = mainGameClass + self.speedMultiplier = speedMultiplier + + self.rect = self.image.get_rect() + self.rect.center = (mainGameClass.getScreenWidth()/2 + offset[0], + mainGameClass.getScreenHeight()/2 + offset[1]) + + self.__doubleX = float(self.rect.x) + + + def update(self): + self.__doubleX -= self.mainGameClass.getGameSpeed() * self.speedMultiplier + if self.__doubleX < -self.rect.width: + self.__doubleX += self.rect.width*2 + + self.rect.x = self.__doubleX diff --git a/Cloud.py b/Cloud.py index b327d3f..e25285d 100644 --- a/Cloud.py +++ b/Cloud.py @@ -23,8 +23,6 @@ class Cloud(pygame.sprite.Sprite): mainGameClass.getScreenHeight()/2-100)+50*(2-cloudType)) self.speed = cloudType*mainGameClass.getGameSpeed() / 6 - - self.__doubleX = float(self.rect.x) diff --git a/Drakora.pyw b/Drakora.pyw index 16e9a65..f478570 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -5,9 +5,11 @@ Main game class import pygame import random +import os from collections import deque +from Background import Background from Player import Player from StandingEnemy import StandingEnemy from FlyingEnemy import FlyingEnemy @@ -57,6 +59,8 @@ class Drakora(): def newGame(self): + self.background = Background(self) + for enemy in self.enemies: enemy.kill() @@ -102,7 +106,7 @@ class Drakora(): self.targetFps = 120 - self.floorHeight = 50 + self.floorHeight = 64 self.players = pygame.sprite.Group() self.floors = pygame.sprite.Group() @@ -120,7 +124,6 @@ class Drakora(): self.isGodmode = False self.drawBoxes = False - font = pygame.font.match_font('liberation mono') self.fontScore = pygame.font.Font(font, 32) self.fontMessage = pygame.font.Font(font, 56) @@ -153,7 +156,8 @@ class Drakora(): def render(self): - self.screen.fill((102, 153, 255)) + # self.screen.fill((102, 153, 255)) + self.background.draw(self.screen) for cloudGroup in self.cloudGroups: cloudGroup.draw(self.screen) self.enemies.draw(self.screen) self.players.draw(self.screen) @@ -287,6 +291,7 @@ class Drakora(): self.doCheats() if not self.isGameOver and not self.isPaused: + self.background.update() for cloudGroup in self.cloudGroups: cloudGroup.update() self.enemies.update() self.players.update() diff --git a/Floor.py b/Floor.py index c06b552..4cfd86e 100644 --- a/Floor.py +++ b/Floor.py @@ -11,7 +11,7 @@ class Floor(pygame.sprite.Sprite): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((mainGameClass.getScreenWidth(), mainGameClass.getFloorHeight()*101)) - self.image.fill((255, 204, 102)) + self.image.fill((255, 229, 180)) self.rect = self.image.get_rect() self.rect.center = (mainGameClass.getScreenWidth()/2, mainGameClass.getScreenHeight() + diff --git a/FlyingEnemy.py b/FlyingEnemy.py index 990ff70..ed16cce 100644 --- a/FlyingEnemy.py +++ b/FlyingEnemy.py @@ -22,6 +22,7 @@ class FlyingEnemy(Enemy): for image in images: image.set_colorkey((255,0,255)) + def __init__(self, mainGameClass): Enemy.__init__(self, mainGameClass) diff --git a/Player.py b/Player.py index ee06e49..52594db 100644 --- a/Player.py +++ b/Player.py @@ -34,12 +34,12 @@ class Player(pygame.sprite.Sprite): pygame.transform.scale(playerImage.subsurface((0, 72, 16, 16)), (64, 64)), pygame.transform.scale(playerImage.subsurface((16, 72, 16, 16)), (64, 64)), ) - - + for array in (walkImages, upImages, downImages, crouchImages): for image in array: image.set_colorkey((255,0,255)) + def __init__(self): pygame.sprite.Sprite.__init__(self) diff --git a/StandingEnemy.py b/StandingEnemy.py index 66fc0e9..d5f923d 100644 --- a/StandingEnemy.py +++ b/StandingEnemy.py @@ -64,6 +64,7 @@ class StandingEnemy(Enemy): ), ) + def __init__(self, mainGameClass): Enemy.__init__(self, mainGameClass) diff --git a/data/background.png b/data/background.png index 695147c..1c059eb 100644 Binary files a/data/background.png and b/data/background.png differ diff --git a/data/background.xcf b/data/background.xcf index 802794a..71c3d71 100644 Binary files a/data/background.xcf and b/data/background.xcf differ