diff --git a/Drakora.pyw b/Drakora.pyw index a8e9b2a..99a01de 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -7,7 +7,8 @@ import pygame import random from Player import Player -from Enemy import Enemy +from StandingEnemy import StandingEnemy +from FlyingEnemy import FlyingEnemy from Cloud import Cloud from Floor import Floor @@ -37,7 +38,7 @@ class Drakora(): self.__score += score if self.__score%self.speedUpRate == 0: - self.__gameSpeed += 1 + self.__gameSpeed += self.__score/self.speedUpRate self.speedUpLabelCD = self.targetFps @@ -57,10 +58,11 @@ class Drakora(): self.__gameSpeed = 2 self.enemyCount = 0 - self.enemyCD = self.getNextEnemyCD() self.enemyChance = 100.0 self.speedUpLabelCD = 0 + self.nextEnemyMustBeFlying = False + self.enemyCD = self.getNextEnemyCD() def __init__(self): @@ -144,12 +146,14 @@ class Drakora(): def getNextEnemyCD(self): - if self.enemyCount <= 5: + if self.enemyCount == 0: return 1000 elif self.enemyCount <= 5: return 800 - 100*self.enemyCount elif self.enemyCount%self.speedUpRate == 0: return 1000 + elif self.nextEnemyMustBeFlying: + return 600 else: return 300 @@ -166,6 +170,8 @@ class Drakora(): def logic(self): + self.player.updateSpeed(self.__gameSpeed) + for event in pygame.event.get(): self.player.control(event) @@ -176,7 +182,7 @@ class Drakora(): if event.key in self.buttonsQuit: return False elif event.key in self.buttonsNewGame: - if self.isGameOver: self.newGame() + if self.isGameOver or self.isGodmode: self.newGame() elif event.key in self.buttonsPause: self.isPaused = not self.isPaused @@ -217,9 +223,27 @@ class Drakora(): if random.randint(1, 150) < self.enemyChance: self.enemyCount += 1 - self.enemyCD = self.getNextEnemyCD() self.enemyChance = 1 - enemy = Enemy(self) + + if self.nextEnemyMustBeFlying: + enemy = FlyingEnemy(self) + else: + enemy = StandingEnemy(self) + + if self.__score < 10: + self.nextEnemyMustBeFlying = False + + elif self.__score < 20: + self.nextEnemyMustBeFlying = random.randint(1, 100) > 95 + + elif self.__score < 40: + self.nextEnemyMustBeFlying = random.randint(1, 100) > 85 + + else: + self.nextEnemyMustBeFlying = random.randint(1, 100) > 75 + + self.enemyCD = self.getNextEnemyCD() + self.enemies.add(enemy) self.sprites.add(enemy) diff --git a/Enemy.py b/Enemy.py index e760c40..3322e44 100644 --- a/Enemy.py +++ b/Enemy.py @@ -8,62 +8,13 @@ import random class Enemy(pygame.sprite.Sprite): - def setNextEnemyType(self, score): - if score < 10: - self.type = 1 - - elif score < 20: - if random.randint(1, 100) < 95: self.type = 1 - else: self.type = 2 - - elif score < 40: - if random.randint(1, 100) < 85: self.type = 1 - else: self.type = 2 - - else: - if random.randint(1, 100) < 75: self.type = 1 - else: self.type = 2 - - - def setNextEnemySubtype(self): - if self.type == 1: - self.subtype = random.randint(1, 5) - elif self.type == 2: - self.subtype = random.randint(1, 7) - - def __init__(self, mainGameClass): pygame.sprite.Sprite.__init__(self) self.thisGame = mainGameClass - self.speed = self.thisGame.getGameSpeed() - - self.setNextEnemyType(self.thisGame.getScore()) - self.setNextEnemySubtype() - - self.height = mainGameClass.getScreenHeight() - mainGameClass.floorHeight - - if self.type == 1: - if self.subtype == 1: self.image = pygame.Surface((25, 75)) - elif self.subtype == 2: self.image = pygame.Surface((25, 25)) - elif self.subtype == 3: self.image = pygame.Surface((75, 25)) - elif self.subtype == 4: self.image = pygame.Surface((50, 25)) - elif self.subtype == 5: self.image = pygame.Surface((50, 50)) - else: self.image = pygame.Surface((25, 50)) - - self.image.fill((0, 153, 0)) - self.rect = self.image.get_rect() - self.height -= self.rect.height/2 - - elif self.type == 2: - self.image = pygame.Surface((50, 25)) - self.image.fill((51, 51, 0)) - self.rect = self.image.get_rect() - self.height -= self.rect.height/2 + 10 + 10*self.subtype - - self.rect.center = (mainGameClass.getScreenWidth() + self.rect.width, - self.height) + self.height = (mainGameClass.getScreenHeight() + - mainGameClass.getFloorHeight()) def update(self): @@ -71,7 +22,4 @@ class Enemy(pygame.sprite.Sprite): self.kill() self.thisGame.addScore(1) - if self.type == 1: - self.rect.x -= self.speed - else: - self.rect.x -= self.speed*2 + self.rect.x -= self.speed diff --git a/Floor.py b/Floor.py index 577c1c5..c06b552 100644 --- a/Floor.py +++ b/Floor.py @@ -10,9 +10,9 @@ class Floor(pygame.sprite.Sprite): def __init__(self, mainGameClass): pygame.sprite.Sprite.__init__(self) self.image = pygame.Surface((mainGameClass.getScreenWidth(), - mainGameClass.getFloorHeight())) + mainGameClass.getFloorHeight()*101)) self.image.fill((255, 204, 102)) self.rect = self.image.get_rect() self.rect.center = (mainGameClass.getScreenWidth()/2, - mainGameClass.getScreenHeight() - - mainGameClass.getFloorHeight()/2) + mainGameClass.getScreenHeight() + + mainGameClass.getFloorHeight()*49.5) diff --git a/FlyingEnemy.py b/FlyingEnemy.py new file mode 100644 index 0000000..d78ae23 --- /dev/null +++ b/FlyingEnemy.py @@ -0,0 +1,25 @@ +""" +Flying enemy entity class +""" + + +import pygame +import random +from Enemy import Enemy + + +class FlyingEnemy(Enemy): + def __init__(self, mainGameClass): + Enemy.__init__(self, mainGameClass) + + self.subtype = random.randint(1, 7) + + self.image = pygame.Surface((50, 25)) + self.image.fill((51, 51, 0)) + self.rect = self.image.get_rect() + self.height -= self.rect.height/2 + 10 + 10*self.subtype + + self.rect.center = (mainGameClass.getScreenWidth() + self.rect.width, + self.height) + + self.speed = self.thisGame.getGameSpeed()*2 diff --git a/Player.py b/Player.py index 148399c..2e89c71 100644 --- a/Player.py +++ b/Player.py @@ -22,6 +22,7 @@ class Player(pygame.sprite.Sprite): self.isDownCrouch = False self.buttonsJump = (pygame.K_UP, pygame.K_SPACE,) self.buttonsCrouch = (pygame.K_DOWN,) + self.gameSpeed = 1 def crouch(self): @@ -36,6 +37,8 @@ class Player(pygame.sprite.Sprite): self.isCrouching = False self.rect = self.rect.inflate(0, 25) + def updateSpeed(self, newGameSpeed): + self.gameSpeed = newGameSpeed def control(self, event): if event.type == pygame.KEYDOWN: @@ -54,7 +57,7 @@ class Player(pygame.sprite.Sprite): def update(self): if not self.speed: self.rect.y += 1 - self.speed += 0.17 + self.speed += 0.09 * self.gameSpeed self.rect.y += self.speed if not self.isDownJump: @@ -77,9 +80,9 @@ class Player(pygame.sprite.Sprite): self.standup() if self.isJumping: - if self.isDownJump and self.hoverCount < 7: - self.speed -= 1 - self.speed/(15+ - self.hoverCount*3) + if self.isDownJump and self.hoverCount < 8: + self.speed -= (1 - self.speed/(15+ + self.hoverCount*3)) * self.gameSpeed/2 self.hoverCount += 1 else: diff --git a/StandingEnemy.py b/StandingEnemy.py new file mode 100644 index 0000000..adda10f --- /dev/null +++ b/StandingEnemy.py @@ -0,0 +1,31 @@ +""" +Standing enemy entity class +""" + + +import pygame +import random +from Enemy import Enemy + + +class StandingEnemy(Enemy): + def __init__(self, mainGameClass): + Enemy.__init__(self, mainGameClass) + + self.subtype = random.randint(1, 5) + + if self.subtype == 1: self.image = pygame.Surface((25, 75)) + elif self.subtype == 2: self.image = pygame.Surface((25, 25)) + elif self.subtype == 3: self.image = pygame.Surface((75, 25)) + elif self.subtype == 4: self.image = pygame.Surface((50, 25)) + elif self.subtype == 5: self.image = pygame.Surface((50, 50)) + else: self.image = pygame.Surface((25, 50)) + + self.image.fill((0, 153, 0)) + self.rect = self.image.get_rect() + self.height -= self.rect.height/2 + + self.rect.center = (mainGameClass.getScreenWidth() + self.rect.width, + self.height) + + self.speed = self.thisGame.getGameSpeed()