Merge pull request #7 from IRUSlan92I/gameclass_test

Splitted enemies. Fixed flying enemies. Minor fixes
This commit is contained in:
Nikolai Andreichik
2021-03-29 15:30:41 +03:00
committed by GitHub
6 changed files with 100 additions and 69 deletions
+31 -7
View File
@@ -7,7 +7,8 @@ import pygame
import random import random
from Player import Player from Player import Player
from Enemy import Enemy from StandingEnemy import StandingEnemy
from FlyingEnemy import FlyingEnemy
from Cloud import Cloud from Cloud import Cloud
from Floor import Floor from Floor import Floor
@@ -37,7 +38,7 @@ class Drakora():
self.__score += score self.__score += score
if self.__score%self.speedUpRate == 0: if self.__score%self.speedUpRate == 0:
self.__gameSpeed += 1 self.__gameSpeed += self.__score/self.speedUpRate
self.speedUpLabelCD = self.targetFps self.speedUpLabelCD = self.targetFps
@@ -57,10 +58,11 @@ class Drakora():
self.__gameSpeed = 2 self.__gameSpeed = 2
self.enemyCount = 0 self.enemyCount = 0
self.enemyCD = self.getNextEnemyCD()
self.enemyChance = 100.0 self.enemyChance = 100.0
self.speedUpLabelCD = 0 self.speedUpLabelCD = 0
self.nextEnemyMustBeFlying = False
self.enemyCD = self.getNextEnemyCD()
def __init__(self): def __init__(self):
@@ -144,12 +146,14 @@ class Drakora():
def getNextEnemyCD(self): def getNextEnemyCD(self):
if self.enemyCount <= 5: if self.enemyCount == 0:
return 1000 return 1000
elif self.enemyCount <= 5: elif self.enemyCount <= 5:
return 800 - 100*self.enemyCount return 800 - 100*self.enemyCount
elif self.enemyCount%self.speedUpRate == 0: elif self.enemyCount%self.speedUpRate == 0:
return 1000 return 1000
elif self.nextEnemyMustBeFlying:
return 600
else: else:
return 300 return 300
@@ -166,6 +170,8 @@ class Drakora():
def logic(self): def logic(self):
self.player.updateSpeed(self.__gameSpeed)
for event in pygame.event.get(): for event in pygame.event.get():
self.player.control(event) self.player.control(event)
@@ -176,7 +182,7 @@ class Drakora():
if event.key in self.buttonsQuit: if event.key in self.buttonsQuit:
return False return False
elif event.key in self.buttonsNewGame: 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: elif event.key in self.buttonsPause:
self.isPaused = not self.isPaused self.isPaused = not self.isPaused
@@ -217,9 +223,27 @@ class Drakora():
if random.randint(1, 150) < self.enemyChance: if random.randint(1, 150) < self.enemyChance:
self.enemyCount += 1 self.enemyCount += 1
self.enemyCD = self.getNextEnemyCD()
self.enemyChance = 1 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.enemies.add(enemy)
self.sprites.add(enemy) self.sprites.add(enemy)
+3 -55
View File
@@ -8,62 +8,13 @@ import random
class Enemy(pygame.sprite.Sprite): 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): def __init__(self, mainGameClass):
pygame.sprite.Sprite.__init__(self) pygame.sprite.Sprite.__init__(self)
self.thisGame = mainGameClass self.thisGame = mainGameClass
self.speed = self.thisGame.getGameSpeed() self.height = (mainGameClass.getScreenHeight()
- mainGameClass.getFloorHeight())
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)
def update(self): def update(self):
@@ -71,7 +22,4 @@ class Enemy(pygame.sprite.Sprite):
self.kill() self.kill()
self.thisGame.addScore(1) self.thisGame.addScore(1)
if self.type == 1: self.rect.x -= self.speed
self.rect.x -= self.speed
else:
self.rect.x -= self.speed*2
+3 -3
View File
@@ -10,9 +10,9 @@ class Floor(pygame.sprite.Sprite):
def __init__(self, mainGameClass): def __init__(self, mainGameClass):
pygame.sprite.Sprite.__init__(self) pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((mainGameClass.getScreenWidth(), self.image = pygame.Surface((mainGameClass.getScreenWidth(),
mainGameClass.getFloorHeight())) mainGameClass.getFloorHeight()*101))
self.image.fill((255, 204, 102)) self.image.fill((255, 204, 102))
self.rect = self.image.get_rect() self.rect = self.image.get_rect()
self.rect.center = (mainGameClass.getScreenWidth()/2, self.rect.center = (mainGameClass.getScreenWidth()/2,
mainGameClass.getScreenHeight() - mainGameClass.getScreenHeight() +
mainGameClass.getFloorHeight()/2) mainGameClass.getFloorHeight()*49.5)
+25
View File
@@ -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
+7 -4
View File
@@ -22,6 +22,7 @@ class Player(pygame.sprite.Sprite):
self.isDownCrouch = False self.isDownCrouch = False
self.buttonsJump = (pygame.K_UP, pygame.K_SPACE,) self.buttonsJump = (pygame.K_UP, pygame.K_SPACE,)
self.buttonsCrouch = (pygame.K_DOWN,) self.buttonsCrouch = (pygame.K_DOWN,)
self.gameSpeed = 1
def crouch(self): def crouch(self):
@@ -36,6 +37,8 @@ class Player(pygame.sprite.Sprite):
self.isCrouching = False self.isCrouching = False
self.rect = self.rect.inflate(0, 25) self.rect = self.rect.inflate(0, 25)
def updateSpeed(self, newGameSpeed):
self.gameSpeed = newGameSpeed
def control(self, event): def control(self, event):
if event.type == pygame.KEYDOWN: if event.type == pygame.KEYDOWN:
@@ -54,7 +57,7 @@ class Player(pygame.sprite.Sprite):
def update(self): def update(self):
if not self.speed: self.rect.y += 1 if not self.speed: self.rect.y += 1
self.speed += 0.17 self.speed += 0.09 * self.gameSpeed
self.rect.y += self.speed self.rect.y += self.speed
if not self.isDownJump: if not self.isDownJump:
@@ -77,9 +80,9 @@ class Player(pygame.sprite.Sprite):
self.standup() self.standup()
if self.isJumping: if self.isJumping:
if self.isDownJump and self.hoverCount < 7: if self.isDownJump and self.hoverCount < 8:
self.speed -= 1 - self.speed/(15+ self.speed -= (1 - self.speed/(15+
self.hoverCount*3) self.hoverCount*3)) * self.gameSpeed/2
self.hoverCount += 1 self.hoverCount += 1
else: else:
+31
View File
@@ -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()