Pygame实战:爆肝!几千行代码实现《机甲闯关冒险游戏》太牛了

Pygame实战:爆肝!几千行代码实现《机甲闯关冒险游戏》太牛了

首页角色扮演机甲地下城更新时间:2024-07-30
导语

大家早上好哈!——有没有想我啊?

木木子来啦,今日上线放一波大招给大家!

刚学会了录制视频,之后的效果动态显示终于完美录制出来了!今天跟着小编更新一波大家期待的游戏系列吧~

是不是好开森、好兴奋呀!来来来……小编跟你一起去看看!

​​

正文

本文呢是开源的游戏项目哈——小编按照自己的想法加工优化一下给大家展示效果滴!

一、小编有话说

其实这款游戏是一款机甲对战的模式——下面我说的话不要捶我哈,狗头保命.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 =15.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 =15.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 = True5.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 = True5.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 = True5.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)6.0捡血包

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 temp26.1结束类

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()六、效果展示截图展示——6.1游戏界面

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

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

6.4敌方机甲死亡掉落物品

视频展示——

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

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

总结

好啦!这篇大游戏就写到这里啦,看着这些精致的画面有没有想要自己动手玩一下 ,试试嘛~

完整的免费源码领取处:

如需完整的项目源码 素材源码基地见:#私信小编06#即可获取免费的福利!

你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved