千家信息网

Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章主要讲解了"Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python游戏大作炫酷
千家信息网最后更新 2025年02月08日Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法

这篇文章主要讲解了"Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法"吧!

一、小编有话说

其实这款游戏是一款机甲对战的模式--下面我说的话不要捶我哈,狗头保命.jpg

感觉这种打怪掉金币、掉血包等等这些跟我之前看我朋友打的一款《地下城与勇士》很像!2333,

感觉都是这种一直刷刷刷的闯关模式,直女表示:"看这类游戏都差不多一样",但是貌似市面上很多这种类似刷boss闯

关的,还可以自动刷的游戏来着!BUT 我没玩过但应该是很多人的童年吧~

二、游戏规则

2.1闯关模式

这款游戏只有一个关卡:但是一个关卡里面分为几个小boss、打完即可通关,显示血量为0即可通关不成功。一只红色的机甲作为玩家必须打败出现的所有小机甲+小boss,每次敌方机甲死亡会掉落不同属性的物品,比如:血包、装备等等,靠近即可收取为自己可用。

2.2技能提示

机甲玩家角色:机甲技能列表-I-O-J-U-作为技能按键;机甲移动列表-W-A-S-D-作为上下左右移动按键。

三、游戏素材

这个游戏写了几千行代码--游戏素材图片--相应的背景音乐等都特别的多--下面仅展示一小小部分给大家哈!

3.1像素画风--

3.2机甲模型--

3.3冒险闯关

四、环境安装

本文是写的小游戏嘛!基于Pygame写的。环境准备:Python3、Pycharm。

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

五、项目代码

由于项目代码过多,这里只给出部分代码。

5.1加载动画以及音效
font = pygame.font.SysFont(None,50,True)# 字体  True 打开抗锯齿load_music=pygame.mixer.Sound("music/11046.wav")start_music=pygame.mixer.Sound("music/战斗背景音效.wav")back_music=pygame.mixer.Sound("music/BGM_1 (1)_02.wav")green_jn=pygame.mixer.Sound("music/敌人技能.wav")green_attack_music=pygame.mixer.Sound("music/怪叫.wav")player_hit_music=pygame.mixer.Sound("music/机甲受伤.wav")walk_music=pygame.mixer.Sound("music/机器走路.wav")jump_music=pygame.mixer.Sound("music/弹跳.wav")diren_die_music=pygame.mixer.Sound("music/坦克爆炸.wav")jn_music=pygame.mixer.Sound("music/激光声游戏喷射_1_3.wav")attack_music=pygame.mixer.Sound("music/敌人普攻_01_1.wav")check_music=pygame.mixer.Sound("music/升级或者获得奖励.wav")feiti_music=pygame.mixer.Sound("music/机器故障.wav")game_over_music=pygame.mixer.Sound("music/我一定会回来的.wav")life_add_music=pygame.mixer.Sound("music/加血.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初始化地图
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("机甲对战小游戏")pygame.display.set_icon(start_back)#load_image=() #开始动画列表load_count=1 #开始动画加载start_flag=False#是否开始start_music.play(-1)#游戏开始音效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关卡动画
class check_fun(object):    check_list = []    for pic_num in range(1, 13):        check_list+=(pygame.image.load("./right_check/箭头" + 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玩家角色
class Player(object):    flc_list=()                            #机甲o技能列表    lizi_list = ()                         #粒子特效1 列表    lizi2_list = ()                        #粒子特效2 列表    lizi3_list =()                         #粒子特效3 列表    walk_right = ()                        #机甲 向左走列表    walk_left = ()                         #机甲 向左走列表    jn_list = ()                           #机甲i技能列表    jump_list = ()                         #机甲跳跃技能列表    hit_list = ()                          #机甲受伤列表    attack_list_one=()                     #近攻 第一段 列表    attack_list_two = ()                   #近攻 第二段列表    attack_list_three = ()                 #近攻 第三段列表    life_list=()                           #机甲受伤 列表    die_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#站立的图片索引        self.walk_count=1#步行的图片索引        self.jump_count=1#跳跃的图片索引        self.jn_count=1#技能i的图片索引        self.hit_count=1#受伤的图片索引        self.attack_Bool=False        self.attack_one_count = 1#一段普攻的图片索引        self.attack_two_count = 1  # 二段普攻的图片索引        self.attack_three_count = 1  # 三段普攻的图片索引        self.life=100        self.t=10        self.hit_box = (self.x, self.y, self.width, self.height)  # 碰撞框的位置 大小变量        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/电池.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:  # 如果没有站立中 并且left=True,            screen.blit(self.walk_right[self.walk_count], (self.x,self.y))  # 绘制马里奥            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:  # 如果没有站立中 并且left=True,            screen.blit(self.walk_left[self.walk_count], (self.x,self.y))  # 绘制马里奥            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敌人死亡删除
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 敌方大BOSS
class Boss(object):    walk_tuple = ()         #走路元组    skill_tuple = ()        #远攻元组    attack_tuple = ()       #近攻元组    life_remove_tuple = ()          #受伤元组    die_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             #走路图片索引        self.skill_count = 0            #远攻图片索引        self.attack_count = 0           #近攻图片索引        self.life_count = 0              #倒地图片索引        self.die_count = 0              #逃跑图片索引        self.arm_count = 0              #胳膊图片索引        self.life = 0                  #boss生命值        self.speed = 1.5                #x轴移动速度        self.speed_Y = 1.9              #y轴移动速度        self.hit_box = (self.x,self.y,self.width,self.height)       #碰撞检测        self.die = False        self.walk = True        self.skill=False        self.attack=False        self.life_remove_bool=False        self.Enemy_Y = 0                #保留受伤 Y轴 位置        self.enemy_img = pygame.image.load("./HP/enemy_yellow.png")      #生命值图标        self.game_start_Bool = True                 #加载血条长度    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        # 敌方走路        if self.walk_count>=12:            self.walk_count=0         #敌方远程攻击        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        # 敌方近程攻击        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         #敌方 远程 技能        if self.skill_count >= 33:            self.skill_count = 0            self.skill=False            self.walk=True         # 敌方 近程 技能        if self.attack_count >= 29:            self.attack_count = 0            self.attack = False            self.walk = True
5.7敌方BOSS章鱼怪
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"),)    #敌人 先起飞 再死亡    for pic_num in range(1,58):        die_list+=(pygame.image.load("./pink/die/die ("+str(pic_num)+").png"),)    # 减血    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轴 运动 区间        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  #保留受伤 Y轴 位置        self.enemy_img = pygame.image.load("./HP/enemy_pink.png")        self.HP_img = pygame.image.load("./HP/电池.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        # 敌方走路        if self.walk_count>=16:            self.walk_count=0         #敌方远程攻击        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        # 敌方近程攻击        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         #敌方 远程 技能        if self.skill_count >= 50:            self.skill_count = 0            self.skill=False            self.walk=True         # 敌方 近程 技能        if self.attack_count >= 82:            self.attack_count = 0            self.attack = False            self.walk = True
5.8敌方BOSS 绿坦克
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"),)     #敌人 先起飞 再死亡    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"),)    # 减血    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轴 运动 区间        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  #保留受伤 Y轴 位置        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         # 敌方受击        # 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         # 敌方走路        if self.walk_count>=8:            self.walk_count=0         #敌方远程攻击        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        # 敌方近程攻击        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         #敌方 远程 技能        if self.skill_count >= 37:            self.skill_count = 0            self.skill=False            self.walk=True         # 敌方 近程 技能        if self.attack_count >= 23:            self.attack_count = 0            self.attack = False            self.walk = True
5.9掉落的血瓶
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)
5.10捡血包
def collision_check_tanke_HP(a,b):    temp1= (b.x+b.width>a.x+a.width-30>b.x)    #角色的攻击区间  容错区间    temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45)    return temp1 and  temp2
5.11结束类
def game_over():    global check    start_btn=pygame.image.load("./load_img/重新开始.png")    end_btn=pygame.image.load("./load_img/退出游戏.png")    failed=pygame.image.load("./load_img/失败.png")    win_img=pygame.image.load("./load_img/胜利.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()                                    #鼠标事件            if event.type==pygame.MOUSEBUTTONDOWN:                            # 鼠标位置                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 :   #失败            screen.blit(failed, (395, 120))        if player.win_bool :  #胜利            screen.blit(win_img, (425, 120))        pygame.display.update()

六、效果展示

截图展示--

游戏界面

第一小关,其他的几关我就没截图了哈

按住U放大这个技能特别可,远攻,其他的攻击太近了,威力不是很大!get!

敌方机甲死亡掉落物品

视频展示--

哈哈哈 效果出来就成!第一份有视频的动态效果满足满足!!之后会努力优化滴~谢谢大家!

Python游戏实战:机甲对战闯关模式大冒险!

感谢各位的阅读,以上就是"Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法"的内容了,经过本文的学习后,相信大家对Python游戏大作炫酷机甲闯关游戏爆肝数千行代码的实现方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0