Added pause, crouch (beta)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user