From 90ffbb6e099b08171d0bd7dd20899b0c3014fbde Mon Sep 17 00:00:00 2001 From: Nikolya Andreychik Date: Sat, 27 Mar 2021 14:26:05 -0700 Subject: [PATCH 1/4] Splitted Drakora.pyw for Enemy.py and Player.py Player.py - not final version, must be more function from Drakora added. Player - may be must control funtion included. --- Drakora.pyw | 145 ++++++++++------------------------------------------ Enemy.py | 70 +++++++++++++++++++++++++ Player.py | 34 ++++++++++++ 3 files changed, 131 insertions(+), 118 deletions(-) create mode 100644 Enemy.py create mode 100644 Player.py diff --git a/Drakora.pyw b/Drakora.pyw index cc5a6e1..92ce0fa 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -8,6 +8,9 @@ Written in Python 3.X using Pygame library import pygame import random +from Player import Player +from Enemy import Enemy + class Floor(pygame.sprite.Sprite): def __init__(self, screenSize, floorHeight): @@ -34,106 +37,25 @@ class Cloud(pygame.sprite.Sprite): def update(self): + if (self.rect.x < -self.rect.width): + self.kill() + self.rect.x -= self.speed - -class Player(pygame.sprite.Sprite): - def __init__(self): - pygame.sprite.Sprite.__init__(self) - self.image = pygame.Surface((50, 75)) - self.image.fill((153, 151, 0)) - self.rect = self.image.get_rect() - self.rect.center = (100, 400) - self.speed = 0.0 - self.isJumping = False - self.isCrouching = False - self.hoverCount = 0 - self.isOnFloor = False - - - def crouch(self): - if not self.isCrouching: - self.isCrouching = True - self.rect = self.rect.inflate(0, -25) - - - def standup(self): - if self.isCrouching: - self.isCrouching = False - self.rect = self.rect.inflate(0, 25) - - - def update(self): - if not self.speed: self.rect.y += 1 - - self.speed += 0.17 - self.rect.y += self.speed - - -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, screenSize, floorHeight, gameSpeed, score): - pygame.sprite.Sprite.__init__(self) - - self.speed = gameSpeed - - self.setNextEnemyType(score) - self.setNextEnemySubtype() - - self.height = screenSize[1] - 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 = (screenSize[0] + self.rect.width, self.height) - - - def update(self): - if self.type == 1: - self.rect.x -= self.speed - else: - self.rect.x -= self.speed*2 - - class Drakora(): + def getGameSpeed(self): + return self.__gameSpeed + + def getScore(self): + return self.__score + + def addScore(self, score): + self.__score += score + + if self.__score%25 == 0: + self.__gameSpeed += 1 + + def newGame(self): for enemy in self.enemies: enemy.kill() @@ -143,11 +65,11 @@ class Drakora(): self.player = Player() self.sprites.add(self.player) - self.score = 0 + self.__score = 0 self.isGameOver = False self.isPaused = False - self.gameSpeed = 2 + self.__gameSpeed = 2 self.enemyCD = 0 self.enemyChance = 100.0 @@ -205,7 +127,7 @@ class Drakora(): self.screen.fill((102, 153, 255)) self.sprites.draw(self.screen) - self.renderText('%d'%(self.score), + self.renderText('%d'%(self.__score), self.fontScore, (255, 255, 255), (self.screenSize[0]/2,20)) @@ -224,21 +146,9 @@ class Drakora(): def collideCheck(self): if pygame.sprite.spritecollideany(self.player, self.enemies): self.isGameOver = True - - for enemy in self.enemies: - if (enemy.rect.x < -enemy.rect.width): - enemy.kill() - self.score += 1 - if self.score%25 == 0: - self.gameSpeed += 1 - """Quick fix of running cacti. Some good fix needed""" - for enemy in self.enemies: enemy.speed = self.gameSpeed - - for cloud in self.clouds: - if (cloud.rect.x < -cloud.rect.width): - cloud.kill() - + self.player.isOnFloor = False + while pygame.sprite.spritecollideany(self.player, self.floors): self.player.isOnFloor = True self.player.rect.y -= 1 @@ -298,10 +208,10 @@ class Drakora(): if not self.isGameOver and not self.isPaused: self.sprites.update() - self.enemyCD -= self.gameSpeed + self.enemyCD -= self.__gameSpeed if random.randint(1, 150) == 1: - cloud = Cloud(self.screenSize, self.gameSpeed) + cloud = Cloud(self.screenSize, self.__gameSpeed) self.clouds.add(cloud) self.sprites.add(cloud) @@ -311,8 +221,7 @@ class Drakora(): if random.randint(1, 100) < self.enemyChance: self.enemyCD = 200 self.enemyChance = 1 - enemy = Enemy(self.screenSize, self.floorHeight, - self.gameSpeed, self.score) + enemy = Enemy(self.screenSize, self.floorHeight, self) self.enemies.add(enemy) self.sprites.add(enemy) diff --git a/Enemy.py b/Enemy.py new file mode 100644 index 0000000..6fb198c --- /dev/null +++ b/Enemy.py @@ -0,0 +1,70 @@ +import pygame +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, screenSize, floorHeight, mainGameClass): + pygame.sprite.Sprite.__init__(self) + + self.thisGame = mainGameClass + + self.speed = self.thisGame.getGameSpeed() + + self.setNextEnemyType(self.thisGame.getScore()) + self.setNextEnemySubtype() + + self.height = screenSize[1] - 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 = (screenSize[0] + self.rect.width, self.height) + + + def update(self): + if (self.rect.x < -self.rect.width): + self.kill() + self.thisGame.addScore(1) + + if self.type == 1: + self.rect.x -= self.speed + else: + self.rect.x -= self.speed*2 diff --git a/Player.py b/Player.py new file mode 100644 index 0000000..a514e30 --- /dev/null +++ b/Player.py @@ -0,0 +1,34 @@ +import pygame + +class Player(pygame.sprite.Sprite): + def __init__(self): + pygame.sprite.Sprite.__init__(self) + self.image = pygame.Surface((50, 75)) + self.image.fill((153, 151, 0)) + self.rect = self.image.get_rect() + self.rect.center = (100, 400) + self.speed = 0.0 + self.isJumping = False + self.isCrouching = False + self.hoverCount = 0 + self.isOnFloor = False + + + def crouch(self): + if not self.isCrouching: + self.isCrouching = True + self.rect = self.rect.inflate(0, -25) + + + def standup(self): + if self.isCrouching: + self.isCrouching = False + self.rect = self.rect.inflate(0, 25) + + + def update(self): + if not self.speed: self.rect.y += 1 + + self.speed += 0.17 + self.rect.y += self.speed + From 01d42cb80e8ef3e2ca14d32b5a5a10fdef6b09b4 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Sun, 28 Mar 2021 01:35:45 +0300 Subject: [PATCH 2/4] More splitting and minor changes --- Cloud.py | 30 ++++++++++++++++++++++++ Drakora.pyw | 66 ++++++++++++++++++++--------------------------------- Enemy.py | 14 ++++++++---- Floor.py | 18 +++++++++++++++ Player.py | 7 +++++- 5 files changed, 89 insertions(+), 46 deletions(-) create mode 100644 Cloud.py create mode 100644 Floor.py 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 - From aa187f1339727c0de3a7378c0e0dc3520542e797 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Sun, 28 Mar 2021 20:32:49 +0300 Subject: [PATCH 3/4] Fixed speeding up. Added 'speed up' message and godmode --- Drakora.pyw | 65 ++++++++++++++++++++++++++++++++++++++++++++++++----- Enemy.py | 1 + 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/Drakora.pyw b/Drakora.pyw index f9c1d26..822cdc1 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -36,8 +36,9 @@ class Drakora(): def addScore(self, score): self.__score += score - if self.__score%25 == 0: + if self.__score%self.speedUpRate == 0: self.__gameSpeed += 1 + self.speedUpLabelCD = self.targetFps def newGame(self): @@ -55,9 +56,12 @@ class Drakora(): self.__gameSpeed = 2 - self.enemyCD = 0 + self.enemyCount = 0 + self.enemyCD = self.getNextEnemyCD() self.enemyChance = 100.0 + self.speedUpLabelCD = 0 + def __init__(self): self.buttonsPause = (pygame.K_p,) @@ -79,6 +83,11 @@ class Drakora(): self.clouds = pygame.sprite.Group() self.player = None + self.speedUpRate = 25 + + self.godmodeCount = 0 + self.isGodmode = False + random.seed() pygame.init() self.screen = pygame.display.set_mode(self.screenSize) @@ -92,6 +101,7 @@ class Drakora(): font = pygame.font.match_font('liberation mono') self.fontScore = pygame.font.Font(font, 32) self.fontMessage = pygame.font.Font(font, 56) + self.fontGodmode = pygame.font.Font(font, 12) self.newGame() @@ -123,13 +133,35 @@ class Drakora(): self.renderText('PAUSED', self.fontMessage, (255, 255, 255), tuple(i/2 for i in self.screenSize)) + elif self.speedUpLabelCD > 0: + self.speedUpLabelCD -= 1 + self.renderText('SPEED UP', + self.fontMessage, (255, 255, 255), + tuple(i/2 for i in self.screenSize)) + + + + if self.isGodmode: + self.renderText('godmode', + self.fontGodmode, (255, 255, 255), + (self.getScreenWidth()/2,40)) pygame.display.flip() + def getNextEnemyCD(self): + if self.enemyCount <= 5: + return 1000 + elif self.enemyCount <= 5: + return 800 - 100*self.enemyCount + elif self.enemyCount%self.speedUpRate == 0: + return 1000 + else: + return 300 + def collideCheck(self): if pygame.sprite.spritecollideany(self.player, self.enemies): - self.isGameOver = True + if not self.isGodmode: self.isGameOver = True self.player.isOnFloor = False @@ -174,7 +206,7 @@ class Drakora(): elif event.type == pygame.KEYDOWN: if event.key in self.buttonsQuit: return False - if event.key in self.buttonsCrouch: + elif event.key in self.buttonsCrouch: self.isDownCrouch = True elif event.key in self.buttonsJump: self.isDownJump = True @@ -186,8 +218,28 @@ class Drakora(): elif event.type == pygame.KEYUP: if event.key in self.buttonsCrouch: self.isDownCrouch = False - if event.key in self.buttonsJump: + godmodeCount = 0 + elif event.key in self.buttonsJump: self.isDownJump = False + godmodeCount = 0 + elif event.key == pygame.K_g: + if self.godmodeCount == 0: self.godmodeCount += 1 + else: self.godmodeCount == 0 + elif event.key == pygame.K_o: + if (self.godmodeCount == 1 or + self.godmodeCount == 4): self.godmodeCount += 1 + else: self.godmodeCount == 0 + elif event.key == pygame.K_d: + if (self.godmodeCount == 2 or + self.godmodeCount == 5): self.godmodeCount += 1 + else: self.godmodeCount == 0 + elif event.key == pygame.K_m: + if self.godmodeCount == 3: self.godmodeCount += 1 + else: self.godmodeCount == 0 + elif event.key == pygame.K_e: + if self.godmodeCount == 6: + self.godmodeCount == 0 + self.isGodmode = not self.isGodmode if not self.isGameOver and not self.isPaused: self.sprites.update() @@ -203,7 +255,8 @@ class Drakora(): self.enemyChance += (1/self.targetFps) * self.enemyChance/8 if random.randint(1, 150) < self.enemyChance: - self.enemyCD = 300 + self.enemyCount += 1 + self.enemyCD = self.getNextEnemyCD() self.enemyChance = 1 enemy = Enemy(self) self.enemies.add(enemy) diff --git a/Enemy.py b/Enemy.py index 210ae45..e760c40 100644 --- a/Enemy.py +++ b/Enemy.py @@ -3,6 +3,7 @@ Enemy entity class """ +import pygame import random From 958ec99fc6ced63066b36ac3eff47a57d99beb9d Mon Sep 17 00:00:00 2001 From: Nikolya Adreychik Date: Mon, 29 Mar 2021 10:43:56 +0300 Subject: [PATCH 4/4] Some player incapsulation --- Cloud.py | 7 +++++-- Drakora.pyw | 55 ++++++++--------------------------------------------- Player.py | 47 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 49 deletions(-) diff --git a/Cloud.py b/Cloud.py index 75446b9..a532a2d 100644 --- a/Cloud.py +++ b/Cloud.py @@ -20,11 +20,14 @@ class Cloud(pygame.sprite.Sprite): mainGameClass.getScreenHeight()/2 - random.randint(100, mainGameClass.getScreenHeight()/2-100)) - self.speed = random.randint(2, 4)*mainGameClass.getGameSpeed() + self.speed = random.randint(1, 3)*mainGameClass.getGameSpeed() / 6 + + self.__doubleX = float(self.rect.x) def update(self): if (self.rect.x < -self.rect.width): self.kill() - self.rect.x -= self.speed + self.__doubleX -= self.speed + self.rect.x = self.__doubleX diff --git a/Drakora.pyw b/Drakora.pyw index 822cdc1..a8e9b2a 100644 --- a/Drakora.pyw +++ b/Drakora.pyw @@ -67,17 +67,12 @@ class Drakora(): self.buttonsPause = (pygame.K_p,) self.buttonsQuit = (pygame.K_F10,) self.buttonsNewGame = (pygame.K_RETURN,) - self.buttonsJump = (pygame.K_UP, pygame.K_SPACE,) - self.buttonsCrouch = (pygame.K_DOWN,) self.screenSize = (800, 600) self.targetFps = 120 self.floorHeight = 50 - self.isDownJump = False - self.isDownCrouch = False - self.floors = pygame.sprite.Group() self.enemies = pygame.sprite.Group() self.clouds = pygame.sprite.Group() @@ -120,6 +115,7 @@ class Drakora(): def render(self): self.screen.fill((102, 153, 255)) self.sprites.draw(self.screen) + self.floors.draw(self.screen) self.renderText('%d'%(self.__score), self.fontScore, (255, 255, 255), @@ -139,8 +135,6 @@ class Drakora(): self.fontMessage, (255, 255, 255), tuple(i/2 for i in self.screenSize)) - - if self.isGodmode: self.renderText('godmode', self.fontGodmode, (255, 255, 255), @@ -159,6 +153,7 @@ class Drakora(): else: return 300 + def collideCheck(self): if pygame.sprite.spritecollideany(self.player, self.enemies): if not self.isGodmode: self.isGameOver = True @@ -169,60 +164,24 @@ class Drakora(): self.player.isOnFloor = True self.player.rect.y -= 1 - if not self.isDownJump: - self.player.hoverCount = 0 - - if self.player.isOnFloor: - self.player.speed = 0 - - if self.isDownJump: - self.player.isJumping = True - - if self.player.isCrouching: - self.player.standup() - - elif self.isDownCrouch: - if not self.player.isCrouching: - self.player.crouch() - - elif self.player.isCrouching: - self.player.standup() - - if self.player.isJumping: - if self.isDownJump and self.player.hoverCount < 7: - self.player.speed -= 1 - self.player.speed/(15+ - self.player.hoverCount*3) - self.player.hoverCount += 1 - - else: - self.player.isJumping = False - def logic(self): for event in pygame.event.get(): + self.player.control(event) + if event.type == pygame.QUIT: return False elif event.type == pygame.KEYDOWN: if event.key in self.buttonsQuit: return False - elif event.key in self.buttonsCrouch: - self.isDownCrouch = True - elif event.key in self.buttonsJump: - self.isDownJump = True elif event.key in self.buttonsNewGame: if self.isGameOver: self.newGame() elif event.key in self.buttonsPause: self.isPaused = not self.isPaused elif event.type == pygame.KEYUP: - if event.key in self.buttonsCrouch: - self.isDownCrouch = False - godmodeCount = 0 - elif event.key in self.buttonsJump: - self.isDownJump = False - godmodeCount = 0 - elif event.key == pygame.K_g: + if event.key == pygame.K_g: if self.godmodeCount == 0: self.godmodeCount += 1 else: self.godmodeCount == 0 elif event.key == pygame.K_o: @@ -240,13 +199,15 @@ class Drakora(): if self.godmodeCount == 6: self.godmodeCount == 0 self.isGodmode = not self.isGodmode + else: + self.godmodeCount = 0 if not self.isGameOver and not self.isPaused: self.sprites.update() self.enemyCD -= self.__gameSpeed - if random.randint(1, 50) == 1: + if random.randint(1, 200) == 1: cloud = Cloud(self) self.clouds.add(cloud) self.sprites.add(cloud) diff --git a/Player.py b/Player.py index c92183a..148399c 100644 --- a/Player.py +++ b/Player.py @@ -18,12 +18,17 @@ class Player(pygame.sprite.Sprite): self.isCrouching = False self.hoverCount = 0 self.isOnFloor = False + self.isDownJump = False + self.isDownCrouch = False + self.buttonsJump = (pygame.K_UP, pygame.K_SPACE,) + self.buttonsCrouch = (pygame.K_DOWN,) def crouch(self): if not self.isCrouching: self.isCrouching = True self.rect = self.rect.inflate(0, -25) + # self.image.set_clip((50, 50)) def standup(self): @@ -32,8 +37,50 @@ class Player(pygame.sprite.Sprite): self.rect = self.rect.inflate(0, 25) + def control(self, event): + if event.type == pygame.KEYDOWN: + if event.key in self.buttonsCrouch: + self.isDownCrouch = True + elif event.key in self.buttonsJump: + self.isDownJump = True + + elif event.type == pygame.KEYUP: + if event.key in self.buttonsCrouch: + self.isDownCrouch = False + elif event.key in self.buttonsJump: + self.isDownJump = False + + def update(self): if not self.speed: self.rect.y += 1 self.speed += 0.17 self.rect.y += self.speed + + if not self.isDownJump: + self.hoverCount = 0 + + if self.isOnFloor: + self.speed = 0 + + if self.isDownJump: + self.isJumping = True + + if self.isCrouching: + self.standup() + + elif self.isDownCrouch: + if not self.isCrouching: + self.crouch() + + elif self.isCrouching: + self.standup() + + if self.isJumping: + if self.isDownJump and self.hoverCount < 7: + self.speed -= 1 - self.speed/(15+ + self.hoverCount*3) + self.hoverCount += 1 + + else: + self.isJumping = False