def play_game(utility, DISPLAYSURF): fps_clock = pygame.time.Clock() pygame.mixer.music.load("./music/game_theme.mp3") pygame.mixer.music.play(-1, 2.0) player = Bar() ball = Ball() player.draw(DISPLAYSURF) ball.draw(DISPLAYSURF) blocks = draw_blocks(utility, DISPLAYSURF) while True: # main game loop keys = pygame.key.get_pressed() #move bar when right or left arrow is held down or pushed down if (keys[pygame.K_RIGHT]): player.move(DISPLAYSURF, 3) elif (keys[pygame.K_LEFT]): player.move(DISPLAYSURF, -3) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() elif event.type == MOUSEBUTTONUP: print(event.pos) ball.move(DISPLAYSURF, player) draw_blocks2(utility, DISPLAYSURF, blocks) # determine if ball hits a block block_collision = utility.getBallNBlockCollision(ball, blocks) if block_collision: # deduct from that blocks health blocks = block_collision.deductHealth(blocks, ball, player, DISPLAYSURF) if ball.outOfScreen(): player.reduceLives() ball.resetPosition() pygame.display.update() fps_clock.tick(utility.getFPS())
class Boundary(GameObject): def __init__(self, screen, position_x, position_y): super().__init__(screen, position_x, position_y) self.vertical_bar_top = Bar(self.screen, 0, 0, 20, 400) self.horizontal_bar_left = Bar(self.screen, 0, 0, 400, 20) self.vertical_bar_botton = Bar(self.screen, 0, 380, 20, 400) self.horizontal_bar_right = Bar(self.screen, 380, 0, 380, 20) def draw(self): self.horizontal_bar_left.draw() self.vertical_bar_botton.draw() self.vertical_bar_top.draw() self.horizontal_bar_right.draw() def get_boundaries(self): return [ self.horizontal_bar_left.get_rectangule(), self.horizontal_bar_right.get_rectangule(), self.vertical_bar_botton.get_rectangule(), self.vertical_bar_top.get_rectangule() ]
class Player(pygame.sprite.Sprite): def __init__(self, x, y): pygame.sprite.Sprite.__init__(self) self.size = 20 super(Player, self).__init__() #initialize animation self.images = [] self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerF1.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerF2.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerF3.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerF4.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerB1.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerB2.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerB3.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerB4.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerL1.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerL2.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerL3.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerL4.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerR1.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerR2.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerR3.png'), (20,20))) self.images.append(pygame.transform.scale(pygame.image.load('playeranimation/playerR4.png'), (20,20))) self.index, self.dir = 0, 0 self.image = self.images[self.index] self.seq = 4 self.str = 10 self.hp = 40 self.x = x self.y = y self.lvlNum = 1 #initialize stats self.hpBar = Bar(self.hp,(255,0,0), 10, 630, 200, 20, "HP") self.lvlBar = Lvl(20, (0,255,0), 10, 675, 200, 10, self.lvlNum) self.myfont = pygame.font.SysFont(None, 20) self.lvlFont = pygame.font.SysFont('Comic Sans MS', 15) self.hpFont = pygame.font.SysFont('Comic Sans MS', 25) self.lvlTxt = self.lvlFont.render ("lvl:"+ str(self.lvlNum), False,(255,255,255)) self.hpTxt = self.hpFont.render ("HP", False,(255,255,255)) self.speed = 20 self.updateRect() def printStats(self): #print player hp, and strength print("Player stats:\n\tPOW: ", self.str, "\n\tHP:", self.hpBar.curr, "/", self.hpBar.max) def drawStats(self, screen): #draw stats on screen self.hpBar.draw(screen) self.lvlBar.draw(screen) screen.blit(self.hpTxt,(10,600)) self.pow = self.myfont.render ("pow:" + str(self.str), False,(255,255,255)) screen.blit(self.pow, (10,700)) self.lvlTxt = self.lvlFont.render ("lvl:"+ str(self.lvlNum), False,(255,255,255)) screen.blit(self.lvlTxt, (10,650)) def boost(self, amount): #boost stats self.str += amount def updateRect(self): #updates player rect self.rect = pygame.Rect(self.x, self.y, self.size, self.size) def moveOnScrn(self, move, w, h): #checks if the next move is on the screen return self.x + move[0] >= 0 and self.x + move[0] <= w and self.y + move[1] >= 0 and self.y + move[1] <= h def makeMove(self, move, grid, w,h, scrollx, scrolly): #makes the next move if self.moveOnScrn(move,w,h): if grid[int((self.x + move[0])//self.size) - scrollx][int((self.y + move[1])//self.size) - scrolly][2] == 0: self.x = self.x + move[0] self.y = self.y + move[1] def update(self, keysDown, scrnW, scrnH, nodes, scrollX, scrollY, scrollDir, tic): self.image = self.images[self.index%self.seq + 4*self.dir] if self.lvlBar.lvlUp: #lvl up and boost stats self.lvlNum += 1 self.hpBar.increaseMax(int(self.hp*1.2)) self.str += self.lvlNum*2 self.lvlBar.curr = 0 self.lvlBar.lvlUp = False #movement control move = () if keysDown(pygame.K_a): self.index += 1 self.dir = 2 if self.rect.left > 0: if not scrollDir[2]: move = [-self.speed, 0] self.makeMove(move, nodes, scrnW, scrnH,scrollX, scrollY) elif keysDown(pygame.K_d): self.index += 1 self.dir = 3 if self.rect.right < scrnW: if not scrollDir[3]: move = [self.speed, 0] self.makeMove(move, nodes, scrnW, scrnH,scrollX, scrollY) elif keysDown(pygame.K_w): self.index += 1 self.dir = 1 if self.rect.top >= 0: if not scrollDir[0]: move = [0, -self.speed] self.makeMove(move, nodes, scrnW, scrnH,scrollX, scrollY) elif keysDown(pygame.K_s): self.index += 1 self.dir = 0 if self.rect.bottom < scrnH: if not scrollDir[1]: move = [0, self.speed] self.makeMove(move, nodes, scrnW, scrnH,scrollX, scrollY) else: self.index = 0 self.updateRect() super(Player, self).update(scrnW, scrnH)