diff --git a/Background.py b/Background.py new file mode 100644 index 0000000..92bda5e --- /dev/null +++ b/Background.py @@ -0,0 +1,38 @@ +""" +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)), + ) + 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.5), + BackgroundLayer(Background.backgroundImages[1], 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..e7fe2dd --- /dev/null +++ b/BackgroundLayerFrame.py @@ -0,0 +1,25 @@ +""" +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]) + + + def update(self): + self.rect.x -= self.mainGameClass.getGameSpeed() * self.speedMultiplier + if self.rect.x < -self.rect.width: + self.rect.x += self.rect.width*2 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 550ae6f..f478570 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -9,6 +9,7 @@ import os from collections import deque +from Background import Background from Player import Player from StandingEnemy import StandingEnemy from FlyingEnemy import FlyingEnemy @@ -17,13 +18,6 @@ from Floor import Floor class Drakora(): - 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)), - ) - def getGameSpeed(self): return self.__gameSpeed @@ -65,6 +59,8 @@ class Drakora(): def newGame(self): + self.background = Background(self) + for enemy in self.enemies: enemy.kill() @@ -94,14 +90,12 @@ class Drakora(): self.speedUpCheatLabelCD = 0 self.speedDownCheatLabelCD = 0 self.speedResetCheatLabelCD = 0 - self.backgroundgOffset = [0, self.fourScreenWidths] def __init__(self): random.seed() pygame.init() self.screenSize = (800, 600) - self.fourScreenWidths = self.screenSize[0]*4 self.screen = pygame.display.set_mode(self.screenSize) pygame.display.set_caption('Drakora') self.clock = pygame.time.Clock() @@ -163,9 +157,7 @@ class Drakora(): def render(self): # self.screen.fill((102, 153, 255)) - self.screen.blit(self.backgroundImages[0], (0-self.backgroundgOffset[0], 0, self.fourScreenWidths-self.backgroundgOffset[0], 600)) - self.screen.blit(self.backgroundImages[1], (0-self.backgroundgOffset[1], 0, self.fourScreenWidths-self.backgroundgOffset[1], 600)) - + self.background.draw(self.screen) for cloudGroup in self.cloudGroups: cloudGroup.draw(self.screen) self.enemies.draw(self.screen) self.players.draw(self.screen) @@ -299,14 +291,7 @@ class Drakora(): self.doCheats() if not self.isGameOver and not self.isPaused: - self.backgroundgOffset[0] += self.__gameSpeed - self.backgroundgOffset[1] += self.__gameSpeed - - if self.backgroundgOffset[0] > self.fourScreenWidths*2: - self.backgroundgOffset[0] -= self.fourScreenWidths*2 - if self.backgroundgOffset[1] > self.fourScreenWidths*2: - self.backgroundgOffset[1] -= self.fourScreenWidths*2 - + self.background.update() for cloudGroup in self.cloudGroups: cloudGroup.update() self.enemies.update() self.players.update() 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 0b5fcd7..e2fe42d 100644 Binary files a/data/background.png and b/data/background.png differ diff --git a/data/background.xcf b/data/background.xcf index aa18ecc..8778978 100644 Binary files a/data/background.xcf and b/data/background.xcf differ