Pygame actual combat: cow, thousands of lines of code to realize the "mecha breakthrough adventure game", which is great (save it and learn it slowly)

Keywords: Python pygame

Introduction

Good morning, everyone—— Do you miss me?

Mu Muzi is coming. Today, I will put a big move on the line for you!

Just learned to record video, and then the dynamic display of the effect is finally perfectly recorded! Today, follow Xiaobian to update a wave of game series we are looking forward to ~ complete information to obtain the flowing text of the home page!

Is it so Kaisen and excited! Come on... Xiaobian will go and have a look with you!

text

This article is an open source game project - Xiaobian will process and optimize it according to his own ideas to show you the effect!

1, Xiaobian has something to say

In fact, this game is a mecha battle mode - don't beat me if I say the following, dog head save your life. jpg

I feel like I lost gold coins, blood bags and so on, which are very similar to the dungeons and warriors that I saw my friend play before! 2333,

It feels like this kind of breakthrough mode that has been brushing all the time. Zhinv said: "look at these games, they are almost the same", but it seems that there are many similar brush boss es on the market

Off, you can also automatically brush the game! BUT I haven't played it, BUT it should be the childhood of many people~

II. Rules of the game

2.1 breakthrough mode

This game has only one level: however, a level is divided into several small bosses, which can be cleared after playing. It shows that the blood volume is 0, and the clearance is unsuccessful. A red mecha, as a player, must defeat all small mecha + small boss. Each time the enemy mecha dies, items with different attributes will be dropped, such as blood bags, equipment, etc. you can collect them for your own use when you are close.

2.2 skill tips

Mecha player role: mecha skill list - I-O-J-U - as the skill key; Mobile list of mecha - W-A-S-D - as up, down, left and right mobile keys.

3, Game material

This game has written thousands of lines of code - game materials, pictures - corresponding background music, etc. - here is only a small part for you!

3.1 pixel style——

3.2 mecha model——

3.3 Adventure

4, Environment installation

This article is a small game! Based on Pygame. Environmental preparation: Python 3, pychar.

pip install -i https://pypi.douban.com/simple/ pygame

5, Because there are too many project codes, only some codes are given here.

5.1 loading animation and sound effects

font = pygame.font.SysFont(None,50,True)# Font True turns on antialiasing
load_music=pygame.mixer.Sound("music/11046.wav")
start_music=pygame.mixer.Sound("music/Battle background sound.wav")
back_music=pygame.mixer.Sound("music/BGM_1 (1)_02.wav")
green_jn=pygame.mixer.Sound("music/Enemy skills.wav")
green_attack_music=pygame.mixer.Sound("music/Whine.wav")
player_hit_music=pygame.mixer.Sound("music/Mecha injury.wav")
walk_music=pygame.mixer.Sound("music/Machine walking.wav")
jump_music=pygame.mixer.Sound("music/bounce.wav")
diren_die_music=pygame.mixer.Sound("music/Tank explosion.wav")
jn_music=pygame.mixer.Sound("music/Laser acoustic game jet_1_3.wav")
attack_music=pygame.mixer.Sound("music/The enemy's general attack_01_1.wav")
check_music=pygame.mixer.Sound("music/Upgrade or get rewards.wav")
feiti_music=pygame.mixer.Sound("music/machine stoppage.wav")
game_over_music=pygame.mixer.Sound("music/I'll be back.wav")
life_add_music=pygame.mixer.Sound("music/Add blood.wav")

player_hit_music.set_volume(0.5)
check_music.set_volume(0.2)
green_attack_music.set_volume(0.1)
back_music.set_volume(0)
jn_music.set_volume(1)
start_music.set_volume(0.5)
load_music.set_volume(1)

5.2 initialize map

map_img=pygame.image.load("map_img/left.jpg")
start_back=pygame.image.load("load_img/start_back2.png")
set_font = pygame.font.SysFont("KaiTi", 47)

# load_music.play()

screen=pygame.display.set_mode((WIDTH,HEIGHT),pygame.FULLSCREEN)
# screen=pygame.display.set_mode((WIDTH,HEIGHT))
# screen.fill((16,16,16))
screen.blit(start_back,(0,0))

pygame.display.set_caption("Mecha battle games")
pygame.display.set_icon(start_back)
#
load_image=() #Start animation list
load_count=1 #Start animation loading
start_flag=False#Start
start_music.play(-1)#Game start sound
for pic_num in range(1,30):
    if pic_num<10:
        load_image+=(pygame.image.load("./load_img/jz00"+str(pic_num)+".png"),)
    elif pic_num>9:
        load_image+=(pygame.image.load("./load_img/jz0"+str(pic_num)+".png"),)

class walk_sound():
    def __init__(self,src):
        self.sound=pygame.mixer.Sound(src)
        self.sound.set_volume(1)
    def music_play(self):
        self.sound.play()
    def music_stop(self):
        self.sound.stop()

5.3 level animation

class check_fun(object):
    check_list = []
    for pic_num in range(1, 13):
        check_list+=(pygame.image.load("./right_check/arrow" + str(pic_num) + ".png"),)
    def __init__(self):
        self.check_count=1
    def draw(self,screen):
        if self.check_count>=12:
            self.check_count=1
        if self.check_count:
            screen.blit(self.check_list[self.check_count],(1100,290))
            self.check_count+=1

5.4 player role

class Player(object):
    flc_list=()                            #Mecha o skill list
    lizi_list = ()                         #Particle effects 1 List
    lizi2_list = ()                        #Particle effects 2 List
    lizi3_list =()                         #Particle effects 3 list
    walk_right = ()                        #Mecha left list
    walk_left = ()                         #Mecha left list
    jn_list = ()                           #Mecha i skill list
    jump_list = ()                         #Mecha jump skill list
    hit_list = ()                          #Mecha injury list
    attack_list_one=()                     #List of first paragraph of close attack
    attack_list_two = ()                   #List of the second paragraph of close attack
    attack_list_three = ()                 #List of the third paragraph of close attack
    life_list=()                           #Mecha injury list
    die_list=()                             #Mecha HP list
    all_tuple=()
    stand_list = ()
    HP_tuple=()
    cd_tuple=()
    level_tuple=()
    for pic_num in range(1,13):
        level_tuple+=(pygame.image.load("./Update/"+str(pic_num)+".png"),)
    for pic_num in range(1,17):
        all_tuple+=(pygame.image.load("./jn/BIG/1 ("+str(pic_num)+").png"),)
    for pic_num in range(1,12):
        cd_tuple+=(pygame.image.load("./cd/cd"+str(pic_num)+".png"),)
    for pic_num in range(1,17):
        HP_tuple+=(pygame.image.load("./HP/"+str(pic_num)+".png"),)
    for pic_num in range(1,65):
        die_list+=(pygame.image.load("./die/die ("+str(pic_num)+").png"),)
    for pic_num in range(1,33):
        flc_list+=(pygame.image.load("./jn/flc ("+str(pic_num)+").png"),)
    for pic_num in range(1,49):
        lizi_list+=(pygame.image.load("./fire/"+str(pic_num)+".png"),)
    for pic_num in range(1,34):
        lizi2_list+=(pygame.image.load("./huohua/"+str(pic_num)+".png"),)
    for pic_num in range(1,81):
        lizi3_list+=(pygame.image.load("./huohua2/"+str(pic_num)+".png"),)
    for pic_num in range(1,5):
        life_list+=(pygame.image.load("./hit/ss (1).png"),)
        life_list+=(pygame.image.load("./hit/ss (2).png"),)
    for pic_num in range(1,13):
        walk_right+=(pygame.image.load("./walk/walk ("+str(pic_num)+").png"),)
    for pic_num in range(12,0,-1):
        walk_left+=(pygame.image.load("./walk/walk ("+str(pic_num)+").png"),)
    for pic_num in range(1, 25):
        stand_list+=(pygame.image.load("./stand/stand (" + str(pic_num) + ").png"),)
    for pic_num in range(1,41):
        jn_list+=(pygame.image.load("./jn/jn ("+str(pic_num)+").png"),)
    for pic_num in range(1,39):
        jump_list+=(pygame.image.load("./jump/jump ("+str(pic_num)+").png"),)
    for pic_num in range(1,48):
        hit_list+=(pygame.image.load("./hit/jd ("+str(pic_num)+").png"),)
    for pic_num in range(1,14):
        attack_list_one+=(pygame.image.load("./attack/1attack ("+str(pic_num)+").png"),)
    for pic_num in range(1,7):
        attack_list_two+=(pygame.image.load("./attack/2attack ("+str(pic_num)+").png"),)
    for pic_num in range(1,12):
        attack_list_three+=(pygame.image.load("./attack/3attack ("+str(pic_num)+").png"),)
    def __init__(self,x,y,width,height):
        self.x=x
        self.y=y
        self.width=width
        self.height=height
        self.speed=1
        self.left=False
        self.right=True
        self.stand=True
        self.jump=False
        self.i=False
        self.hit=False
        self.attack=0
        self.stand_count=1#Standing picture index
        self.walk_count=1#Walking picture index
        self.jump_count=1#Jump picture index
        self.jn_count=1#Picture index of skill i
        self.hit_count=1#Injured picture index
        self.attack_Bool=False
        self.attack_one_count = 1#A picture index of general attack
        self.attack_two_count = 1  # Picture index of two-stage general attack
        self.attack_three_count = 1  # Picture index of three general attacks
        self.life=100
        self.t=10
        self.hit_box = (self.x, self.y, self.width, self.height)  # Position size variable of collision box
        self.kill_enemy=0
        self.life_remove_bool=False
        self.life_count=0
        self.lizi_count=1
        self.lizi2_count = 1
        self.flc_count=0
        self.lizi3_count=1
        self.HP_count=0
        self.cd_count=0
        self.all_count=0
        self.cd=False
        self.levelAdd=False
        self.level=1
        self.flc=False
        self.die=False
        self.all=False
        self.die_count=0
        self.level_count=0
        self.HP_img=pygame.image.load("./HP/Battery.png")
        self.skill_img = pygame.image.load("./HP/skill_num.png")
        self.player_img = pygame.image.load("./HP/head.png")
        self.win_bool=False
        self.lifeAdd=False
        self.all_lenth=50
    def draw(self,screen):
        if self.all_count>=16:
            self.all_count=0
            self.all=False
            self.all_lenth=50

        if player.all_count>14:
            U_Testing(enemylist)
            U_Testing(enemylist2)
            U_Testing(enemylist3)
            U_Testing(enemylist4)

        if self.cd_count>=11:
            self.cd_count=0
            self.cd=False
        if self.HP_count == 2:
            life_add_music.play()
        if self.HP_count>=16:
            life_add_music.stop()
            self.HP_count=0
            self.lifeAdd = False

        if self.level_count==2:
            life_add_music.play()
        if self.level_count>=12:
            life_add_music.stop()
        if self.level_count>=12:
            self.level_count=0
            self.levelAdd = False

        if self.lizi_count>=48:
            self.lizi_count=1
        if self.lizi2_count>=33:
            self.lizi2_count=1
        if self.lizi3_count>=80:
            self.lizi3_count=1
        if self.lizi2_count:

            screen.blit(self.lizi2_list[self.lizi2_count], (-100, 500))
            screen.blit(self.lizi2_list[self.lizi2_count], (200, 500))
            screen.blit(self.lizi2_list[self.lizi2_count], (500, 500))
            screen.blit(self.lizi2_list[self.lizi2_count], (800, 500))
            screen.blit(self.lizi2_list[self.lizi2_count], (1100, 500))
            self.lizi2_count += 1
        # if self.lizi3_count:
        #     screen.blit(self.lizi3_list[self.lizi3_count], (-100, -120))
        #     screen.blit(self.lizi3_list[self.lizi3_count], (200, -200))
        #     screen.blit(self.lizi3_list[self.lizi3_count], (500, -120))
        #     screen.blit(self.lizi3_list[self.lizi3_count], (800, -200))
        #     screen.blit(self.lizi3_list[self.lizi3_count], (1100, -120))
        #     self.lizi3_count += 1

        if self.lizi_count:
            screen.blit(self.lizi_list[self.lizi_count], (-100, 600))
            screen.blit(self.lizi_list[self.lizi_count], (200, 550))
            screen.blit(self.lizi_list[self.lizi_count], (500, 600))
            screen.blit(self.lizi_list[self.lizi_count], (800, 550))
            screen.blit(self.lizi_list[self.lizi_count], (1100, 600))
            self.lizi_count+=1
        if self.die_count >=64:
            self.die_count=0
            self.life=100
            self.kill_enemy=0
            self.die = False
            self.stand = True
            return

        if self.stand_count>=24:
            self.stand_count=1

        if self.flc_count>=32:
            self.flc_count=0
            self.flc=False

        if self.life_count>=8:
            self.life_count=0
            self.life_remove_bool=False

        if self.attack_one_count>=13:
            self.attack_one_count=1
            self.stand=True
            self.attack_Bool = False

        if self.attack_two_count>=6:
            self.attack_two_count=1
            self.stand = True
            self.attack_Bool = False

        if self.attack_three_count>=11:
            self.attack_three_count=1
            self.stand = True
            self.attack_Bool = False

        if self.walk_count>=12:
            self.walk_count=1

        if self.jump_count>=38:
            self.jump_count=1
        if self.jn_count>=40:
            self.jn_count=1
        if self.hit_count>=47:
            self.hit_count=1

        if self.die_count==20:
            diren_die_music.play()




        if self.life_remove_bool and not self.die:
            screen.blit(self.life_list[self.life_count],(self.x,self.y))
            if self.life_count==0:
                player_hit_music.play()
            elif self.life_count==5:
                player_hit_music.stop()
            self.stand=False
            self.i = False
            self.j = False
            self.left=False
            self.right=False
            self.jump = False
            self.flc = False
            self.life_count+=1

        elif self.stand and not self.jump and not self.i and not self.flc  and not self.hit and not self.attack_Bool and not self.life_remove_bool and not self.die:
            screen.blit(self.stand_list[self.stand_count],(self.x,self.y))
            self.stand_count+=1

        elif self.right and not self.stand and not self.jump and not self.i and not self.flc  and not self.hit and not self.attack_Bool and not self.life_remove_bool and not self.die:  # If you are not standing and left=True,
            screen.blit(self.walk_right[self.walk_count], (self.x,self.y))  # Draw Mario
            self.walk_count += 1

            if self.walk_count==2:
                walk_music.play()
            elif self.walk_count==1:
                walk_music.stop()
        elif self.left and not self.stand and not self.jump and not self.i and not self.flc and not self.hit and not self.attack_Bool and not self.life_remove_bool and not self.die:  # If you are not standing and left=True,
            screen.blit(self.walk_left[self.walk_count], (self.x,self.y))  # Draw Mario
            self.walk_count += 1

            if self.walk_count==2:
                walk_music.play()
            elif self.walk_count==1:
                walk_music.stop()

        elif self.flc  and not self.die:
            if self.flc_count==1:
                feiti_music.play()
            if self.flc_count==20:
                feiti_music.stop()
            screen.blit(self.flc_list[self.flc_count], (self.x, self.y-120))
            self.flc_count += 1

        elif self.i  and not self.die:

            screen.blit(self.jn_list[self.jn_count],(self.x,self.y-75))
            self.jn_count+=1
            if self.jn_count == 2:
                jn_music.play()
            elif self.jn_count == 1:
                jn_music.stop()
        elif self.jump and not self.attack_Bool and not self.die:
            screen.blit(self.jump_list[self.jump_count],(self.x,self.y-75))
            self.jump_count+=1
            if self.jump_count == 2:
                jump_music.play()
            elif self.jump_count == 1:
                jump_music.stop()
        elif self.attack==1 and self.attack_Bool and not self.die:
            screen.blit(self.attack_list_one[self.attack_one_count],(self.x,self.y))
            self.attack_one_count += 1
            if self.attack_one_count==2:
                attack_music.play()
            elif self.attack_one_count==1:
                attack_music.stop()
        elif self.attack==2 and self.attack_Bool and not self.die:
            screen.blit(self.attack_list_two[self.attack_two_count],(self.x,self.y))
            self.attack_two_count += 1
            if self.attack_two_count == 2:
                attack_music.play()
            elif self.attack_two_count == 1:
                attack_music.stop()
        elif self.attack==3 and self.attack_Bool and not self.die:
            screen.blit(self.attack_list_three[self.attack_three_count],(self.x,self.y))
            self.attack_three_count += 1
            if self.attack_three_count == 2:
                attack_music.play()
            elif self.attack_three_count == 1:
                attack_music.stop()

        elif self.hit and not self.die:
            screen.blit(self.hit_list[self.hit_count],(self.x,self.y))
            self.hit_count+=1

        elif self.die:
            self.life = 0
            self.skill = False
            self.attack = False
            screen.blit(self.die_list[self.die_count],(self.x-100,self.y-20))
            self.die_count+=1

        self.hit_box = (self.x, self.y, self.width, self.height)




        if self.levelAdd:
            LEVAdd = font.render("LEVEL UP ", True, (255, 0, 0))
            screen.blit(LEVAdd, (player.x - 50, player.y - 50))
            screen.blit(self.level_tuple[self.level_count],(self.x-40,self.y-90))
            self.level_count+=1

        if self.lifeAdd:
            screen.blit(self.HP_tuple[self.HP_count],(self.x,self.y-40))
            self.HP_count+=1

        if self.all:
            self.all_lenth+=50
            screen.blit(self.all_tuple[self.all_count],(self.x+self.all_lenth,self.y+(self.height/2)-210))
            self.all_count+=1

5.5 enemy death delete

def die_enemy_green():
    enemylist.pop()
def die_enemy_grey():
    enemylist2.pop()
def die_enemy_pink():
    enemylist3.pop()
def die_enemy_Boss():
    enemylist4.pop()

5.6 enemy BOSS

class Boss(object):
    walk_tuple = ()         #Walking tuple
    skill_tuple = ()        #Far attack tuple
    attack_tuple = ()       #Near attack tuple
    life_remove_tuple = ()          #Injured tuple
    die_tuple = ()          #Death tuple
    arm_tuple = ()          #Arm tuple
    for pic_num in range(1,13):
        walk_tuple += (pygame.image.load("./yellow/walk1/1 ("+str(pic_num)+").png"),)
    for pic_num in range(1,34):
        skill_tuple += (pygame.image.load("./yellow/skill/skill ("+str(pic_num)+").png"),)
    for pic_num in range(1,30):
        attack_tuple += (pygame.image.load("./yellow/attack/attack ("+str(pic_num)+").png"),)
    for pic_num in range(1,40):
        life_remove_tuple += (pygame.image.load("./yellow/hit/hit ("+str(pic_num)+").png"),)
    for pic_num in range(1,13):
        die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
    for pic_num in range(1,13):
        die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
    for pic_num in range(1,13):
        die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
    for pic_num in range(1,13):
        die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
    for pic_num in range(1,13):
        die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
    for pic_num in range(1,7):
        arm_tuple += (pygame.image.load("./yellow/arm/arm ("+str(pic_num)+").png"),)
    def __init__(self,x,y,start,end):
        self.x = x
        self.y = y
        self.width = 149
        self.height = 122
        self.area = [start,end]
        self.Yarea = [390-self.height,640-self.height]
        self.walk_count = 0             #Walking picture index
        self.skill_count = 0            #Remote attack image index
        self.attack_count = 0           #Near attack picture index
        self.life_count = 0              #Falling picture index
        self.die_count = 0              #Escape picture index
        self.arm_count = 0              #Arm picture index
        self.life = 0                  #boss health
        self.speed = 1.5                #x-axis moving speed
        self.speed_Y = 1.9              #y-axis moving speed
        self.hit_box = (self.x,self.y,self.width,self.height)       #collision detection 
        self.die = False
        self.walk = True
        self.skill=False
        self.attack=False
        self.life_remove_bool=False
        self.Enemy_Y = 0                #Retain the Y-axis position
        self.enemy_img = pygame.image.load("./HP/enemy_yellow.png")      #Health Icon
        self.game_start_Bool = True                 #Length of loaded blood bar
    def draw(self,screen):
        global HP_img_boss
        global HP_bool_boss
        if self.game_start_Bool:
            self.life+=0.5
            if self.life>15:
                self.life=15
                self.game_start_Bool=False
        self.move()

        if self.life <= 0:
            self.life_remove_bool = False
            self.die = True
            self.walk = False

        if self.arm_count>=6:
            self.arm_count=0

        if self.life_count>=39:
            # self.y=self.Enemy_Y
            self.life_count=0
            self.life_remove_bool=False
            self.walk=True
        # Enemy walking
        if self.walk_count>=12:
            self.walk_count=0

        #Enemy long range attack
        if self.skill_count==20 and not self.life_remove_bool and not self.die:
            if collision_check_tanke(player, enemylist4[0]):
                player.life -= 8
                player.life_remove_bool = True
                if player.life<=0:
                    player.die=True
        # Enemy short range attack
        if self.attack_count == 17 and not self.life_remove_bool and not self.die:
            if collision_check_tanke_yellow(player, enemylist4[0]):
                player.life -= 8
                player.life_remove_bool = True
                if player.life<=0:
                    player.die=True

        #Enemy long range skills
        if self.skill_count >= 33:
            self.skill_count = 0
            self.skill=False
            self.walk=True

        # Enemy short range skill
        if self.attack_count >= 29:
            self.attack_count = 0
            self.attack = False
            self.walk = True

5.7 enemy BOSS Octopus monster

class Enemy_pink(object):
    walk_left=()
    walk_right=()
    die_list = ()
    life_remove_list = ()
    falsh_list=()
    skill_list=()
    attack_list = ()
    for pic_num in range(1,83):
        attack_list+=(pygame.image.load("./pink/attack/attack1 ("+str(pic_num)+").png"),)
    for pic_num in range(1,17):
        walk_left+=(pygame.image.load("./pink/walk/"+str(pic_num)+".png"),)
    for pic_num in range(16,0,-1):
        walk_right+=(pygame.image.load("./pink/walk/"+str(pic_num)+".png"),)
    for pic_num in range(1,51):
        skill_list+=(pygame.image.load("./pink/skill2/"+str(pic_num)+".png"),)
    #The enemy took off before he died
    for pic_num in range(1,58):
        die_list+=(pygame.image.load("./pink/die/die ("+str(pic_num)+").png"),)
    # Blood reduction
    for pic_num in range(1,29):
        life_remove_list+=(pygame.image.load("./pink/hit/hit ("+str(pic_num)+").png"),)

    def __init__(self,x,y,start,end):
        self.x=x
        self.y=y
        self.width=361
        self.height=179
        self.area=[start,end]
        self.Yarea = [440, 500] # Y-axis motion interval
        self.walk_count=1
        self.speed=-2
        self.speed_Y=1.9
        self.life=0
        self.hit_box = (self.x, self.y, self.width, self.height)
        self.die=False
        self.walk=True
        self.die_count=1
        self.life_count=1
        self.skill_count=1
        self.attack_count=0
        self.life_remove_bool=False
        self.skill=False
        self.attack = False
        self.Enemy_Y=0  #Retain the Y-axis position
        self.enemy_img = pygame.image.load("./HP/enemy_pink.png")
        self.HP_img = pygame.image.load("./HP/Battery.png")
        self.game_start_Bool=True
    def draw(self,screen):
        global HP_img_pink
        global HP_bool_pink
        if self.game_start_Bool:
            self.life+=0.17
            if self.life>3:
                self.life=3
                self.game_start_Bool=False

        self.move()

        if self.life <= 0:
            self.life_remove_bool = False
            self.die = True
            self.walk = False

        if self.life_count>=28:
            # self.y=self.Enemy_Y
            self.life_count=0
            self.life_remove_bool=False
            self.walk=True
        # Enemy walking
        if self.walk_count>=16:
            self.walk_count=0

        #Enemy long range attack
        if self.skill_count==30 and not self.life_remove_bool and not self.die:
            if collision_check_tanke_jincheng(player, enemylist3[0]):
                player.life -= 8
                player.life_remove_bool = True
                if player.life<=0:
                    player.die=True
        # Enemy short range attack
        if self.attack_count == 50 and not self.life_remove_bool and not self.die:
            if collision_check_tanke(player, enemylist3[0]):
                player.life -= 8
                player.life_remove_bool = True
                if player.life<=0:
                    player.die=True

        #Enemy long range skills
        if self.skill_count >= 50:
            self.skill_count = 0
            self.skill=False
            self.walk=True

        # Enemy short range skill
        if self.attack_count >= 82:
            self.attack_count = 0
            self.attack = False
            self.walk = True

5.8 enemy BOSS green tank

class Enemy(object):
    walk_left=()
    walk_right=()
    die_list = ()
    life_remove_list = ()
    falsh_list=()
    skill_list=()
    attack_list = ()

    for pic_num in range(1,24):
        attack_list+=(pygame.image.load("./green/attack/attack ("+str(pic_num)+").png"),)
    for pic_num in range(1,9):
        walk_left+=(pygame.image.load("./green/walk/walk ("+str(pic_num)+").png"),)
    for pic_num in range(8,0,-1):
        walk_right+=(pygame.image.load("./green/walk/walk ("+str(pic_num)+").png"),)
    for pic_num in range(1,38):
        skill_list+=(pygame.image.load("./green/skill/skill ("+str(pic_num)+").png"),)

    #The enemy took off before he died
    for pic_num in range(1,40):
        die_list+=(pygame.image.load("./green/die/hit ("+str(pic_num)+").png"),)
    for pic_num in range(1,65):
        die_list+=(pygame.image.load("./green/die/die ("+str(pic_num)+").png"),)
    # Blood reduction
    for pic_num in range(1,24):
        life_remove_list+=(pygame.image.load("./green/die/hit ("+str(pic_num)+").png"),)

    def __init__(self,x,y,start,end):
        self.x=x
        self.y=y
        self.width=133
        self.height=95
        self.area=[start,end]
        self.Yarea = [300, 360] # Y-axis motion interval
        self.walk_count=1
        self.speed=-1.5
        self.speed_Y=1.9
        self.life=0
        self.hit_box = (self.x, self.y, self.width, self.height)
        self.die=False
        self.walk=True
        self.die_count=1
        self.life_count=1
        self.skill_count=1
        self.attack_count=0
        self.life_remove_bool=False
        self.skill=False
        self.attack = False
        self.Enemy_Y=0  #Retain the Y-axis position
        self.enemy_img=pygame.image.load("./HP/enemy_green.png")
        self.game_start_Bool=True
    def draw(self,screen):
        global HP_img_green
        global HP_bool_green
        if self.game_start_Bool:
            self.life+=0.12
            if self.life > 3:
                self.life = 3
                self.game_start_Bool = False

        self.move()

        if self.life <= 0:
            self.life_remove_bool = False
            self.die = True
            self.walk = False

        # Enemy attacked
        # if self.life_count==2:
        #     self.Enemy_Y=self.y


        if self.life_count>=23:
            # self.y=self.Enemy_Y
            self.life_count=0
            self.life_remove_bool=False
            self.walk=True

        # Enemy walking
        if self.walk_count>=8:
            self.walk_count=0

        #Enemy long range attack
        if self.skill_count==25 and not self.life_remove_bool and not self.die:
            if collision_check_tanke(player, enemylist[0]):
                player.life -= 8
                player.life_remove_bool = True
                if player.life<=0:
                    player.die=True
        # Enemy short range attack
        if self.attack_count == 14 and not self.life_remove_bool and not self.die:
            if collision_check_tanke_jincheng(player, enemylist[0]):
                player.life -= 8
                player.life_remove_bool = True
                if player.life<=0:
                    player.die=True

        #Enemy long range skills
        if self.skill_count >= 37:
            self.skill_count = 0
            self.skill=False
            self.walk=True

        # Enemy short range skill
        if self.attack_count >= 23:
            self.attack_count = 0
            self.attack = False
            self.walk = True

5.9 dropped blood bottles

class Prop_Hp(object):
    def __init__(self,x,y):
        self.x=x
        self.y=y
        self.width=64
        self.height=64
        self.HP=2
        self.imglist=[pygame.image.load("./HP/HP.png"),pygame.image.load("./HP/HP2.png"),pygame.image.load("./HP/HP3.png"),pygame.image.load("./HP/gun.png"),pygame.image.load("./HP/gun2.png"),pygame.image.load("./HP/gun3.png"),pygame.image.load("./HP/gun4.png")]
        self.ran=random.randint(0,6)
        self.img=self.imglist[self.ran]
    def draw(self,screen):
        global HP_bool_green
        global HP_bool_grey
        global HP_bool_pink
        screen.blit(self.img,(self.x,self.y))
        if HP_bool_grey:
            if HP_img_grey.imglist.index(HP_img_grey.img)>2:
                if collision_check_tanke_HP(player, HP_img_grey):
                    player.levelAdd = True
                    player.level += 1
                    player.life += 5


                    if player.life > 100:
                        player.life = 100
                    HP_bool_grey = False
            else:
                if collision_check_tanke_HP(player, HP_img_grey):
                    player.lifeAdd=True
                    player.life += 5
                    if player.life >= 100:
                       player.life=100
                    HP_bool_grey=False

        if HP_bool_green:
            if HP_img_green.imglist.index(HP_img_green.img) > 2:
                if collision_check_tanke_HP(player, HP_img_green):
                    player.levelAdd = True
                    player.level += 1
                    player.life += 5

                    if player.life > 100:
                        player.life = 100
                    HP_bool_green = False
            else:
                if collision_check_tanke_HP(player, HP_img_green):
                    player.lifeAdd = True
                    player.life += 5
                    if player.life >= 100:
                       player.life=100
                    HP_bool_green=False

        if HP_bool_pink:
            if HP_img_pink.imglist.index(HP_img_pink.img) > 2:
                if collision_check_tanke_HP(player, HP_img_pink):
                    player.levelAdd = True
                    player.level += 1
                    player.life += 5

                    if player.life>100:
                        player.life=100
                    HP_bool_pink = False
            else:
                if collision_check_tanke_HP(player, HP_img_pink):
                    player.lifeAdd = True
                    player.life += 5
                    if player.life >= 100:
                       player.life=100
                    HP_bool_pink=False

back_music.play(-1)

6.0 blood bag collection

def collision_check_tanke_HP(a,b):
    temp1= (b.x+b.width>a.x+a.width-30>b.x)
    #Role attack interval fault tolerance interval
    temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45)
    return temp1 and  temp2

6.1 end class

def game_over():
    global check
    start_btn=pygame.image.load("./load_img/restart.png")
    end_btn=pygame.image.load("./load_img/Exit the game.png")
    failed=pygame.image.load("./load_img/fail.png")
    win_img=pygame.image.load("./load_img/victory.png")
    bg=pygame.image.load("./map_img/right.jpg")
    back_music.stop()
    while True:
        if check==5:
            back_music.play(-1)
            player.life = 100
            player.x = 0
            player.kill_enemy = 0
            check = 1
            return True
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
                                    #Mouse event
            if event.type==pygame.MOUSEBUTTONDOWN:
                            # Mouse position
                if (495<=event.pos[0]<=495+start_btn.get_width()) and (450<=event.pos[1]<450+start_btn.get_height()):
                    back_music.play(-1)
                    player.life = 100
                    player.x = 0
                    player.kill_enemy = 0
                    check = 1
                    return True
                if (495<=event.pos[0]<=495+start_btn.get_width()) and (320<=event.pos[1]<320+start_btn.get_height()):
                    sys.exit()
        player.kill_enemy=0
        screen.blit(bg,(0,0))
        screen.blit(start_btn,(495,450))
        screen.blit(end_btn,(495,320))
        if player.win_bool==False :   #fail
            screen.blit(failed, (395, 120))
        if player.win_bool :  #victory
            screen.blit(win_img, (425, 120))
        pygame.display.update()

6, Effect display

Screenshot display——

6.1 game interface

6.2 I don't have screenshots of the first level and the other levels

6.3 press and hold U to enlarge this skill. It can attack from a distance. Other attacks are too close and are not very powerful! get!

6.4 items dropped by enemy mecha

Video display——

Hahaha, the effect comes out! The first dynamic effect with video is satisfied!! After that, we will try our best to optimize drops ~ thank you!

Python game practice: machine armor battle breakthrough mode adventure!

summary

All right! This big game is written here. The source code is shared for free. Looking at these exquisite pictures, do you want to play by yourself and have a try~

Your support is my biggest motivation!! Remember the third company ~mua   Welcome to read previous articles~

Posted by snafudawn on Thu, 04 Nov 2021 00:39:45 -0700