diff --git a/Cloud.py b/Cloud.py new file mode 100644 index 0000000..75446b9 --- /dev/null +++ b/Cloud.py @@ -0,0 +1,30 @@ +""" +Cloud entity class +""" + + +import pygame +import random + + +class Cloud(pygame.sprite.Sprite): + def __init__(self, mainGameClass): + pygame.sprite.Sprite.__init__(self) + self.image = pygame.Surface((random.randint(150, 350), + random.randint(50, 150))) + self.image.fill((random.randint(235, 255), + random.randint(235, 255), + random.randint(235, 255))) + self.rect = self.image.get_rect() + self.rect.center = (mainGameClass.getScreenWidth() + self.rect.width, + mainGameClass.getScreenHeight()/2 - + random.randint(100, + mainGameClass.getScreenHeight()/2-100)) + self.speed = random.randint(2, 4)*mainGameClass.getGameSpeed() + + + def update(self): + if (self.rect.x < -self.rect.width): + self.kill() + + self.rect.x -= self.speed diff --git a/Drakora.pyw b/Drakora.pyw index 92ce0fa..f9c1d26 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -1,7 +1,5 @@ """ -First test Pygame project - -Written in Python 3.X using Pygame library +Main game class """ @@ -10,45 +8,31 @@ import random from Player import Player from Enemy import Enemy +from Cloud import Cloud +from Floor import Floor -class Floor(pygame.sprite.Sprite): - def __init__(self, screenSize, floorHeight): - pygame.sprite.Sprite.__init__(self) - self.image = pygame.Surface((screenSize[0], floorHeight)) - self.image.fill((255, 204, 102)) - self.rect = self.image.get_rect() - self.rect.center = (screenSize[0]/2, screenSize[1]-floorHeight/2) - - -class Cloud(pygame.sprite.Sprite): - def __init__(self, screenSize, gameSpeed): - pygame.sprite.Sprite.__init__(self) - self.image = pygame.Surface((random.randint(150, 350), - random.randint(50, 150))) - self.image.fill((random.randint(235, 255), - random.randint(235, 255), - random.randint(235, 255))) - self.rect = self.image.get_rect() - self.rect.center = (screenSize[0] + self.rect.width, - screenSize[1]/2 - - random.randint(100, screenSize[1]/2-100)) - self.speed = random.randint(150, 300)/100*gameSpeed - - - def update(self): - if (self.rect.x < -self.rect.width): - self.kill() - - self.rect.x -= self.speed - class Drakora(): def getGameSpeed(self): return self.__gameSpeed + def getScore(self): return self.__score + + def getScreenWidth(self): + return self.screenSize[0] + + + def getScreenHeight(self): + return self.screenSize[1] + + + def getFloorHeight(self): + return self.floorHeight + + def addScore(self, score): self.__score += score @@ -102,7 +86,7 @@ class Drakora(): self.clock = pygame.time.Clock() self.sprites = pygame.sprite.Group() - self.floors.add(Floor(self.screenSize, self.floorHeight)) + self.floors.add(Floor(self)) self.sprites.add(self.floors) font = pygame.font.match_font('liberation mono') @@ -129,7 +113,7 @@ class Drakora(): self.renderText('%d'%(self.__score), self.fontScore, (255, 255, 255), - (self.screenSize[0]/2,20)) + (self.getScreenWidth()/2,20)) if self.isGameOver: self.renderText('GAME OVER', @@ -146,7 +130,7 @@ class Drakora(): def collideCheck(self): if pygame.sprite.spritecollideany(self.player, self.enemies): self.isGameOver = True - + self.player.isOnFloor = False while pygame.sprite.spritecollideany(self.player, self.floors): @@ -210,18 +194,18 @@ class Drakora(): self.enemyCD -= self.__gameSpeed - if random.randint(1, 150) == 1: - cloud = Cloud(self.screenSize, self.__gameSpeed) + if random.randint(1, 50) == 1: + cloud = Cloud(self) self.clouds.add(cloud) self.sprites.add(cloud) if self.enemyCD <= 0: self.enemyChance += (1/self.targetFps) * self.enemyChance/8 - if random.randint(1, 100) < self.enemyChance: - self.enemyCD = 200 + if random.randint(1, 150) < self.enemyChance: + self.enemyCD = 300 self.enemyChance = 1 - enemy = Enemy(self.screenSize, self.floorHeight, self) + enemy = Enemy(self) self.enemies.add(enemy) self.sprites.add(enemy) diff --git a/Enemy.py b/Enemy.py index 6fb198c..210ae45 100644 --- a/Enemy.py +++ b/Enemy.py @@ -1,6 +1,11 @@ -import pygame +""" +Enemy entity class +""" + + import random + class Enemy(pygame.sprite.Sprite): def setNextEnemyType(self, score): if score < 10: @@ -26,7 +31,7 @@ class Enemy(pygame.sprite.Sprite): self.subtype = random.randint(1, 7) - def __init__(self, screenSize, floorHeight, mainGameClass): + def __init__(self, mainGameClass): pygame.sprite.Sprite.__init__(self) self.thisGame = mainGameClass @@ -36,7 +41,7 @@ class Enemy(pygame.sprite.Sprite): self.setNextEnemyType(self.thisGame.getScore()) self.setNextEnemySubtype() - self.height = screenSize[1] - floorHeight + self.height = mainGameClass.getScreenHeight() - mainGameClass.floorHeight if self.type == 1: if self.subtype == 1: self.image = pygame.Surface((25, 75)) @@ -56,7 +61,8 @@ class Enemy(pygame.sprite.Sprite): self.rect = self.image.get_rect() self.height -= self.rect.height/2 + 10 + 10*self.subtype - self.rect.center = (screenSize[0] + self.rect.width, self.height) + self.rect.center = (mainGameClass.getScreenWidth() + self.rect.width, + self.height) def update(self): diff --git a/Floor.py b/Floor.py new file mode 100644 index 0000000..577c1c5 --- /dev/null +++ b/Floor.py @@ -0,0 +1,18 @@ +""" +Floor entity class +""" + + +import pygame + + +class Floor(pygame.sprite.Sprite): + def __init__(self, mainGameClass): + pygame.sprite.Sprite.__init__(self) + self.image = pygame.Surface((mainGameClass.getScreenWidth(), + mainGameClass.getFloorHeight())) + self.image.fill((255, 204, 102)) + self.rect = self.image.get_rect() + self.rect.center = (mainGameClass.getScreenWidth()/2, + mainGameClass.getScreenHeight() - + mainGameClass.getFloorHeight()/2) diff --git a/Player.py b/Player.py index a514e30..c92183a 100644 --- a/Player.py +++ b/Player.py @@ -1,5 +1,11 @@ +""" +Player entity class +""" + + import pygame + class Player(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) @@ -31,4 +37,3 @@ class Player(pygame.sprite.Sprite): self.speed += 0.17 self.rect.y += self.speed -