Added pause, crouch (beta)

This commit is contained in:
2021-03-26 15:20:09 +00:00
parent 8f7d2bd6a4
commit 225a9d7922
+84 -36
View File
@@ -1,6 +1,12 @@
import pygame import pygame
import random import random
buttonsPause = (pygame.K_p,)
buttonsQuit = (pygame.K_F10,)
buttonsNewGame = (pygame.K_RETURN,)
buttonsJump = (pygame.K_UP, pygame.K_SPACE,)
buttonsCrouch = (pygame.K_DOWN,)
screenSize = (800, 600) screenSize = (800, 600)
targetFps = 60 targetFps = 60
@@ -9,8 +15,10 @@ floorHeight = 50
gameSpeed = 0.0 gameSpeed = 0.0
score = 0 score = 0
isGameOver = False isGameOver = False
isPaused = False
isDownSpace = False isDownJump = False
isDownCrouch = False
enemyCD = 0 enemyCD = 0
enemyChance = 0.0 enemyChance = 0.0
@@ -31,13 +39,24 @@ class Player(pygame.sprite.Sprite):
def __init__(self): def __init__(self):
pygame.sprite.Sprite.__init__(self) pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((50, 75)) self.image = pygame.Surface((50, 75))
self.image.fill((102, 102, 51)) self.image.fill((153, 151, 0))
self.rect = self.image.get_rect() self.rect = self.image.get_rect()
self.rect.center = (100, 400) self.rect.center = (100, 400)
self.speed = 0.0 self.speed = 0.0
self.isJumping = False self.isJumping = False
self.isCrouching = False
self.hoverCount = 0 self.hoverCount = 0
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): def update(self):
global isGameOver global isGameOver
@@ -55,31 +74,48 @@ class Player(pygame.sprite.Sprite):
isOnFloor = True isOnFloor = True
self.rect.y -= 1 self.rect.y -= 1
if not isDownSpace: if not isDownJump:
self.hoverCount = 0 self.hoverCount = 0
if isOnFloor: if isOnFloor:
self.speed = 0 self.speed = 0
if isDownSpace:
if isDownJump:
self.isJumping = True self.isJumping = True
if self.isCrouching:
self.standup()
elif isDownCrouch:
if not self.isCrouching:
self.crouch()
elif self.isCrouching:
self.standup()
if self.isJumping: if self.isJumping:
if isDownSpace and self.hoverCount < 8: if isDownJump and self.hoverCount < 8:
self.speed -= 1 - self.speed/8 self.speed -= 1 - self.speed/8
self.hoverCount += 1 self.hoverCount += 1
else: else:
self.isJumping = False self.isJumping = False
class Enemy(pygame.sprite.Sprite): class Enemy(pygame.sprite.Sprite):
def setNextEnemyType(self): def setNextEnemyType(self):
if score < 25: if score < 25:
self.type = 1 self.type = 1
elif score < 50:
if random.randint(1, 100) < 90: self.type = 1
else: self.type = 2
else: else:
if random.randint(1, 100) < 90: if random.randint(1, 100) < 75: self.type = 1
self.type = 1 else: self.type = 2
else:
self.type = 2
def setNextEnemySubtype(self): def setNextEnemySubtype(self):
if self.type == 1: if self.type == 1:
@@ -93,29 +129,25 @@ class Enemy(pygame.sprite.Sprite):
self.setNextEnemyType() self.setNextEnemyType()
self.setNextEnemySubtype() self.setNextEnemySubtype()
self.height = screenSize[1] - floorHeight
if self.type == 1: if self.type == 1:
if self.subtype == 1: if self.subtype == 1: self.image = pygame.Surface((25, 75))
self.image = pygame.Surface((25, 75)) elif self.subtype == 2: self.image = pygame.Surface((25, 25))
elif self.subtype == 2: elif self.subtype == 3: self.image = pygame.Surface((75, 25))
self.image = pygame.Surface((25, 25)) elif self.subtype == 4: self.image = pygame.Surface((50, 25))
elif self.subtype == 3: elif self.subtype == 5: self.image = pygame.Surface((50, 50))
self.image = pygame.Surface((75, 25)) else: self.image = pygame.Surface((25, 50))
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.image.fill((0, 153, 0))
self.rect = self.image.get_rect() self.rect = self.image.get_rect()
self.height = screenSize[1]-floorHeight-self.rect.height/2 self.height -= self.rect.height/2
elif self.type == 2: elif self.type == 2:
self.image = pygame.Surface((50, 25)) self.image = pygame.Surface((50, 25))
self.image.fill((51, 51, 0)) self.image.fill((51, 51, 0))
self.rect = self.image.get_rect() self.rect = self.image.get_rect()
self.height = screenSize[1]-floorHeight-self.rect.height/2 - 10 - 25*self.subtype self.height -= self.rect.height/2 + 10 + 25*self.subtype
self.rect.center = (screenSize[0], self.height) self.rect.center = (screenSize[0], self.height)
@@ -142,6 +174,7 @@ def newGame():
gameSpeed = 3.0 gameSpeed = 3.0
score = 0 score = 0
isGameOver = False isGameOver = False
isPaused = False
enemyCD = 0 enemyCD = 0
enemyChance = 100.0 enemyChance = 100.0
@@ -178,7 +211,7 @@ def render(screen, sprites):
rect.midtop = (rect.width/2+10,10) rect.midtop = (rect.width/2+10,10)
screen.blit(text, rect) screen.blit(text, rect)
text = font.render('game speed: %.1f %s'%(gameSpeed, '(space is pressed)' if isDownSpace else ''), True, (255, 255, 255)) text = font.render('game speed: %.1f %s'%(gameSpeed, '(space is pressed)' if isDownJump else ''), True, (255, 255, 255))
rect = text.get_rect() rect = text.get_rect()
rect.midtop = (rect.width/2+10,25) rect.midtop = (rect.width/2+10,25)
screen.blit(text, rect) screen.blit(text, rect)
@@ -204,28 +237,43 @@ def render(screen, sprites):
rect = text.get_rect() rect = text.get_rect()
rect.midtop = tuple(i/2 for i in screenSize) rect.midtop = tuple(i/2 for i in screenSize)
screen.blit(text, rect) screen.blit(text, rect)
elif isPaused:
font = pygame.font.Font(pygame.font.match_font('liberation mono'), 56)
text = font.render('PAUSED', True, (255, 255, 255))
rect = text.get_rect()
rect.midtop = tuple(i/2 for i in screenSize)
screen.blit(text, rect)
pygame.display.flip() pygame.display.flip()
def logic(clock, sprites): def logic(clock, sprites):
global enemyCD, enemyChance, isDownSpace global enemyCD, enemyChance, isDownJump, isDownCrouch, isPaused
for event in pygame.event.get(): for event in pygame.event.get():
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
return False return False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_F10:
return False
elif event.key == pygame.K_SPACE:
isDownSpace = True
elif event.key == pygame.K_RETURN:
newGame()
elif event.type == pygame.KEYUP:
if event.key == pygame.K_SPACE:
isDownSpace = False
if not isGameOver: elif event.type == pygame.KEYDOWN:
if event.key in buttonsQuit:
return False
if event.key in buttonsCrouch:
isDownCrouch = True
elif event.key in buttonsJump:
isDownJump = True
elif event.key in buttonsNewGame:
if isGameOver: newGame()
elif event.key in buttonsPause:
isPaused = not isPaused
elif event.type == pygame.KEYUP:
if event.key in buttonsCrouch:
isDownCrouch = False
if event.key in buttonsJump:
isDownJump = False
if not isGameOver and not isPaused:
sprites.update() sprites.update()
enemyCD -= gameSpeed enemyCD -= gameSpeed