From f851f181bd02044a4898c78ea0dd269ae5913a10 Mon Sep 17 00:00:00 2001 From: Adam Reid Date: Mon, 4 Jul 2022 22:05:57 -0400 Subject: [PATCH] improvements to collision and pace increment --- infinite_maze/Clock.py | 2 +- infinite_maze/Game.py | 17 +++++------ infinite_maze/infinite_maze.py | 52 +++++++++++++++++++++++++--------- 3 files changed, 49 insertions(+), 22 deletions(-) diff --git a/infinite_maze/Clock.py b/infinite_maze/Clock.py index 2fcdf00..583692b 100644 --- a/infinite_maze/Clock.py +++ b/infinite_maze/Clock.py @@ -27,4 +27,4 @@ def getMillis(self): return (self.millis) def getSeconds(self): - return (self.millis / 60) + return int((self.millis / 1000) % 60) diff --git a/infinite_maze/Game.py b/infinite_maze/Game.py index a558a5e..1657985 100644 --- a/infinite_maze/Game.py +++ b/infinite_maze/Game.py @@ -31,9 +31,10 @@ def __init__(self): self.pace = 0 self.score = 0 self.scoreIncrement = 1 - self.paused = 0 - self.over = 0 - self.shutdown = 0 + + self.paused = False + self.over = False + self.shutdown = False self.clock = Clock() @@ -50,7 +51,7 @@ def updateScreen(self, player, lines): currClock = self.clock.getSeconds() # Update Pace - if (self.clock.getMillis() > 1000 and currClock % 30 == 0 and currClock != prevClock): + if (self.clock.getMillis() > 10000 and currClock % 30 == 0 and currClock != prevClock): self.pace += 0.1 # Print Border @@ -83,7 +84,7 @@ def printEndDisplay(self): pygame.display.flip() def end(self): - self.over = 1 + self.over = True def cleanup(self): pygame.quit() @@ -92,7 +93,7 @@ def isActive(self): return (not self.over) def quit(self): - self.shutdown = 1 + self.shutdown = True def isPlaying(self): return (not self.shutdown) @@ -100,7 +101,7 @@ def isPlaying(self): def reset(self): self.pace = 0 self.score = 0 - self.over = 0 + self.over = False self.clock.reset() @@ -120,7 +121,7 @@ def incrementScore(self): self.score += self.scoreIncrement def decrementScore(self): - self.score -= self.scoreIncrement + self.score -= self.scoreIncrement if self.score > 0 else 0 def setScore(self, newScore): self.score = newScore diff --git a/infinite_maze/infinite_maze.py b/infinite_maze/infinite_maze.py index bc6f6ac..c0ec238 100644 --- a/infinite_maze/infinite_maze.py +++ b/infinite_maze/infinite_maze.py @@ -42,7 +42,7 @@ def maze(): player.getX() + player.getWidth() + player.getSpeed() >= line.getXStart() and ( (player.getY() >= line.getYStart() and player.getY() <= line.getYEnd()) or - (player.getY() + player.getHeight() >= line.getYStart() and player.getY() + player.getHeight() < line.getYEnd()) + (player.getY() + player.getHeight() >= line.getYStart() and player.getY() + player.getHeight() <= line.getYEnd()) ) ) if (not blocked): @@ -63,7 +63,7 @@ def maze(): player.getX() - player.getSpeed() <= line.getXEnd() and ( (player.getY() >= line.getYStart() and player.getY() <= line.getYEnd()) or - (player.getY() + player.getHeight() >= line.getYStart() and player.getY() + player.getHeight() < line.getYEnd()) + (player.getY() + player.getHeight() >= line.getYStart() and player.getY() + player.getHeight() <= line.getYEnd()) ) ) if (not blocked): @@ -71,24 +71,50 @@ def maze(): game.decrementScore() if (keys[pygame.K_DOWN] or keys[pygame.K_s]): blocked = False - #for line in lines: - # blocked = blocked or ((player.getY() + 5 + player.getSpeed() >= line.getYStart()) and (player.getY() <= line.getYStart()) and (player.getX() + 5 > line.getXStart()) and (player.getX() - 5 < line.getXStart())) - # blocked = blocked or ((player.getY() + 5 + player.getSpeed() >= line.getYStart()) and (player.getY() <= line.getYStart()) and (player.getX() >= line.getXStart()) and (player.getX() <= line.getXEnd())) + for line in lines: + if line.getIsHorizontal(): + blocked = blocked or ( + player.getY() + player.getHeight() <= line.getYStart() and + player.getY() + player.getHeight() + player.getSpeed() >= line.getYStart() and + ( + (player.getX() >= line.getXStart() and player.getX() <= line.getXEnd()) or + (player.getX() + player.getWidth() >= line.getXStart() and player.getX() + player.getWidth() <= line.getXEnd()) + ) + ) + else: # vertical line + blocked = blocked or ( + player.getX() <= line.getXStart() and + player.getX() + player.getWidth() >= line.getXStart() and + player.getY() + player.getHeight() + player.getSpeed() == line.getYStart() + ) if (not blocked): player.moveY(player.getSpeed()) elif (keys[pygame.K_UP] or keys[pygame.K_w]): blocked = False - #for line in lines: - # blocked = blocked or ((player.getY() - player.getSpeed() <= line.getYEnd()) and (player.getY() >= line.getYEnd()) and (player.getX() + 5 > line.getXStart()) and (player.getX() - 5 < line.getXStart())) - # blocked = blocked or ((player.getY() - 5 - player.getSpeed() <= line.getYEnd()) and (player.getY() >= line.getYEnd()) and (player.getX() >= line.getXStart()) and (player.getX() <= line.getXEnd())) + for line in lines: + if line.getIsHorizontal(): + blocked = blocked or ( + player.getY() >= line.getYStart() and + player.getY() - player.getSpeed() <= line.getYStart() and + ( + (player.getX() >= line.getXStart() and player.getX() <= line.getXEnd()) or + (player.getX() + player.getWidth() >= line.getXStart() and player.getX() + player.getWidth() <= line.getXEnd()) + ) + ) + else: # vertical line + blocked = blocked or ( + player.getX() <= line.getXStart() and + player.getX() + player.getWidth() >= line.getXStart() and + player.getY() - player.getSpeed() == line.getYEnd() + ) if (not blocked): player.moveY(-player.getSpeed()) # Process game pace adjustments - #player.setX(player.getX() - game.getPace()) - #for line in lines: - # line.setXStart(line.getXStart() - game.getPace()) - # line.setXEnd(line.getXEnd() - game.getPace()) + player.setX(player.getX() - game.getPace()) + for line in lines: + line.setXStart(line.getXStart() - game.getPace()) + line.setXEnd(line.getXEnd() - game.getPace()) # Position Adjustments (to prevent screen overflow) if (player.getX() < game.getXMin()): @@ -106,7 +132,7 @@ def maze(): for line in lines: start = line.getXStart() end = line.getXEnd() - if (start < 0): + if (start < 80): line.setXStart(xMax) if (start == end): line.setXEnd(xMax)