用Python写了一个空洞机甲小游戏

Python网络爬虫与数据挖掘

共 101609字,需浏览 204分钟

 · 2021-04-20

来源:http://nxw.so/4WSng



先来看看效果图:



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


图片素材和源码的下载链接在文章结尾,大家自行下载即可。


import pygame,sysimport time
import randompygame.init()pygame.mixer.init()FRAM_PER_SECONDS=7clock =pygame.time.Clock()WIDTH=1290HEIGHT=715load_img_x=1290/2-376/2load_img_y=715/2-224/2load_animate=Falsecheck=1 #关卡--标志pause=False#加载动画及音效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)

#出始地图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("空 洞 机 甲 - - - - - ( 河软空洞传奇工作室 版权所有 Copyright @ 2020 ) 感 谢 支 持")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()
#关卡动画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
#机甲玩家角色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
#是否胜利 if self.kill_enemy>=7: self.win_bool=True else: self.win_bool=False


#敌人死亡删除def die_enemy_green(): enemylist.pop()def die_enemy_grey(): enemylist2.pop()def die_enemy_pink(): enemylist3.pop()def die_enemy_Boss(): enemylist4.pop()


#BIG BOSSclass 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
#坦克死亡 if self.die_count >= 60: HP_img_boss = Prop_Hp(random.randint(int(self.x), int(self.x + self.width)), random.randint(int(self.y), int(self.y + self.height))) HP_bool_boss=True player.kill_enemy+=1 self.die_count=0 self.skill_count=0 self.die=False self.walk=True self.speed_Y*=2.5 self.speed*=2.5 self.life=0 self.game_start_Bool = True self.y=500 game_over_music.stop() die_enemy_Boss() return #死亡音效 if self.die_count==20: game_over_music.play()
if self.life_remove_bool: self.walk=False self.skill = False self.attack = False screen.blit(self.life_remove_tuple[self.life_count], (self.x, self.y)) self.life_count += 1 # self.y = player.y + player.height - enemylist4[0].height - 10
elif self.skill and not self.life_remove_bool: if self.skill_count==15: green_jn.play() if self.skill_count==1: green_jn.stop()
screen.blit(self.skill_tuple[self.skill_count], (self.x-150, self.y-50)) self.skill_count+=1 elif self.attack and not self.life_remove_bool: screen.blit(self.attack_tuple[self.attack_count],(self.x-250,self.y)) self.attack_count+=1 if self.attack_count == 10 and self.attack: green_attack_music.play() if self.attack_count == 29 or not self.attack: green_attack_music.stop()
if self.speed>0 and self.walk and not self.die: self.skill = False screen.blit(self.walk_tuple[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.speed<0 and self.walk: screen.blit(self.walk_tuple[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.die: self.life = 0 self.skill = False self.attack = False if self.die_count%2==0 and self.die_count<20: pygame.time.delay(10) screen.fill([0, 0, 0])# 敌人 死亡特效 elif self.die_count%2==1 and self.die_count<20: pygame.time.delay(10) screen.fill([255, 0, 0])# 敌人 死亡特效
self.x += 11 screen.blit(self.arm_tuple[self.arm_count],(700,500)) self.arm_count+=1 screen.blit(self.die_tuple[self.die_count],(self.x,self.y)) self.die_count+=1 # 绘制血条 screen.blit(self.enemy_img, (1160, 0)) pygame.draw.rect(screen, (218, 234, 87), (600 + (15 - self.life) * (540 / 15), 40, (540 / 15) * self.life, 30)) if self.game_start_Bool == False and self.life < 15: pygame.draw.rect(screen, (102, 115, 44), (600, 40, 540 - (540 / 15 * self.life), 30))
# 敌人移动类 def move(self):
#遇敌人反向 if collision_check_fanxiang(player, enemylist4[0]) or collision_check_fanxiang( enemylist4[0], player) : enemylist4[0].speed = enemylist4[0].speed * -1 # 当机甲没有进行攻击时 if player.walk_right or player.stand: #敌人远程技能 if collision_check_tanke(player, enemylist4[0]) and not self.life_remove_bool and not self.die and not self.attack and ( player.stand or player.left or player.right ) and not player.die : self.skill=True self.walk = False # 敌人近程技能 if collision_check_tanke_yellow(player, enemylist4[0]) and not self.life_remove_bool and not self.die and not self.skill and ( player.stand or player.left or player.right ) and not player.die: self.attack = True self.walk = False
if self.die_count >= 60: return
if self.walk: # y移动 if self.speed_Y>0 and not self.die: if self.y<self.Yarea[1]+self.speed_Y: self.y += self.speed_Y else: self.speed_Y=self.speed_Y*(-1) self.y+=self.speed_Y self.walk_count=0 elif self.speed_Y<0 and not self.die: if self.y>self.Yarea[0]-self.speed_Y: self.y+=self.speed_Y else: self.speed_Y = self.speed_Y * (-1) self.y += self.speed_Y self.walk_count = 0
if self.speed>0 and not self.die: # X移动 if self.x<self.area[1]+self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0 elif self.speed<0 and not self.die: # X移动 if self.x>self.area[0]-self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0
#敌人 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
#坦克死亡 if self.die_count >= 57: HP_img_pink = Prop_Hp(random.randint(int(self.x), int(self.x + self.width)), random.randint(int(self.y), int(self.y + self.height))) HP_bool_pink=True player.kill_enemy+=1 self.die_count=0 self.skill_count=0 self.die=False self.walk=True self.speed_Y*=2.5 self.speed*=2.5 self.life=0 self.game_start_Bool=True diren_die_music.stop() die_enemy_pink() return #死亡音效 if self.die_count==20: diren_die_music.play()
if self.life_remove_bool: # if player.jump or player.i: # self.y = player.y + player.height - enemylist3[0].height - 10 self.walk=False self.skill = False self.attack = False screen.blit(self.life_remove_list[self.life_count], (self.x, self.y)) self.life_count += 1 # self.y = player.y + player.height - enemylist3[0].height - 10
elif self.skill and not self.life_remove_bool: if self.skill_count==15: green_jn.play() if self.skill_count==1: green_jn.stop() screen.blit(self.skill_list[self.skill_count], (self.x-150, self.y-50)) self.skill_count+=1 elif self.attack and not self.life_remove_bool: screen.blit(self.attack_list[self.attack_count],(self.x-250,self.y-100)) self.attack_count+=1 if self.attack_count == 10 and self.attack: green_attack_music.play() if self.attack_count == 55 or not self.attack: green_attack_music.stop()
if self.speed>0 and self.walk and not self.die: self.skill = False screen.blit(self.walk_left[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.speed<0 and self.walk: screen.blit(self.walk_left[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.die: self.life = 0 self.skill = False self.attack = False if self.die_count%2==0 and self.die_count<20: pygame.time.delay(20) screen.fill([0, 0, 0])# 敌人 死亡特效 elif self.die_count%2==1 and self.die_count<20: pygame.time.delay(20) screen.fill([255, 0, 0])# 敌人 死亡特效
# if self.die_count<13: # self.y = player.y + player.height - self.height - 10 screen.blit(self.die_list[self.die_count],(self.x,self.y)) self.die_count+=1 # 绘制血条 screen.blit(self.enemy_img, (1040, -45)) pygame.draw.rect(screen, (235, 35, 200), (600 + (3 - self.life) * (540 / 3), 40, (540 / 3) * self.life, 30)) if self.game_start_Bool == False and self.life < 3: pygame.draw.rect(screen, (80, 0, 100), (600, 40, 540 - (540 / 3 * self.life), 30))

# 敌人移动类 def move(self):
#遇敌人反向 if collision_check_fanxiang(player, enemylist3[0]) or collision_check_fanxiang( enemylist3[0], player) : enemylist3[0].speed = enemylist3[0].speed * -1 # 当机甲没有进行攻击时 if player.walk_right or player.stand: #敌人远程技能 if collision_check_tanke_jincheng(player, enemylist3[0]) and not self.life_remove_bool and not self.die and not self.attack and ( player.stand or player.left or player.right ): self.skill=True self.walk = False # 敌人近程技能 if collision_check_tanke(player, enemylist3[0]) and not self.life_remove_bool and not self.die and not self.skill and ( player.stand or player.left or player.right ): self.attack = True self.walk = False
if self.die_count >= 57: return
if self.walk: # y移动 if self.speed_Y>0 and not self.die: if self.y<self.Yarea[1]+self.speed_Y: self.y += self.speed_Y else: self.speed_Y=self.speed_Y*(-1) self.y+=self.speed_Y self.walk_count=0 elif self.speed_Y<0 and not self.die: if self.y>self.Yarea[0]-self.speed_Y: self.y+=self.speed_Y else: self.speed_Y = self.speed_Y * (-1) self.y += self.speed_Y self.walk_count = 0
if self.speed>0 and not self.die: # X移动 if self.x<self.area[1]+self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0 elif self.speed<0 and not self.die: # X移动 if self.x>self.area[0]-self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0
#灰色敌人class Enemy_grey(object): # 声明灰色敌人类 walk_left=() walk_right=() die_list = () life_remove_list = () falsh_list=() skill_list=() # attack_list=()
for pic_num in range(2, 0, -1): # 循环敌人向右行走的图片 walk_right+=(pygame.image.load("./grey/walk/walk (" + str(pic_num) + ").png"),) # 加载向右行走的图片 for pic_num in range(1, 3): # 循环敌人向左行走的图片 walk_left+=(pygame.image.load("./grey/walk/walk (" + str(pic_num) + ").png"),) # 加载向左行走的图片 for pic_num in range(1,22): skill_list+=(pygame.image.load("./grey/skill/skill ("+str(pic_num)+").png"),)
#敌人 先起飞 再死亡 for pic_num in range(1,36): die_list+=(pygame.image.load("./grey/hit/hit ("+str(pic_num)+").png"),) for pic_num in range(1,45): die_list+=(pygame.image.load("./grey/die/die ("+str(pic_num)+").png"),) # 减血 for pic_num in range(1,24): life_remove_list+=(pygame.image.load("./grey/hit/hit ("+str(pic_num)+").png"),)
def __init__(self,x,y,start,end): self.x=x self.y=y self.width=124 self.height=100 self.area=[start,end] self.Yarea = [370, 430] # Y轴 运动 区间 self.walk_count=0 self.speed=-1.9 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.attack=False self.skill=False self.Enemy_Y=0 #保留受伤 Y轴 位置 self.enemy_img = pygame.image.load("./HP/enemy_grey.png") self.HP_img = pygame.image.load("./HP/电池.png") self.game_start_Bool=True def draw(self,screen): global HP_img_grey global HP_bool_grey if self.game_start_Bool: self.life+=0.145 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=1 self.life_remove_bool=False self.walk=True
# 敌方走路 if self.walk_count==2: self.walk_count=0
#机甲掉血 if self.skill_count==12 and not self.life_remove_bool and not self.die: if collision_check_tanke_green(player, enemylist2[0]): player.life -= 8 player.life_remove_bool = True if player.life<=0: player.die=True
#敌方技能 if self.skill_count >= 21: self.skill_count = 1 self.skill=False self.walk=True
#坦克死亡 if self.die_count >= 78: HP_img_grey = Prop_Hp(random.randint(int(self.x), int(self.x + self.width)), random.randint(int(self.y), int(self.y + self.height))) HP_bool_grey=True player.kill_enemy += 1 self.die_count=1 self.skill_count = 1 self.die=False self.walk=True self.speed_Y*=2.4 self.speed*=2.4 self.life=0 self.game_start_Bool=True diren_die_music.stop() die_enemy_grey() return # 死亡音效 if self.die_count==35: diren_die_music.play()
if self.life_remove_bool: self.skill = False self.walk = False self.attack = False if player.jump or player.i: self.y = player.y + player.height - enemylist2[0].height - 10 screen.blit(self.life_remove_list[self.life_count], (self.x-20, self.y-80)) self.life_count += 1
elif self.skill and not self.life_remove_bool: screen.blit(self.skill_list[self.skill_count], (self.x-120, self.y)) self.skill_count+=1
if self.speed>0 and self.walk and not self.die: self.skill = False screen.blit(self.walk_left[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.speed<0 and self.walk and not self.die: screen.blit(self.walk_left[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.die: self.life = 0 self.skill = False self.attack = False if self.die_count%2==0 and self.die_count<20: pygame.time.delay(20) screen.fill([0, 0, 0])# 敌人 死亡特效 elif self.die_count%2==1 and self.die_count<20: pygame.time.delay(20) screen.fill([255, 0, 0])# 敌人 死亡特效
# if self.die_count<20: # self.y=player.y+player.height-self.height-10-120 # else: # self.y = self.Enemy_Y self.die_count+=1
screen.blit(self.die_list[self.die_count], (self.x, self.y)) # 绘制血条 screen.blit(self.enemy_img, (1150, 63)) pygame.draw.rect(screen, (130, 200, 200), (600 + (3 - self.life) * (540 / 3), 100, (540 / 3) * self.life, 30)) if self.game_start_Bool == False and self.life < 3: pygame.draw.rect(screen, (50, 75, 75), (600, 100, 540 - (540 / 3 * self.life), 30))
# 敌人移动类 def move(self): #遇敌人反向 if collision_check_fanxiang(player, enemylist2[0]) or collision_check_fanxiang( enemylist2[0], player) : enemylist2[0].speed = enemylist2[0].speed * -1 # 当机甲没有进行攻击时 if player.walk_right or player.walk_right or player.stand: #远攻 if collision_check_tanke(player, enemylist2[0]) and not self.life_remove_bool and not self.die: self.skill=True self.walk = False
if self.walk: # y移动 if self.speed_Y>0 and not self.die: if self.y<self.Yarea[1]+self.speed_Y: self.y += self.speed_Y else: self.speed_Y=self.speed_Y*(-1) self.y+=self.speed_Y self.walk_count=0 elif self.speed_Y<0 and not self.die: if self.y>self.Yarea[0]-self.speed_Y: self.y+=self.speed_Y else: self.speed_Y = self.speed_Y * (-1) self.y += self.speed_Y self.walk_count = 0
if self.speed>0 and not self.die: # X移动 if self.x<self.area[1]+self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0 elif self.speed<0 and not self.die: # X移动 if self.x>self.area[0]-self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0
#敌人 绿色坦克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
#坦克死亡 if self.die_count >= 103: HP_img_green = Prop_Hp(random.randint(int(self.x), int(self.x + self.width)), random.randint(int(self.y), int(self.y + self.height))) HP_bool_green=True player.kill_enemy+=1 self.die_count=0 self.skill_count=0 self.die=False self.walk=True self.speed_Y*=2.2 self.speed*=2.2 self.life=0 self.game_start_Bool=True diren_die_music.stop() die_enemy_green() return
#死亡音效 if self.die_count==40: diren_die_music.play()
if self.life_remove_bool: if player.jump or player.i: self.y = player.y + player.height - enemylist[0].height - 10 self.walk=False self.skill = False self.attack = False screen.blit(self.life_remove_list[self.life_count], (self.x, self.y)) self.life_count += 1 # self.y = player.y + player.height - enemylist[0].height - 10
if self.skill and not self.life_remove_bool: if self.skill_count==20: green_jn.play() if self.skill_count==1: green_jn.stop() screen.blit(self.skill_list[self.skill_count], (self.x-150, self.y-90)) self.skill_count+=1
if self.attack_count == 1 and self.attack : green_attack_music.play() if self.attack_count == 15 or not self.attack: green_attack_music.stop()
if self.attack and not self.life_remove_bool: screen.blit(self.attack_list[self.attack_count],(self.x-50,self.y)) self.attack_count+=1


if self.speed>0 and self.walk and not self.die: self.skill = False screen.blit(self.walk_left[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.speed<0 and self.walk: screen.blit(self.walk_left[self.walk_count],(self.x,self.y)) self.walk_count+=1 elif self.die: self.skill = False self.attack = False self.life = 0

if self.die_count%2==0 and self.die_count<20: pygame.time.delay(20) screen.fill([0, 0, 0])# 敌人 死亡特效 elif self.die_count%2==1 and self.die_count<20: pygame.time.delay(20) screen.fill([255, 0, 0])# 敌人 死亡特效
screen.blit(self.die_list[self.die_count],(self.x,self.y)) self.die_count+=1 # 绘制血条 screen.blit(self.enemy_img, (1125, 120)) pygame.draw.rect(screen, (0, 200, 115), (600 + (3 - self.life) * (540 / 3), 160, (540 / 3) * self.life, 30)) if self.game_start_Bool == False and self.life < 3: pygame.draw.rect(screen, (0, 65, 20), (600, 160, 540 - (540 / 3 * self.life), 30))
# 敌人移动类 def move(self):
#遇敌人反向 if collision_check_fanxiang(player, enemylist[0]) or collision_check_fanxiang( enemylist[0], player) : enemylist[0].speed = enemylist[0].speed * -1 #当机甲没有进行攻击时 if player.walk_right or player.walk_right or player.stand: #敌人远程技能 if collision_check_tanke(player, enemylist[0]) and not self.life_remove_bool and not self.die and not self.attack: self.skill=True self.walk = False # 敌人近程技能 if collision_check_tanke_jincheng(player, enemylist[0]) and not self.life_remove_bool and not self.die and not self.skill: self.attack = True self.walk = False
if self.die_count >= 63: return
if self.walk: # y移动 if self.speed_Y>0 and not self.die: if self.y<self.Yarea[1]+self.speed_Y: self.y += self.speed_Y else: self.speed_Y=self.speed_Y*(-1) self.y+=self.speed_Y self.walk_count=0 elif self.speed_Y<0 and not self.die: if self.y>self.Yarea[0]-self.speed_Y: self.y+=self.speed_Y else: self.speed_Y = self.speed_Y * (-1) self.y += self.speed_Y self.walk_count = 0
if self.speed>0 and not self.die: # X移动 if self.x<self.area[1]+self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0 elif self.speed<0 and not self.die: # X移动 if self.x>self.area[0]-self.speed: self.x+=self.speed else: self.speed=self.speed*(-1) self.x+=self.speed self.walk_count=0
#血瓶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)
#主要绘制函数def draw_img(): global load_count global FRAM_PER_SECONDS global set_img if load_count>=29: load_count=30 load_music.stop() screen.blit(map_img, (0, 0)) #打开 游戏 战斗背景 音乐 back_music.set_volume(0.06) set_img=pygame.image.load("./load_img/setbig.png") screen.blit(set_img,(10,10)) if HP_bool_green==True: HP_img_green.draw(screen)
if HP_bool_grey==True: HP_img_grey.draw(screen) if HP_bool_pink==True: HP_img_pink.draw(screen)

if len(enemylist) and len(enemylist2) and len(enemylist3): if player.y+player.height < enemylist[0].y+enemylist[0].height < enemylist2[0].y+enemylist2[0].height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist[0].die and not enemylist2[0].die and not enemylist3[0].die: player.draw(screen) enemylist[0].draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) elif enemylist[0].y+enemylist[0].height < player.y+player.height < enemylist2[0].y+enemylist2[0].height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist[0].die and not enemylist2[0].die and not enemylist3[0].die: enemylist[0].draw(screen) player.draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) elif enemylist[0].y+enemylist[0].height < enemylist2[0].y+enemylist2[0].height < player.y+player.height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist[0].die and not enemylist2[0].die and not enemylist3[0].die: enemylist[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) enemylist3[0].draw(screen) elif enemylist[0].y+enemylist[0].height < enemylist2[0].y+enemylist2[0].height < enemylist3[0].y+enemylist3[0].height < player.y+player.height and not player.jump and not enemylist[0].die and not enemylist2[0].die and not enemylist3[0].die: enemylist[0].draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif player.jump : enemylist[0].draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) #敌人受攻击时 先后绘制 elif enemylist[0].life_remove_bool or enemylist[0].die: enemylist[0].draw(screen) enemylist3[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) elif enemylist2[0].life_remove_bool or enemylist2[0].die: enemylist[0].draw(screen) enemylist3[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) elif enemylist3[0].life_remove_bool or enemylist3[0].die: enemylist[0].draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif enemylist[0].life_remove_bool and enemylist2[0].life_remove_bool or enemylist[0].die or enemylist2[0].die: enemylist3[0].draw(screen) enemylist[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) elif enemylist[0].life_remove_bool and enemylist3[0].life_remove_bool or enemylist[0].die or enemylist3[0].die: enemylist2[0].draw(screen) enemylist[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif enemylist2[0].life_remove_bool and enemylist3[0].life_remove_bool or enemylist2[0].die or enemylist3[0].die: enemylist[0].draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) else: enemylist[0].draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen)


elif len(enemylist) and len(enemylist2): #绿色和灰色
if player.y+player.height < enemylist[0].y+enemylist[0].height < enemylist2[0].y+enemylist2[0].height and not player.jump and not enemylist[0].die and not enemylist2[0].die: player.draw(screen) enemylist[0].draw(screen) enemylist2[0].draw(screen)
elif enemylist[0].y+enemylist[0].height < player.y+player.height < enemylist2[0].y+enemylist2[0].height and not player.jump and not enemylist[0].die and not enemylist2[0].die:
enemylist[0].draw(screen) player.draw(screen) enemylist2[0].draw(screen)
elif enemylist[0].y + enemylist[0].height < enemylist2[0].y + enemylist2[0].height < player.y + player.height and not player.jump and not enemylist[0].die and not enemylist2[0].die: enemylist[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) elif player.jump : player.draw(screen) enemylist[0].draw(screen) enemylist2[0].draw(screen) # 敌人受攻击时 先后绘制 elif enemylist[0].life_remove_bool or enemylist[0].die:#绿色 enemylist[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) elif enemylist2[0].life_remove_bool or enemylist2[0].die:#灰色 enemylist[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen) elif enemylist[0].life_remove_bool and enemylist2[0].life_remove_bool or enemylist[0].die or enemylist2[0].die:#绿色和灰色 enemylist[0].draw(screen) enemylist2[0].draw(screen) player.draw(screen)
elif len(enemylist) and len(enemylist3): #绿色和粉色
if player.y+player.height < enemylist[0].y+enemylist[0].height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist[0].die and not enemylist3[0].die: player.draw(screen) enemylist[0].draw(screen) enemylist3[0].draw(screen) elif enemylist[0].y+enemylist[0].height < player.y+player.height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist[0].die and not enemylist3[0].die: enemylist[0].draw(screen) player.draw(screen) enemylist3[0].draw(screen) elif enemylist[0].y + enemylist[0].height < enemylist3[0].y + enemylist3[0].height < player.y + player.height and not player.jump and not enemylist[0].die and not enemylist3[0].die: enemylist[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif player.jump : player.draw(screen) enemylist[0].draw(screen) enemylist3[0].draw(screen) # 敌人受攻击时 先后绘制 elif enemylist[0].life_remove_bool or enemylist[0].die: # 绿色 enemylist[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif enemylist3[0].life_remove_bool or enemylist3[0].die: # 粉色 enemylist[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif enemylist[0].life_remove_bool and enemylist3[0].life_remove_bool or enemylist[0].die or enemylist3[0].die: # 绿色和灰色 enemylist[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen)
elif len(enemylist2) and len(enemylist3): #粉色和灰色
if player.y+player.height < enemylist2[0].y+enemylist2[0].height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist2[0].die and not enemylist3[0].die: player.draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen)
elif enemylist2[0].y+enemylist2[0].height < player.y+player.height < enemylist3[0].y+enemylist3[0].height and not player.jump and not enemylist2[0].die and not enemylist3[0].die:
enemylist2[0].draw(screen) player.draw(screen) enemylist3[0].draw(screen)
elif enemylist2[0].y + enemylist2[0].height < enemylist3[0].y + enemylist3[0].height < player.y + player.height and not player.jump and not enemylist2[0].die and not enemylist3[0].die:
enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif player.jump : player.draw(screen) enemylist2[0].draw(screen) enemylist3[0].draw(screen) # 敌人受攻击时 先后绘制 elif enemylist3[0].life_remove_bool or enemylist3[0].die: # 粉色 enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif enemylist2[0].life_remove_bool or enemylist2[0].die: # 灰色 enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen) elif enemylist[0].life_remove_bool and enemylist2[0].life_remove_bool or enemylist2[0].die or enemylist3[0].die: # 绿色和灰色 enemylist2[0].draw(screen) enemylist3[0].draw(screen) player.draw(screen)
elif len(enemylist): #绿色 if player.y + player.height < enemylist[0].y + enemylist[0].height and not player.jump and not enemylist[0].die : player.draw(screen) enemylist[0].draw(screen) else: enemylist[0].draw(screen) player.draw(screen) elif len(enemylist2): #灰色 if player.y + player.height < enemylist2[0].y + enemylist2[0].height and not player.jump and not enemylist2[0].die: player.draw(screen) enemylist2[0].draw(screen) else: enemylist2[0].draw(screen) player.draw(screen) elif len(enemylist3): #灰色 if player.y + player.height < enemylist3[0].y + enemylist3[0].height and not player.jump and not enemylist3[0].die: player.draw(screen) enemylist3[0].draw(screen) else: enemylist3[0].draw(screen) player.draw(screen)
if len(enemylist)+ len(enemylist2) +len(enemylist4)+ len(enemylist3)==0 and check==1 and player.kill_enemy<3: print(check) enemylist.append(green) enemylist2.append(grey) enemylist3.append(pink) player.draw(screen) # enemylist4.append(boss) elif len(enemylist)+ len(enemylist2) +len(enemylist4)+ len(enemylist3)==0 and check==2 and player.kill_enemy<6: print(check) enemylist.append(green) enemylist2.append(grey) enemylist3.append(pink) player.draw(screen) # enemylist4.append(boss) elif len(enemylist)+ len(enemylist2) +len(enemylist4)+ len(enemylist3)==0 and check==3 and player.kill_enemy<7: print(check) # enemylist.append(green) # enemylist2.append(grey) # enemylist3.append(pink) enemylist4.append(boss) player.draw(screen) elif len(enemylist) + len(enemylist2) +len(enemylist4) + len(enemylist3) == 0 and player.kill_enemy==7 and check==3: player.draw(screen) Check_fun.draw(screen)#箭头 -- 动态 check_music.play() elif len(enemylist) + len(enemylist2) +len(enemylist4) + len(enemylist3) == 0 and player.kill_enemy==6 and check==2: player.draw(screen) Check_fun.draw(screen)#箭头 -- 动态 check_music.play() elif len(enemylist) + len(enemylist2) +len(enemylist4) + len(enemylist3) == 0 and player.kill_enemy==3 and check==1: player.draw(screen) Check_fun.draw(screen)#箭头 -- 动态 check_music.play()
if len(enemylist4) and len(enemylist) + len(enemylist2) + len(enemylist3) >0: enemylist4[0].draw(screen) elif len(enemylist4) and len(enemylist) + len(enemylist2) + len(enemylist3) == 0: player.draw(screen) enemylist4[0].draw(screen)
jn = pygame.image.load("./cd/Equipmentbarl.png") screen.blit(jn, (200, 565)) if player.cd and player.i: screen.blit(player.cd_tuple[player.cd_count], (210, 575)) player.cd_count += 1 elif player.cd and player.flc: screen.blit(player.cd_tuple[player.cd_count], (280, 575)) player.cd_count += 1 elif player.cd and player.attack_Bool: screen.blit(player.cd_tuple[player.cd_count], (350, 575)) player.cd_count += 1 elif player.cd and player.all: screen.blit(player.cd_tuple[player.cd_count], (420, 575)) player.cd_count += 1

LEVEL = font.render("LEVEL : " + str(player.level), True, (60, 200, 200)) screen.blit(LEVEL, (210, 530)) # 绘制血条 screen.blit(player.player_img, (10, 520)) pygame.draw.rect(screen, (72, 32, 38), (200, 650, 750, 35)) pygame.draw.rect(screen, (230, 65, 92), (200, 650, (750 / 100) * player.life, 35))
FRAM_PER_SECONDS = 16
elif load_count<=28: screen.blit(load_image[load_count],(load_img_x,load_img_y)) load_count+=1
def game_load(): # load_music.play() global game_start global game_end screen.blit(start_back, (0, 0)) game_start=pygame.image.load("./load_img/开始游戏1.png") game_end=pygame.image.load("./load_img/退出游戏2.png")
screen.blit(game_start, (446,300)) screen.blit(game_end,(446,500)) if start_flag==True: screen.fill((16,16,16)) draw_img()
def start_button(): global start_flag global pause for event in pygame.event.get(): if load_animate == True: pass elif event.type==pygame.MOUSEBUTTONDOWN: if start_flag == False and (406 <= pygame.mouse.get_pos()[0] <= 406 + game_start.get_width()) and (300 <= pygame.mouse.get_pos()[1] <= 300 + game_start.get_height()): start_flag=True start_music.stop() # 游戏开始音效 load_music.play(-1)
if start_flag == False and (406 <= pygame.mouse.get_pos()[0] <= 406 + game_end.get_width()) and (500 <= pygame.mouse.get_pos()[1] <= 500 + game_end.get_height()): sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: if (10 <= event.pos[0] <= 10 + 121) and (10 <= event.pos[1] <= 10 + 95) and pause == False: pause = True paused()
#拾取血包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

#敌人技能 近程技能def collision_check_tanke_yellow(a,b): temp1= (b.x+b.width>a.x+a.width+210>b.x) #角色的攻击区间 容错区间 temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45) return temp1 and temp2
#敌人技能 近程技能def collision_check_tanke_jincheng(a,b): temp1= (b.x+b.width>a.x+a.width+50>b.x) #角色的攻击区间 容错区间 temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45) return temp1 and temp2
#绿色敌人技能 近程技能def collision_check_tanke_green(a,b): temp1= (b.x+b.width>a.x+a.width+150>b.x) #角色的攻击区间 容错区间 temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45) return temp1 and temp2
#敌人技能 远攻技能def collision_check_tanke(a,b): temp1= (b.x+b.width>a.x+a.width+170>b.x) #角色的攻击区间 容错区间 temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45) return temp1 and temp2
#敌人 遇我 进行反向def collision_check_fanxiang(a,b): temp1= (b.x+b.width>=a.x+a.width>=b.x) #角色的攻击区间 容错区间 temp2= (-19<(b.y+b.height)-(a.y+a.height)<=35) return temp1 and temp2
#基本技能 碰撞检测 类def collision_check(a,b): temp1= (b.x+b.width>a.x+a.width+150>b.x) #角色的攻击区间 容错区间 temp2= (-60<(b.y+b.height)-(a.y+a.height)<=60) return temp1 and temp2#机甲飞踢 碰撞检测 类def collision_check_foot(a,b): temp1= (b.x+b.width>a.x+a.width+150>b.x) #角色的攻击区间 容错区间 temp2= (-60<(b.y+b.height)-(a.y+a.height)<=60) return temp1 and temp2
#碰撞检测函数def collision_check_HP(a,b): temp1 = (b.x<=a.x+a.width<=b.x+b.width) temp2 = (b.y<=a.y+a.height<=b.y+b.height) return temp1 and temp2
#all 技能def U_Testing(enemy_obj): if len(enemy_obj): if not enemy_obj[0].die: enemy_obj[0].x+=100 enemy_obj[0].life -= 3 enemy_obj[0].life_remove_bool = True enemy_obj[0].walk = False enemy_obj[0].skill = False enemy_obj[0].attack = False enemy_obj[0].x += 20 if enemy_obj[0].life <= 0: enemy_obj[0].life_remove_bool = False enemy_obj[0].die = True enemy_obj[0].walk = False

#三段普攻def J_Testing(enemy_obj): if len(enemy_obj): if collision_check(player, enemy_obj[0]) and not enemy_obj[0].die: enemy_obj[0].life -= 3 enemy_obj[0].life_remove_bool = True enemy_obj[0].walk = False enemy_obj[0].skill = False enemy_obj[0].attack = False enemy_obj[0].x += 20
if enemy_obj[0].life <= 0:

enemy_obj[0].life_remove_bool = False enemy_obj[0].die = True enemy_obj[0].walk = False
#跳跃检测def Jump_Testing(enemy_obj): if len(enemy_obj): if enemy_obj[0].x + enemy_obj[0].width > player.x > enemy_obj[0].x and player.y + player.height > enemy_obj[0].y + enemy_obj[0].height - 40 and player.y + player.height < enemy_obj[0].y + enemy_obj[0].height + 40: player.x = enemy_obj[0].width + enemy_obj[0].x + 15 player.right = True # 设置进行禁止穿模 位移到两侧 # player.walk=True if player.x < enemy_obj[0].x < player.x + player.width and player.y + player.height > enemy_obj[0].y + enemy_obj[0].height - 40 and player.y + player.height < enemy_obj[0].y + enemy_obj[0].height + 40: player.x = enemy_obj[0].x - player.width - 15 player.left = True # 设置进行禁止穿模 位移到两侧 # player.walk=True#I技能检测def I_Testing(enemy_obj): if len(enemy_obj): enemy_obj[0].Enemy_Y = enemy_obj[0].y if collision_check(player, enemy_obj[0]): enemy_obj[0].Enemy_Y = enemy_obj[0].y enemy_obj[0].life_remove_bool = True enemy_obj[0].y = player.y + player.height - enemy_obj[0].height - 100 enemy_obj[0].skill = False enemy_obj[0].attack = False enemy_obj[0].walk = False enemy_obj[0].life -= 4 enemy_obj[0].x += 20 if enemy_obj[0].life <= 0:

enemy_obj[0].life_remove_bool = False enemy_obj[0].die = True enemy_obj[0].walk = False return enemy_obj

#暂停def unpause(): global pause back_music.set_volume(0.06) pause=False
#设置def paused(): global flag global check global pause zanting=pygame.image.load("./load_img/返回游戏.png") #图片按钮 quit_img=pygame.image.load("./load_img/退出游戏.png") #图片按钮 restart_img = pygame.image.load("./load_img/重新开始.png") #图片按钮 logo_img=pygame.image.load("./load_img/logo.png") #图片按钮 screen.blit(zanting, (185,190)) screen.blit(restart_img, (185, 280)) screen.blit(quit_img, (185, 370)) screen.blit(logo_img,(595,150)) back_music.set_volume(0) #背景音乐暂停 while pause: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() # quit() if load_count>=29 and pause==True: if event.type == pygame.MOUSEBUTTONDOWN : #继续游戏-- 点击屏幕 MENU 按钮 第一种继续游戏 if (10 <= event.pos[0] <= 10 + set_img.get_width()) and (10 <= event.pos[1] <= 10 + set_img.get_height()): unpause() if event.type == pygame.MOUSEBUTTONDOWN: #继续游戏-- 点击屏幕 继续游戏 菜单 第二种继续游戏 if (185 <= event.pos[0] <= 185 + zanting.get_width()) and (190 <= event.pos[1] <= 190 + zanting.get_height()): unpause() if event.type == pygame.MOUSEBUTTONDOWN: #退出游戏--按钮 if (185 <= event.pos[0] <= 185 + zanting.get_width()) and (370 <= event.pos[1] <= 370 + zanting.get_height()): sys.exit() if event.type == pygame.MOUSEBUTTONDOWN: #重新开始--按钮 if (185 <= event.pos[0] <= 185 + zanting.get_width()) and (280 <= event.pos[1] <= 280 + zanting.get_height()): check=5 unpause()
pygame.display.update()
y=100HP_bool_green=FalseHP_bool_grey=FalseHP_bool_pink=Falsedef start(): global load_animate global check global map_img global enemylist global enemylist2 global enemylist3 global enemylist4 global HP_bool_green global HP_bool_grey global HP_bool_pink global player global Check_fun global green global grey global boss global pause global pink global keys enemylist = [] enemylist2 = [] enemylist3 = [] enemylist4 = [] player = Player(160, 410, 100, 100)
Check_fun = check_fun() green = Enemy(random.randint(500, WIDTH - 133), 420, 500, WIDTH - 153) grey = Enemy_grey(random.randint(500, WIDTH - 133), 430, 500, WIDTH - 203) pink = Enemy_pink(random.randint(500, WIDTH - 133), 440, 500, WIDTH - 401) boss = Boss(random.randint(500, WIDTH - 133), 440, 500, WIDTH -400) enemylist.append(green) enemylist2.append(grey) enemylist3.append(pink) # enemylist4.append(boss)
while True: clock.tick(FRAM_PER_SECONDS) #可以说是循环执行的次数 #我认为只是设置游戏运行的速度,或者设置while循环更新自身、运行自身的频率 game_load() start_button()
for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN: if load_animate: load_animate=False screen.fill((16,16,16))
keys = pygame.key.get_pressed() # 获取所有键盘事件
if pause==False and start_flag: if keys[pygame.K_ESCAPE]: pause=True paused()
if player.life<=0: player.die=True if player.die_count>=64: player.die=False return ""
#全局速度 if keys[pygame.K_LSHIFT] : player.speed = 4 if keys[pygame.K_LSHIFT] and pygame.key.get_mods() & keys[pygame.K_k]: player.speed=6 else: if len(enemylist)+ len(enemylist2) +len(enemylist3) +len(enemylist4) ==4:
player.speed = 1 elif len(enemylist)+ len(enemylist2) +len(enemylist3) +len(enemylist4) ==3:
player.speed = 3 elif len(enemylist) + len(enemylist2) + len(enemylist3) +len(enemylist4) == 2:
player.speed = 5 elif len(enemylist) + len(enemylist2) + len(enemylist3) +len(enemylist4) == 1: player.speed = 10 else: player.speed = 15

# 敌人绿色 穿模设置
if len(enemylist) and keys[pygame.K_d] and player.x < WIDTH-player.height : # D 键走动 禁止与敌人穿模 #当敌人死亡时 直线行走 if keys[pygame.K_d] and player.x < WIDTH and not player.attack_Bool and enemylist[0].die : player.x += player.speed player.right = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_d] and ((player.y+player.height<=enemylist[0].y+enemylist[0].height-40) or (player.y+player.height>=enemylist[0].y+enemylist[0].height+20 )): player.x+=player.speed player.right = True player.stand = False # player.jump = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist[0].die and keys[pygame.K_d] and (player.x+player.width <= enemylist[0].x-10 or player.x>=enemylist[0].x+enemylist[0].width): player.x+=player.speed player.right = True player.stand = False # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist[0].die and keys[pygame.K_d] and player.x+player.width > enemylist[0].x : player.stand=True player.left=False player.right=True #左键 if len(enemylist) and keys[pygame.K_a] and player.x >0: # 当敌人死亡时 直线行走 if keys[pygame.K_a] and player.x > 0 and not player.attack_Bool and enemylist[0].die: player.x -= player.speed player.left = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_a] and (player.y + player.height <= enemylist[0].y + enemylist[0].height - 40 or player.y + player.height >= enemylist[0].y + enemylist[0].height + 20): player.x -= player.speed player.left = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist[0].die and keys[pygame.K_a] and (( player.x >= enemylist[0].x+enemylist[0].width+10) or (player.x+player.width <enemylist[0].x)): player.x -= player.speed player.left = True player.stand = False # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist[0].die and keys[pygame.K_a] and player.x < enemylist[0].x+enemylist[0].width : player.stand = True player.left = True player.right = False #w 键 上 禁止穿模 if len(enemylist) and keys[pygame.K_w] and player.y+player.height >390 and not player.jump and not player.i: # 当敌人死亡时 直线行走 if keys[pygame.K_w] and player.y > 390 and not player.attack_Bool and not player.jump and enemylist[0].die: player.y -= player.speed player.left = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_w] and ((player.x + player.width < enemylist[0].x) or (player.x > enemylist[0].x + enemylist[0].width )): player.y -= player.speed player.left = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist[0].die and keys[pygame.K_w] and ( player.y+player.height >= enemylist[0].y+enemylist[0].height+20 or player.y+player.height <= enemylist[0].y+enemylist[0].height-40): player.y -= player.speed player.left = True player.stand = False if player.y+player.height>enemylist[0].y+enemylist[0].height and player.y+player.height-enemylist[0].y-enemylist[0].height<20: player.y=enemylist[0].y+enemylist[0].height+20-player.height # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist[0].die and keys[pygame.K_w] and player.y+player.height < enemylist[0].y+enemylist[0].height+20 and player.y+player.height > enemylist[0].y+enemylist[0].height-40 : player.y = enemylist[0].y + enemylist[0].height+20-player.height if player.y>640: player.y=640 player.stand=True player.right=False player.left=True # s 键 上 禁止穿模 if len(enemylist) and keys[pygame.K_s] and player.y + player.height < 640 and not player.jump and not player.i: # 当敌人死亡时 直线行走 if keys[pygame.K_s] and player.y < 640 and not player.attack_Bool and not player.jump and enemylist[0].die: player.y += player.speed player.right = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_s] and ((player.x + player.width < enemylist[0].x) or (player.x > enemylist[0].x + enemylist[0].width)): player.y += player.speed player.right = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist[0].die and keys[pygame.K_s] and (player.y + player.height >= enemylist[0].y + enemylist[0].height + 20 or player.y + player.height <=enemylist[0].y + enemylist[0].height - 40): player.y += player.speed player.right = True player.stand = False if player.y+player.height<enemylist[0].y+enemylist[0].height and player.y + player.height - enemylist[0].y - enemylist[0].height > -40: player.y = enemylist[0].y + enemylist[0].height -40 - player.height # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist[0].die and keys[pygame.K_s] and player.y + player.height > enemylist[0].y + enemylist[0].height - 40 and player.y + player.height < enemylist[0].y + enemylist[0].height + 20 : player.y = enemylist[0].y + enemylist[0].height-40-player.height if player.y<390: player.y=390 player.left = False player.right = True player.stand = True

# 敌人灰色 穿模设置
if len(enemylist2) and keys[pygame.K_d] and player.x < WIDTH - player.height: # D 键走动 禁止与敌人穿模 # 当敌人死亡时 直线行走 if keys[pygame.K_d] and player.x < WIDTH and not player.attack_Bool and enemylist2[0].die: player.x += player.speed player.right = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_d] and ((player.y + player.height <= enemylist2[0].y + enemylist2[0].height - 40) or (player.y + player.height >= enemylist2[0].y + enemylist2[0].height + 20)): player.x += player.speed player.right = True player.stand = False # player.jump = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist2[0].die and keys[pygame.K_d] and (player.x + player.width <= enemylist2[0].x - 10 or player.x >= enemylist2[0].x + enemylist2[0].width): player.x += player.speed player.right = True player.stand = False # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist2[0].die and keys[pygame.K_d] and player.x + player.width > enemylist2[0].x: player.stand = True player.left = False player.right = True # 左键 if len(enemylist2) and keys[pygame.K_a] and player.x > 0: # 当敌人死亡时 直线行走 if keys[pygame.K_a] and player.x > 0 and not player.attack_Bool and enemylist2[0].die: player.x -= player.speed player.left = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_a] and (player.y + player.height <= enemylist2[0].y + enemylist2[0].height - 40 or player.y + player.height >= enemylist2[0].y + enemylist2[0].height + 20): player.x -= player.speed player.left = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist2[0].die and keys[pygame.K_a] and ((player.x >= enemylist2[0].x + enemylist2[0].width + 10) or (player.x + player.width < enemylist2[0].x)): player.x -= player.speed player.left = True player.stand = False # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist2[0].die and keys[pygame.K_a] and player.x < enemylist2[0].x + enemylist2[0].width: player.stand = True player.left = True player.right = False # w 键 上 禁止穿模 if len(enemylist2) and keys[pygame.K_w] and player.y + player.height > 390 and not player.jump and not player.i: # 当敌人死亡时 直线行走 if keys[pygame.K_w] and player.y > 390 and not player.attack_Bool and not player.jump and enemylist2[0].die: player.y -= player.speed player.left = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_w] and ((player.x + player.width < enemylist2[0].x) or (player.x > enemylist2[0].x + enemylist2[0].width)): player.y -= player.speed player.left = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist2[0].die and keys[pygame.K_w] and (player.y + player.height >= enemylist2[0].y + enemylist2[0].height + 20 or player.y + player.height <= enemylist2[0].y + enemylist2[0].height - 40): player.y -= player.speed player.left = True player.stand = False if player.y + player.height > enemylist2[0].y + enemylist2[0].height and player.y + player.height - enemylist2[0].y - enemylist2[0].height < 20: player.y = enemylist2[0].y + enemylist2[0].height + 20 - player.height # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist2[0].die and keys[pygame.K_w] and player.y + player.height < enemylist2[0].y + enemylist2[0].height + 20 and player.y + player.height > enemylist2[0].y + enemylist2[0].height - 40: player.y = enemylist2[0].y + enemylist2[0].height + 20 - player.height if player.y > 640: player.y = 640 player.stand = True player.right = False player.left = True # s 键 上 禁止穿模 if len(enemylist2) and keys[pygame.K_s] and player.y + player.height < 640 and not player.jump and not player.i: # 当敌人死亡时 直线行走 if keys[pygame.K_s] and player.y < 640 and not player.attack_Bool and not player.jump and enemylist2[0].die: player.y += player.speed player.right = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_s] and ((player.x + player.width < enemylist2[0].x) or (player.x > enemylist2[0].x + enemylist2[0].width)): player.y += player.speed player.right = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist2[0].die and keys[pygame.K_s] and (player.y + player.height >= enemylist2[0].y + enemylist2[0].height + 20 or player.y + player.height <= enemylist2[0].y + enemylist2[0].height - 40): player.y += player.speed player.right = True player.stand = False if player.y + player.height < enemylist2[0].y + enemylist2[0].height and player.y + player.height - enemylist2[0].y - enemylist2[0].height > -40: player.y = enemylist2[0].y + enemylist2[0].height - 40 - player.height # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist2[0].die and keys[pygame.K_s] and player.y + player.height > enemylist2[0].y + enemylist2[0].height - 40 and player.y + player.height < enemylist2[0].y + enemylist2[0].height + 20: player.y = enemylist2[0].y + enemylist2[0].height - 40 - player.height if player.y < 390: player.y = 390 player.left = False player.right = True player.stand = True
# 敌人灰色 穿模设置
if len(enemylist3) and keys[pygame.K_d] and player.x < WIDTH - player.height: # D 键走动 禁止与敌人穿模 # 当敌人死亡时 直线行走 if keys[pygame.K_d] and player.x < WIDTH and not player.attack_Bool and enemylist3[0].die: player.x += player.speed player.right = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_d] and ((player.y + player.height <= enemylist3[0].y + enemylist3[0].height - 40) or (player.y + player.height >= enemylist3[0].y + enemylist3[0].height + 20)): player.x += player.speed player.right = True player.stand = False # player.jump = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist3[0].die and keys[pygame.K_d] and (player.x + player.width <= enemylist3[0].x - 10 or player.x >= enemylist3[0].x + enemylist3[0].width): player.x += player.speed player.right = True player.stand = False # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist3[0].die and keys[pygame.K_d] and player.x + player.width > enemylist3[0].x: player.stand = True player.left = False player.right = True # 左键 if len(enemylist3) and keys[pygame.K_a] and player.x > 0: # 当敌人死亡时 直线行走 if keys[pygame.K_a] and player.x > 0 and not player.attack_Bool and enemylist3[0].die: player.x -= player.speed player.left = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_a] and (player.y + player.height <= enemylist3[0].y + enemylist3[0].height - 40 or player.y + player.height >= enemylist3[0].y + enemylist3[0].height + 20): player.x -= player.speed player.left = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist3[0].die and keys[pygame.K_a] and ((player.x >= enemylist3[0].x + enemylist3[0].width + 10) or (player.x + player.width < enemylist3[0].x)): player.x -= player.speed player.left = True player.stand = False # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist3[0].die and keys[pygame.K_a] and player.x < enemylist3[0].x + enemylist3[0].width: player.stand = True player.left = True player.right = False # w 键 上 禁止穿模 if len(enemylist3) and keys[pygame.K_w] and player.y + player.height > 390 and not player.jump and not player.i: # 当敌人死亡时 直线行走 if keys[pygame.K_w] and player.y > 390 and not player.attack_Bool and not player.jump and enemylist3[0].die: player.y -= player.speed player.left = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_w] and ((player.x + player.width < enemylist3[0].x) or (player.x > enemylist3[0].x + enemylist3[0].width)): player.y -= player.speed player.left = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist3[0].die and keys[pygame.K_w] and (player.y + player.height >= enemylist3[0].y + enemylist3[0].height + 20 or player.y + player.height <= enemylist3[0].y + enemylist3[0].height - 40): player.y -= player.speed player.left = True player.stand = False if player.y + player.height > enemylist3[0].y + enemylist3[0].height and player.y + player.height - enemylist3[0].y - enemylist3[0].height < 20: player.y = enemylist3[0].y + enemylist3[0].height + 20 - player.height # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist3[0].die and keys[pygame.K_w] and player.y + player.height < enemylist3[0].y + enemylist3[0].height + 20 and player.y + player.height > enemylist3[0].y + enemylist3[0].height - 40: player.y = enemylist3[0].y + enemylist3[0].height + 20 - player.height if player.y > 640: player.y = 640 player.stand = True player.right = False player.left = True # s 键 上 禁止穿模 if len(enemylist3) and keys[pygame.K_s] and player.y + player.height < 640 and not player.jump and not player.i: # 当敌人死亡时 直线行走 if keys[pygame.K_s] and player.y < 640 and not player.attack_Bool and not player.jump and enemylist3[0].die: player.y += player.speed player.right = True player.stand = False # 当与敌人不在一个 视觉水平时 直线行走 elif keys[pygame.K_s] and ((player.x + player.width < enemylist3[0].x) or (player.x > enemylist3[0].x + enemylist3[0].width)): player.y += player.speed player.right = True player.stand = False # 设置行走区间 敌人起点是终点 动态区间 elif not enemylist3[0].die and keys[pygame.K_s] and (player.y + player.height >= enemylist3[0].y + enemylist3[0].height + 20 or player.y + player.height <= enemylist3[0].y + enemylist3[0].height - 40): player.y += player.speed player.right = True player.stand = False if player.y + player.height < enemylist3[0].y + enemylist3[0].height and player.y + player.height - enemylist3[0].y - enemylist3[0].height > -40: player.y = enemylist3[0].y + enemylist3[0].height - 40 - player.height # 设置行走区间与敌人接触时 将机甲 停止 elif not enemylist3[0].die and keys[pygame.K_s] and player.y + player.height > enemylist3[0].y + enemylist3[0].height - 40 and player.y + player.height < enemylist3[0].y + enemylist3[0].height + 20: player.y = enemylist3[0].y + enemylist3[0].height - 40 - player.height if player.y < 390: player.y = 390 player.left = False player.right = True player.stand = True
#切换地图 关卡结束 if keys[pygame.K_d] and player.x > WIDTH-player.width and len(enemylist)+ len(enemylist2)+ len(enemylist3) + len(enemylist4)==0 and check==3: check+=1 HP_bool_green=False HP_bool_grey=False HP_bool_pink=False # 切换 游戏第三场景 elif keys[pygame.K_d] and player.x > WIDTH-player.width and len(enemylist)+ len(enemylist2)+ len(enemylist3) + len(enemylist4)==0 and check==2: HP_bool_green = False HP_bool_grey = False HP_bool_pink = False player.x = 0 map_img=pygame.image.load("map_img/right.jpg") check+= 1 #切换 游戏第二场景 elif keys[pygame.K_d] and player.x > WIDTH-player.width and len(enemylist)+ len(enemylist2)+ len(enemylist3) + len(enemylist4)==0 and check==1: HP_bool_green = False HP_bool_grey = False HP_bool_pink = False player.x = 0 map_img=pygame.image.load("map_img/center.jpg") check+=1 elif check==1 and player.kill_enemy==0: HP_bool_green = False HP_bool_grey = False HP_bool_pink = False map_img=pygame.image.load("map_img/left.jpg") #游戏 结束 选择重新开始 和退出 if check==4: return "" if check==5: return ""
if len(enemylist)+ len(enemylist2) +len(enemylist3) +len(enemylist4) <4: if keys[pygame.K_d] and player.x < WIDTH and player.x > -20: player.x+=player.speed player.left=False player.right = True player.stand = False # player.jump = False
if keys[pygame.K_a] and player.x < WIDTH and player.x > 0: player.x -= player.speed player.left = True player.right = False player.stand = False # player.jump = False if keys[pygame.K_w] and player.y+player.height >390 and not player.jump: player.y-=player.speed player.left = True player.right = False player.stand = False # player.jump = False if keys[pygame.K_s] and player.y + player.height < 640 and not player.jump: player.y+=player.speed player.left = True player.right = False player.stand = False player.jump = False
if not keys[pygame.K_d] and not keys[pygame.K_w] and not keys[pygame.K_s] and not keys[pygame.K_a] : walk_music.stop() player.stand=True
#三段普攻 if keys[pygame.K_j] and not player.attack_Bool and not player.life_remove_bool: player.cd = True J_Testing(enemylist) J_Testing(enemylist2) J_Testing(enemylist3) J_Testing(enemylist4) player.stand = False player.attack_Bool = True player.attack += 1 if player.attack > 3: player.attack = 0 player.attack_Bool = False player.stand = True
if keys[pygame.K_u]: player.all=True player.cd = True

#flc o 键技能 if not player.flc and keys[pygame.K_o] and not keys[pygame.K_w] and not keys[pygame.K_s] and not player.life_remove_bool: if keys[pygame.K_o] and not player.jump and not player.i : J_Testing(enemylist) J_Testing(enemylist2) J_Testing(enemylist3) J_Testing(enemylist4) player.cd = True player.flc=True player.stand = False player.attack_Bool = True player.attack += 1 if player.attack > 3: player.attack = 0 player.attack_Bool = False player.stand = True
if not player.i and not keys[pygame.K_w] and not keys[pygame.K_s] : if keys[pygame.K_i] and not player.jump and not player.flc and not player.life_remove_bool: player.cd=True global en1 global en2 global en3 en1=I_Testing(enemylist) en2=I_Testing(enemylist2) en3=I_Testing(enemylist3) en4=I_Testing(enemylist4)

player.i=True player.jn_count = 1 elif player.i: if player.t>=-10:#开始向上升 a=1 if player.t<0:#向下落的时候 a=-1 player.y-=0.5*a*(player.t**2) player.t-=1 else:#落地后 if len(enemylist): en1[0].y = en1[0].Enemy_Y if len(enemylist2): en2[0].y = en2[0].Enemy_Y if len(enemylist3): en3[0].y = en3[0].Enemy_Y if len(enemylist4): en4[0].y = en4[0].Enemy_Y
player.i =False player.stand=True player.t=10 player.jn_count=1

if not player.jump: if keys[pygame.K_k] and not keys[pygame.K_w] and not keys[pygame.K_s] and not player.i: player.jump=True#设置跳跃 else: # 三段普攻 if keys[pygame.K_j] and not player.attack_Bool and not player.life_remove_bool: player.cd = True J_Testing(enemylist) J_Testing(enemylist2) J_Testing(enemylist3) J_Testing(enemylist4) player.stand = False player.attack_Bool = True player.attack += 1 if player.attack > 3: player.attack = 0 player.attack_Bool = False player.stand = True player.stand = False player.attack_Bool = True player.attack += 1 if player.attack > 3: player.attack = 0 player.attack_Bool = False player.stand = True if player.t>=-10:#开始向上升 a=1 if player.t<0:#向下落的时候 a=-1 player.y-=0.5*a*(player.t**2) player.t-=1 else:#落地后 player.jump = False player.t = 10 player.jump_count = 1 #跳跃检测 Jump_Testing(enemylist) Jump_Testing(enemylist2) Jump_Testing(enemylist3) Jump_Testing(enemylist4) pygame.display.update()
# 结束类 增加图片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()
run=Trueif __name__ == '__main__': flag=True while flag: game_result=start() if game_result=="":            flag=game_over()


图片素材以及源码下载:


百度云链接: 

https://pan.baidu.com/s/1wWBIvnCF062sUP-fSdPXig

提取码: khbq

点击关注【python入门与进阶】,阅读更多精彩内容
👇👇👇

浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报