diff --git a/infinite_maze/Clock.py b/infinite_maze/Clock.py index 26fd0a1..2fcdf00 100644 --- a/infinite_maze/Clock.py +++ b/infinite_maze/Clock.py @@ -7,37 +7,24 @@ def __init__(self): self.startTime = self.time.get_time() self.milliseconds = 0 - self.seconds = 0 - self.minutes = 0 def update(self): self.time.tick() - self.milliseconds += self.time.get_time() - self.seconds = self.milliseconds / 1000 - if (self.seconds >= 60): - self.minutes += 1 - self.seconds -= 60 - self.milliseconds -= 60000 + self.millis += self.time.get_time() def getTimeString(self): - return ('{:02f}'.format(self.minutes) + ':' + '{:02f}'.format(self.seconds)) + minutes = int(self.millis / 60000) + seconds = int((self.millis / 1000) % 60) + return (f'{minutes:02}' + ':' + f'{seconds:02}') def reset(self): self.time = pygame.time.Clock() self.startTime = self.time.get_time() - self.milliseconds = 0 - self.seconds = 0 - self.minutes = 0 - - def getMills(self): - return (self.milliseconds) - - def getSecs(self): - return (self.seconds) - - def getMins(self): - return (self.minutes) + self.millis = 0 - def getFullTime(self): - return (self.milliseconds + (self.seconds * 1000) + (self.minutes * 60000)) + def getMillis(self): + return (self.millis) + + def getSeconds(self): + return (self.millis / 60) diff --git a/infinite_maze/Game.py b/infinite_maze/Game.py index 7e0c7d1..a558a5e 100644 --- a/infinite_maze/Game.py +++ b/infinite_maze/Game.py @@ -30,6 +30,7 @@ def __init__(self): self.pace = 0 self.score = 0 + self.scoreIncrement = 1 self.paused = 0 self.over = 0 self.shutdown = 0 @@ -43,14 +44,14 @@ def updateScreen(self, player, lines): for line in lines: pygame.draw.line(self.getScreen(), self.fgColor, line.getStart(), line.getEnd(), 1) - prevClock = self.clock.getSecs() + prevClock = self.clock.getSeconds() # Update Clock self.clock.update() - currClock = self.clock.getSecs() + currClock = self.clock.getSeconds() # Update Pace - if (self.clock.getFullTime() > 1000 and currClock % 30 == 0 and currClock != prevClock): - self.pace += 1 + if (self.clock.getMillis() > 1000 and currClock % 30 == 0 and currClock != prevClock): + self.pace += 0.1 # Print Border pygame.draw.line(self.getScreen(), self.fgColor, (self.xMin, self.yMin), (self.width, self.yMin), 2) @@ -114,6 +115,12 @@ def getScore(self): def updateScore(self, amount): self.score += amount + + def incrementScore(self): + self.score += self.scoreIncrement + + def decrementScore(self): + self.score -= self.scoreIncrement def setScore(self, newScore): self.score = newScore diff --git a/infinite_maze/Line.py b/infinite_maze/Line.py index 3bb8cc1..cab02dd 100644 --- a/infinite_maze/Line.py +++ b/infinite_maze/Line.py @@ -6,6 +6,7 @@ def __init__(self, startPos = (0, 0), endPos = (0, 0), sideA = 0, sideB = 0): self.end = endPos self.sideA = sideA self.sideB = sideB + self.isHorizontal = (startPos[1] == endPos[1]) def getStart(self): return (self.start) @@ -54,6 +55,12 @@ def getSideB(self): def setSideB(self, side): self.sideB = side + + def getIsHorizontal(self): + return self.isHorizontal + + def resetIsHorizontal(self): + self.isHorizontal = (self.startPos[0] == self.endPos[0]) @staticmethod def getXMax(lines): diff --git a/infinite_maze/Player.py b/infinite_maze/Player.py index 60d1c24..ece4ec5 100644 --- a/infinite_maze/Player.py +++ b/infinite_maze/Player.py @@ -5,7 +5,9 @@ class Player: def __init__(self, xPosition, yPosition): self.cursor = pygame.image.load('img/player.png') self.position = (xPosition, yPosition) - self.speed = 5 + self.width = 10 + self.height = 10 + self.speed = 1 def setX(self, xPosition): self.position = (xPosition, self.position[1]) @@ -36,8 +38,14 @@ def setCursor(self, image): def getCursor(self): return (self.cursor) + + def getWidth(self): + return self.width + + def getHeight(self): + return self.height def reset(self, xPosition, yPosition): self.setX(xPosition) self.setY(yPosition) - self.speed = 5 + self.speed = 1 diff --git a/infinite_maze/infinite_maze.py b/infinite_maze/infinite_maze.py index e92df99..bc6f6ac 100644 --- a/infinite_maze/infinite_maze.py +++ b/infinite_maze/infinite_maze.py @@ -17,7 +17,7 @@ def maze(): game.getClock().reset() keys = pygame.key.get_pressed() - mills = 0 + millis = 0 while (game.isPlaying()): while (game.isActive()): game.updateScreen(player, lines) @@ -28,49 +28,67 @@ def maze(): if (not game.isPaused()): # Arrow Move Events if (keys[pygame.K_RIGHT] or keys[pygame.K_d]): - blocked = 0 + blocked = False for line in lines: - if ((player.getX() + player.getSpeed() >= line.getXStart()) and (player.getX() <= line.getXStart()) and (player.getY() + 6 >= line.getYStart()) and (player.getY() - 6 <= line.getYStart())): - blocked = 1 - if ((player.getX() + 6 + player.getSpeed() >= line.getXStart()) and (player.getX() <= line.getXStart()) and (player.getY() >= line.getYStart()) and (player.getY() <= line.getYEnd())): - blocked = 1 + if line.getIsHorizontal(): + blocked = blocked or ( + player.getY() <= line.getYStart() and + player.getY() + player.getHeight() >= line.getYStart() and + player.getX() + player.getWidth() + player.getSpeed() == line.getXStart() + ) + else: # vertical line + blocked = blocked or ( + player.getX() + player.getWidth() <= line.getXStart() and + 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()) + ) + ) if (not blocked): - player.moveX(1) - game.updateScore(1) - if (keys[pygame.K_DOWN] or keys[pygame.K_s]): - blocked = 0 + player.moveX(player.getSpeed()) + game.incrementScore() + elif (keys[pygame.K_LEFT] or keys[pygame.K_a]): + blocked = False for line in lines: - if ((player.getY() + 5 + player.getSpeed() >= line.getYStart()) and (player.getY() <= line.getYStart()) and (player.getX() + 6 > line.getXStart()) and (player.getX() - 6 < line.getXStart())): - blocked = 1 - if ((player.getY() + 6 + player.getSpeed() >= line.getYStart()) and (player.getY() <= line.getYStart()) and (player.getX() >= line.getXStart()) and (player.getX() <= line.getXEnd())): - blocked = 1 + if line.getIsHorizontal(): + blocked = blocked or ( + player.getY() <= line.getYStart() and + player.getY() + player.getHeight() >= line.getYStart() and + player.getX() - player.getSpeed() == line.getXEnd() + ) + else: # vertical line + blocked = blocked or ( + player.getX() >= line.getXEnd() and + 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()) + ) + ) if (not blocked): - player.moveY(1) - if (keys[pygame.K_UP] or keys[pygame.K_w]): - blocked = 0 - for line in lines: - if ((player.getY() - player.getSpeed() <= line.getYEnd()) and (player.getY() >= line.getYEnd()) and (player.getX() + 6 > line.getXStart()) and (player.getX() - 6 < line.getXStart())): - blocked = 1 - if ((player.getY() - 6 - player.getSpeed() <= line.getYEnd()) and (player.getY() >= line.getYEnd()) and (player.getX() >= line.getXStart()) and (player.getX() <= line.getXEnd())): - blocked = 1 + player.moveX(-player.getSpeed()) + 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())) if (not blocked): - player.moveY(-1) - if (keys[pygame.K_LEFT] or keys[pygame.K_a]): - blocked = 0 - for line in lines: - if ((player.getX() + 1 - player.getSpeed() <= line.getXEnd()) and (player.getX() >= line.getXEnd()) and (player.getY() + 6 >= line.getYStart()) and (player.getY() - 6 <= line.getYStart())): - blocked = 1 - if ((player.getX() - player.getSpeed() <= line.getXEnd()) and (player.getX() >= line.getXEnd()) and (player.getY() >= line.getYStart()) and (player.getY() <= line.getYEnd())): - blocked = 1 + 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())) if (not blocked): - player.moveX(-1) - game.updateScore(-1) + 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()): @@ -115,10 +133,10 @@ def maze(): game.end() # Process FPS - processTime = int(game.getClock().getFullTime() - mills) + processTime = int(game.getClock().getMillis() - millis) if (processTime <= 16): time.delay(16 - processTime) - mills = game.getClock().getFullTime() + millis = game.getClock().getMillis() # Game has ended game.printEndDisplay()