Hello and it has been a very long time I am not posting anything on this website and today I am just going to finish up the unfinished business from the previous python project, which is to display a power indicator above the player head to show that the player is in full power after he has eaten the mana during the game, if he collides with the enemy then that power will be used up and the power indicator will disappear. I am using the self
from BoyObject import BoyObject from pygame import math as mt from pygame.locals import * from GameSprite import GameSprite import pygame class BoySprite(object): def __init__(self, scene, level, enemy_manager, mana_manager, level_manager, score_manager): self.row = 10 self.column = 10 self.scene = scene # game scene instance self.space = 64 # image width and height self.level = level # current game level self.enemy_manager = enemy_manager # the reference of enemy manager self.mana_manager = mana_manager # the reference of mana manager self.score_manager = score_manager # the reference of score manager self.WIDTH = 640 self.level_manager = level_manager self.prepare_boy(self.level) def prepare_boy(self, level): self.boy_object = BoyObject() self.boy_object_list = self.boy_object.get_object_list(level) self.boy_original_position = self.boy_object.get_original_position(level) self.x = self.boy_original_position[0] self.y = self.boy_original_position[1] self.speed = 2 self.boy_image_sprite_right = 'Asset/bright.png' self.boy_image_sprite_left = 'Asset/bleft.png' self.boy_sprite = self.boy_image_sprite_right self.frame = 3 self.up = False self.ladder = False self.left = False self.weak = False self.boy_rect = Rect(self.frame * 64, 0, 64, 64) self.sprite_boy = GameSprite(self.boy_sprite, self.boy_rect) self.boy_surface = self.sprite_boy.getImage() self.boy_ladder_list = self.boy_object.get_object_boundary(level) self.boy_bottom_boundary_list = self.boy_object.get_object_bottom_boundary(level) self.boy_side_boundary_list = self.boy_object.get_object_side_boundary(level) self.boy_door_boundary_list = self.boy_object.get_object_door_boundary(level) self.enemy_list = self.enemy_manager.get_enemy_list() self.mana_list = self.mana_manager.get_mana_list() self.life = 1 self.initialize() # set the x and the y direction for the player object def setX(self, x): if(self.ladder == True): return self.x += x if (self.up == True and x < 0): self.frame = 1 self.up = False elif(self.up == True and x > 0): self.frame = 0 self.up = False if(x < 0): self.left = True self.frame += 1 if (self.frame > 5): self.frame = 1 self.boy_sprite = self.boy_image_sprite_left elif(x > 0): self.frame += 1 self.left = False if (self.frame > 4): self.frame = 0 self.boy_sprite = self.boy_image_sprite_right elif(x == 0): if(self.left == True): self.frame = 2 self.boy_sprite = self.boy_image_sprite_left elif(self.left == False): self.frame = 3 self.boy_sprite = self.boy_image_sprite_right self.boy_rect = Rect(self.frame * 64, 0, 64, 64) self.sprite_boy = GameSprite(self.boy_sprite, self.boy_rect) self.boy_surface = self.sprite_boy.getImage() def setY(self, y): self.boy_rect = Rect(self.x, self.y+y, 64, 64) if(self.isUpDown(self.boy_rect, y) == True): self.y += y if(y == 0): self.frame = 9 elif(self.up == False): self.frame = 6 self.up = True else: if(y < 0): self.frame -= 1 elif(y > 0): self.frame += 1 if(self.frame > 10): self.frame = 6 elif(self.frame < 6): self.frame += 2 self.boy_sprite = self.boy_image_sprite_right self.boy_rect = Rect(self.frame * 64, 0, 64, 64) self.sprite_boy = GameSprite(self.boy_sprite, self.boy_rect) self.boy_surface = self.sprite_boy.getImage() def checkboundary(self): if(self.x < 0): self.x = 0 elif(self.x > self.WIDTH - self.space): self.x = self.WIDTH - self.space else: self.isLeftRight() def isUpDown(self, rect, y): for boundary in self.boy_ladder_list: boundary_rect = Rect(boundary[0], boundary[1], 64, 64) if ((boundary_rect.collidepoint(self.x, self.y+y) == True or boundary_rect.collidepoint(self.x, self.y+self.space+y) == True) and (self.x % self.space == 0)): for boundary_bottom in self.boy_bottom_boundary_list: boundary_rect = Rect(boundary_bottom[0], boundary_bottom[1], 64, 64) if (boundary_rect.colliderect(rect) == True): self.ladder = False return False self.ladder = True return True self.ladder = False return False def isLeftRight(self): for boundary in self.boy_side_boundary_list: boundary_rect = Rect(boundary[0], boundary[1], 64, 64) boy_rect = Rect(self.x, self.y, 64, 64) if (boundary_rect.colliderect(boy_rect) == True): if(self.left == True): self.x += self.speed else: self.x -= self.speed def update(self): self.checkboundary() self.check_mana_collide() self.check_collide() self.check_win() self.move_boy() def check_win(self): for door in self.boy_door_boundary_list: if(door[0] == self.x and door[1] == self.y): self.level_manager.increase_level() def check_collide(self): for enemy in self.enemy_list: enemy_rect = Rect(enemy.x, enemy.y, 64, 64) boy_rect = Rect(self.x, self.y, 64, 64) if (enemy_rect.colliderect(boy_rect) == True and enemy.alive == True): if(self.life <= 0): self.level_manager.reset_level() return else: self.life -= 1 self.score_manager.set_score(-50) enemy.alive = False self.weak = False def check_mana_collide(self): for mana in self.mana_list: mana_rect = Rect(mana.x, mana.y, 64, 64) if (mana_rect.collidepoint(self.x, self.y) == True and mana.alive == True): self.life += 1 self.weak = True self.score_manager.set_score(+50) mana.alive = False return def move_boy(self): self.draw_pos = mt.Vector2(self.x, self.y) # the position of the image on game scene def initialize(self): for row in range(self.row): for column in range(self.column): if(self.boy_object_list[row][column] == 1): self.draw_pos = mt.Vector2(self.x, self.y) # the vector position of the image on game scene self.scene.blit(self.boy_surface, self.draw_pos) # draw enemy frame def draw(self): self.scene.blit(self.boy_surface, self.draw_pos) # draw boy frame if(self.weak == True): pygame.draw.rect(self.scene, Color(0, 0, 225, 0), Rect(self.x+12, self.y-10, 10, 10), False)
If we run the above program again then we will see the following outcome.
Create a power indicator on the top of the player head for the ongoing @pygame project (with #python) pic.twitter.com/sbszQzcJwg
— TechLikin (@ChooWhei) March 26, 2019
With that, we have finally concluded the 2 months long project which costs me around 1000 hours of hard work and we will now looking forward to a new chapter of the game development, as I have mentioned before, we will create a new pygame project in the coming future. If you want to help this site out, kindly do consider to donate to this website, thank you in advance!