人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Python 游戲大作炫酷機甲闖關游戲爆肝數(shù)千行代碼實現(xiàn)案例進階

發(fā)布日期:2021-12-25 02:42 | 文章來源:源碼中國

導語

大家早上好哈!——有沒有想我?。?/p>

木木子來啦,今日上線放一波大招給大家!

剛學會了錄制視頻,之后的效果動態(tài)顯示終于完美錄制出來了!今天跟著小編更新一波大家期待的游戲系列吧~

是不是好開森、好興奮呀!來來來……小編跟你一起去看看!

正文

本文呢是開源的游戲項目哈——小編按照自己的想法加工優(yōu)化一下給大家展示效果滴!

一、小編有話說

其實這款游戲是一款機甲對戰(zhàn)的模式——下面我說的話不要捶我哈,狗頭保命.jpg

感覺這種打怪掉金幣、掉血包等等這些跟我之前看我朋友打的一款《地下城與勇士》很像!2333,

感覺都是這種一直刷刷刷的闖關模式,直女表示:“看這類游戲都差不多一樣”,但是貌似市面上很多這種類似刷boss闖

關的,還可以自動刷的游戲來著!BUT 我沒玩過但應該是很多人的童年吧~

​二、游戲規(guī)則

2.1闖關模式

這款游戲只有一個關卡:但是一個關卡里面分為幾個小boss、打完即可通關,顯示血量為0即可通關不成功。一只紅色的機甲作為玩家必須打敗出現(xiàn)的所有小機甲+小boss,每次敵方機甲死亡會掉落不同屬性的物品,比如:血包、裝備等等,靠近即可收取為自己可用。

2.2技能提示

機甲玩家角色:機甲技能列表—I—O—J—U-作為技能按鍵;機甲移動列表—W—A—S—D—作為上下左右移動按鍵。

三、游戲素材

這個游戲寫了幾千行代碼——游戲素材圖片——相應的背景音樂等都特別的多——下面僅展示一小小部分給大家哈!

3.1像素畫風——

3.2機甲模型——

3.3冒險闖關

四、環(huán)境安裝

本文是寫的小游戲嘛!基于Pygame寫的。環(huán)境準備: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/戰(zhàn)斗背景音效.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("機甲對戰(zhàn)小游戲")
pygame.display.set_icon(start_back)
#
load_image=() #開始動畫列表
load_count=1 #開始動畫加載
start_flag=False#是否開始
start_music.play(-1)#游戲開始音效
for pic_num in range(1,30):
 if pic_num<10:
  load_image+=(pygame.image.load("./load_img/jz00"+str(pic_num)+".png"),)
 elif pic_num>9:
  load_image+=(pygame.image.load("./load_img/jz0"+str(pic_num)+".png"),)
 
class walk_sound():
 def __init__(self,src):
  self.sound=pygame.mixer.Sound(src)
  self.sound.set_volume(1)
 def music_play(self):
  self.sound.play()
 def music_stop(self):
  self.sound.stop()

5.3關卡動畫

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

5.4玩家角色

class Player(object):
 flc_list=()#機甲o技能列表
 lizi_list = () #粒子特效1 列表
 lizi2_list = ()#粒子特效2 列表
 lizi3_list =() #粒子特效3 列表
 walk_right = ()#機甲 向左走列表
 walk_left = () #機甲 向左走列表
 jn_list = ()#機甲i技能列表
 jump_list = () #機甲跳躍技能列表
 hit_list = ()  #機甲受傷列表
 attack_list_one=()#近攻 第一段 列表
 attack_list_two = () #近攻 第二段列表
 attack_list_three = ()  #近攻 第三段列表
 life_list=()#機甲受傷 列表
 die_list=() #機甲 血量 列表
 all_tuple=()
 stand_list = ()
 HP_tuple=()
 cd_tuple=()
 level_tuple=()
 for pic_num in range(1,13):
  level_tuple+=(pygame.image.load("./Update/"+str(pic_num)+".png"),)
 for pic_num in range(1,17):
  all_tuple+=(pygame.image.load("./jn/BIG/1 ("+str(pic_num)+").png"),)
 for pic_num in range(1,12):
  cd_tuple+=(pygame.image.load("./cd/cd"+str(pic_num)+".png"),)
 for pic_num in range(1,17):
  HP_tuple+=(pygame.image.load("./HP/"+str(pic_num)+".png"),)
 for pic_num in range(1,65):
  die_list+=(pygame.image.load("./die/die ("+str(pic_num)+").png"),)
 for pic_num in range(1,33):
  flc_list+=(pygame.image.load("./jn/flc ("+str(pic_num)+").png"),)
 for pic_num in range(1,49):
  lizi_list+=(pygame.image.load("./fire/"+str(pic_num)+".png"),)
 for pic_num in range(1,34):
  lizi2_list+=(pygame.image.load("./huohua/"+str(pic_num)+".png"),)
 for pic_num in range(1,81):
  lizi3_list+=(pygame.image.load("./huohua2/"+str(pic_num)+".png"),)
 for pic_num in range(1,5):
  life_list+=(pygame.image.load("./hit/ss (1).png"),)
  life_list+=(pygame.image.load("./hit/ss (2).png"),)
 for pic_num in range(1,13):
  walk_right+=(pygame.image.load("./walk/walk ("+str(pic_num)+").png"),)
 for pic_num in range(12,0,-1):
  walk_left+=(pygame.image.load("./walk/walk ("+str(pic_num)+").png"),)
 for pic_num in range(1, 25):
  stand_list+=(pygame.image.load("./stand/stand (" + str(pic_num) + ").png"),)
 for pic_num in range(1,41):
  jn_list+=(pygame.image.load("./jn/jn ("+str(pic_num)+").png"),)
 for pic_num in range(1,39):
  jump_list+=(pygame.image.load("./jump/jump ("+str(pic_num)+").png"),)
 for pic_num in range(1,48):
  hit_list+=(pygame.image.load("./hit/jd ("+str(pic_num)+").png"),)
 for pic_num in range(1,14):
  attack_list_one+=(pygame.image.load("./attack/1attack ("+str(pic_num)+").png"),)
 for pic_num in range(1,7):
  attack_list_two+=(pygame.image.load("./attack/2attack ("+str(pic_num)+").png"),)
 for pic_num in range(1,12):
  attack_list_three+=(pygame.image.load("./attack/3attack ("+str(pic_num)+").png"),)
 def __init__(self,x,y,width,height):
  self.x=x
  self.y=y
  self.width=width
  self.height=height
  self.speed=1
  self.left=False
  self.right=True
  self.stand=True
  self.jump=False
  self.i=False
  self.hit=False
  self.attack=0
  self.stand_count=1#站立的圖片索引
  self.walk_count=1#步行的圖片索引
  self.jump_count=1#跳躍的圖片索引
  self.jn_count=1#技能i的圖片索引
  self.hit_count=1#受傷的圖片索引
  self.attack_Bool=False
  self.attack_one_count = 1#一段普攻的圖片索引
  self.attack_two_count = 1  # 二段普攻的圖片索引
  self.attack_three_count = 1  # 三段普攻的圖片索引
  self.life=100
  self.t=10
  self.hit_box = (self.x, self.y, self.width, self.height)  # 碰撞框的位置 大小變量
  self.kill_enemy=0
  self.life_remove_bool=False
  self.life_count=0
  self.lizi_count=1
  self.lizi2_count = 1
  self.flc_count=0
  self.lizi3_count=1
  self.HP_count=0
  self.cd_count=0
  self.all_count=0
  self.cd=False
  self.levelAdd=False
  self.level=1
  self.flc=False
  self.die=False
  self.all=False
  self.die_count=0
  self.level_count=0
  self.HP_img=pygame.image.load("./HP/電池.png")
  self.skill_img = pygame.image.load("./HP/skill_num.png")
  self.player_img = pygame.image.load("./HP/head.png")
  self.win_bool=False
  self.lifeAdd=False
  self.all_lenth=50
 def draw(self,screen):
  if self.all_count>=16:
self.all_count=0
self.all=False
self.all_lenth=50
 
  if player.all_count>14:
U_Testing(enemylist)
U_Testing(enemylist2)
U_Testing(enemylist3)
U_Testing(enemylist4)
 
  if self.cd_count>=11:
self.cd_count=0
self.cd=False
  if self.HP_count == 2:
life_add_music.play()
  if self.HP_count>=16:
life_add_music.stop()
self.HP_count=0
self.lifeAdd = False
 
  if self.level_count==2:
life_add_music.play()
  if self.level_count>=12:
life_add_music.stop()
  if self.level_count>=12:
self.level_count=0
self.levelAdd = False
 
  if self.lizi_count>=48:
self.lizi_count=1
  if self.lizi2_count>=33:
self.lizi2_count=1
  if self.lizi3_count>=80:
self.lizi3_count=1
  if self.lizi2_count:
 
screen.blit(self.lizi2_list[self.lizi2_count], (-100, 500))
screen.blit(self.lizi2_list[self.lizi2_count], (200, 500))
screen.blit(self.lizi2_list[self.lizi2_count], (500, 500))
screen.blit(self.lizi2_list[self.lizi2_count], (800, 500))
screen.blit(self.lizi2_list[self.lizi2_count], (1100, 500))
self.lizi2_count += 1
  # if self.lizi3_count:
  #  screen.blit(self.lizi3_list[self.lizi3_count], (-100, -120))
  #  screen.blit(self.lizi3_list[self.lizi3_count], (200, -200))
  #  screen.blit(self.lizi3_list[self.lizi3_count], (500, -120))
  #  screen.blit(self.lizi3_list[self.lizi3_count], (800, -200))
  #  screen.blit(self.lizi3_list[self.lizi3_count], (1100, -120))
  #  self.lizi3_count += 1
 
  if self.lizi_count:
screen.blit(self.lizi_list[self.lizi_count], (-100, 600))
screen.blit(self.lizi_list[self.lizi_count], (200, 550))
screen.blit(self.lizi_list[self.lizi_count], (500, 600))
screen.blit(self.lizi_list[self.lizi_count], (800, 550))
screen.blit(self.lizi_list[self.lizi_count], (1100, 600))
self.lizi_count+=1
  if self.die_count >=64:
self.die_count=0
self.life=100
self.kill_enemy=0
self.die = False
self.stand = True
return
 
  if self.stand_count>=24:
self.stand_count=1
 
  if self.flc_count>=32:
self.flc_count=0
self.flc=False
 
  if self.life_count>=8:
self.life_count=0
self.life_remove_bool=False
 
  if self.attack_one_count>=13:
self.attack_one_count=1
self.stand=True
self.attack_Bool = False
 
  if self.attack_two_count>=6:
self.attack_two_count=1
self.stand = True
self.attack_Bool = False
 
  if self.attack_three_count>=11:
self.attack_three_count=1
self.stand = True
self.attack_Bool = False
 
  if self.walk_count>=12:
self.walk_count=1
 
  if self.jump_count>=38:
self.jump_count=1
  if self.jn_count>=40:
self.jn_count=1
  if self.hit_count>=47:
self.hit_count=1
 
  if self.die_count==20:
diren_die_music.play()
 
 
 
 
  if self.life_remove_bool and not self.die:
screen.blit(self.life_list[self.life_count],(self.x,self.y))
if self.life_count==0:
 player_hit_music.play()
elif self.life_count==5:
 player_hit_music.stop()
self.stand=False
self.i = False
self.j = False
self.left=False
self.right=False
self.jump = False
self.flc = False
self.life_count+=1
 
  elif self.stand and not self.jump and not self.i and not self.flc  and not self.hit and not self.attack_Bool and not self.life_remove_bool and not self.die:
screen.blit(self.stand_list[self.stand_count],(self.x,self.y))
self.stand_count+=1
 
  elif self.right and not self.stand and not self.jump and not self.i and not self.flc  and not self.hit and not self.attack_Bool and not self.life_remove_bool and not self.die:  # 如果沒有站立中 并且left=True,
screen.blit(self.walk_right[self.walk_count], (self.x,self.y))  # 繪制馬里奧
self.walk_count += 1
 
if self.walk_count==2:
 walk_music.play()
elif self.walk_count==1:
 walk_music.stop()
  elif self.left and not self.stand and not self.jump and not self.i and not self.flc and not self.hit and not self.attack_Bool and not self.life_remove_bool and not self.die:  # 如果沒有站立中 并且left=True,
screen.blit(self.walk_left[self.walk_count], (self.x,self.y))  # 繪制馬里奧
self.walk_count += 1
 
if self.walk_count==2:
 walk_music.play()
elif self.walk_count==1:
 walk_music.stop()
 
  elif self.flc  and not self.die:
if self.flc_count==1:
 feiti_music.play()
if self.flc_count==20:
 feiti_music.stop()
screen.blit(self.flc_list[self.flc_count], (self.x, self.y-120))
self.flc_count += 1
 
  elif self.i  and not self.die:
 
screen.blit(self.jn_list[self.jn_count],(self.x,self.y-75))
self.jn_count+=1
if self.jn_count == 2:
 jn_music.play()
elif self.jn_count == 1:
 jn_music.stop()
  elif self.jump and not self.attack_Bool and not self.die:
screen.blit(self.jump_list[self.jump_count],(self.x,self.y-75))
self.jump_count+=1
if self.jump_count == 2:
 jump_music.play()
elif self.jump_count == 1:
 jump_music.stop()
  elif self.attack==1 and self.attack_Bool and not self.die:
screen.blit(self.attack_list_one[self.attack_one_count],(self.x,self.y))
self.attack_one_count += 1
if self.attack_one_count==2:
 attack_music.play()
elif self.attack_one_count==1:
 attack_music.stop()
  elif self.attack==2 and self.attack_Bool and not self.die:
screen.blit(self.attack_list_two[self.attack_two_count],(self.x,self.y))
self.attack_two_count += 1
if self.attack_two_count == 2:
 attack_music.play()
elif self.attack_two_count == 1:
 attack_music.stop()
  elif self.attack==3 and self.attack_Bool and not self.die:
screen.blit(self.attack_list_three[self.attack_three_count],(self.x,self.y))
self.attack_three_count += 1
if self.attack_three_count == 2:
 attack_music.play()
elif self.attack_three_count == 1:
 attack_music.stop()
 
  elif self.hit and not self.die:
screen.blit(self.hit_list[self.hit_count],(self.x,self.y))
self.hit_count+=1
 
  elif self.die:
self.life = 0
self.skill = False
self.attack = False
screen.blit(self.die_list[self.die_count],(self.x-100,self.y-20))
self.die_count+=1
 
  self.hit_box = (self.x, self.y, self.width, self.height)
 
 
 
 
  if self.levelAdd:
LEVAdd = font.render("LEVEL UP ", True, (255, 0, 0))
screen.blit(LEVAdd, (player.x - 50, player.y - 50))
screen.blit(self.level_tuple[self.level_count],(self.x-40,self.y-90))
self.level_count+=1
 
  if self.lifeAdd:
screen.blit(self.HP_tuple[self.HP_count],(self.x,self.y-40))
self.HP_count+=1
 
  if self.all:
self.all_lenth+=50
screen.blit(self.all_tuple[self.all_count],(self.x+self.all_lenth,self.y+(self.height/2)-210))
self.all_count+=1

5.5敵人死亡刪除

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

5.6 敵方大BOSS

class Boss(object):
 walk_tuple = ()#走路元組
 skill_tuple = ()  #遠攻元組
 attack_tuple = () #近攻元組
 life_remove_tuple = () #受傷元組
 die_tuple = () #死亡元組
 arm_tuple = () #胳膊元組
 for pic_num in range(1,13):
  walk_tuple += (pygame.image.load("./yellow/walk1/1 ("+str(pic_num)+").png"),)
 for pic_num in range(1,34):
  skill_tuple += (pygame.image.load("./yellow/skill/skill ("+str(pic_num)+").png"),)
 for pic_num in range(1,30):
  attack_tuple += (pygame.image.load("./yellow/attack/attack ("+str(pic_num)+").png"),)
 for pic_num in range(1,40):
  life_remove_tuple += (pygame.image.load("./yellow/hit/hit ("+str(pic_num)+").png"),)
 for pic_num in range(1,13):
  die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
 for pic_num in range(1,13):
  die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
 for pic_num in range(1,13):
  die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
 for pic_num in range(1,13):
  die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
 for pic_num in range(1,13):
  die_tuple += (pygame.image.load("./yellow/die/die ("+str(pic_num)+").png"),)
 for pic_num in range(1,7):
  arm_tuple += (pygame.image.load("./yellow/arm/arm ("+str(pic_num)+").png"),)
 def __init__(self,x,y,start,end):
  self.x = x
  self.y = y
  self.width = 149
  self.height = 122
  self.area = [start,end]
  self.Yarea = [390-self.height,640-self.height]
  self.walk_count = 0 #走路圖片索引
  self.skill_count = 0#遠攻圖片索引
  self.attack_count = 0  #近攻圖片索引
  self.life_count = 0  #倒地圖片索引
  self.die_count = 0  #逃跑圖片索引
  self.arm_count = 0  #胳膊圖片索引
  self.life = 0#boss生命值
  self.speed = 1.5 #x軸移動速度
  self.speed_Y = 1.9  #y軸移動速度
  self.hit_box = (self.x,self.y,self.width,self.height) #碰撞檢測
  self.die = False
  self.walk = True
  self.skill=False
  self.attack=False
  self.life_remove_bool=False
  self.Enemy_Y = 0 #保留受傷 Y軸 位置
  self.enemy_img = pygame.image.load("./HP/enemy_yellow.png")#生命值圖標
  self.game_start_Bool = True  #加載血條長度
 def draw(self,screen):
  global HP_img_boss
  global HP_bool_boss
  if self.game_start_Bool:
self.life+=0.5
if self.life>15:
 self.life=15
 self.game_start_Bool=False
  self.move()
 
  if self.life <= 0:
self.life_remove_bool = False
self.die = True
self.walk = False
 
  if self.arm_count>=6:
self.arm_count=0
 
  if self.life_count>=39:
# self.y=self.Enemy_Y
self.life_count=0
self.life_remove_bool=False
self.walk=True
  # 敵方走路
  if self.walk_count>=12:
self.walk_count=0
 
  #敵方遠程攻擊
  if self.skill_count==20 and not self.life_remove_bool and not self.die:
if collision_check_tanke(player, enemylist4[0]):
 player.life -= 8
 player.life_remove_bool = True
 if player.life<=0:
  player.die=True
  # 敵方近程攻擊
  if self.attack_count == 17 and not self.life_remove_bool and not self.die:
if collision_check_tanke_yellow(player, enemylist4[0]):
 player.life -= 8
 player.life_remove_bool = True
 if player.life<=0:
  player.die=True
 
  #敵方 遠程 技能
  if self.skill_count >= 33:
self.skill_count = 0
self.skill=False
self.walk=True
 
  # 敵方 近程 技能
  if self.attack_count >= 29:
self.attack_count = 0
self.attack = False
self.walk = True

5.7敵方BOSS章魚怪

class Enemy_pink(object):
 walk_left=()
 walk_right=()
 die_list = ()
 life_remove_list = ()
 falsh_list=()
 skill_list=()
 attack_list = ()
 for pic_num in range(1,83):
  attack_list+=(pygame.image.load("./pink/attack/attack1 ("+str(pic_num)+").png"),)
 for pic_num in range(1,17):
  walk_left+=(pygame.image.load("./pink/walk/"+str(pic_num)+".png"),)
 for pic_num in range(16,0,-1):
  walk_right+=(pygame.image.load("./pink/walk/"+str(pic_num)+".png"),)
 for pic_num in range(1,51):
  skill_list+=(pygame.image.load("./pink/skill2/"+str(pic_num)+".png"),)
 #敵人 先起飛 再死亡
 for pic_num in range(1,58):
  die_list+=(pygame.image.load("./pink/die/die ("+str(pic_num)+").png"),)
 # 減血
 for pic_num in range(1,29):
  life_remove_list+=(pygame.image.load("./pink/hit/hit ("+str(pic_num)+").png"),)
 
 def __init__(self,x,y,start,end):
  self.x=x
  self.y=y
  self.width=361
  self.height=179
  self.area=[start,end]
  self.Yarea = [440, 500] # Y軸 運動 區(qū)間
  self.walk_count=1
  self.speed=-2
  self.speed_Y=1.9
  self.life=0
  self.hit_box = (self.x, self.y, self.width, self.height)
  self.die=False
  self.walk=True
  self.die_count=1
  self.life_count=1
  self.skill_count=1
  self.attack_count=0
  self.life_remove_bool=False
  self.skill=False
  self.attack = False
  self.Enemy_Y=0  #保留受傷 Y軸 位置
  self.enemy_img = pygame.image.load("./HP/enemy_pink.png")
  self.HP_img = pygame.image.load("./HP/電池.png")
  self.game_start_Bool=True
 def draw(self,screen):
  global HP_img_pink
  global HP_bool_pink
  if self.game_start_Bool:
self.life+=0.17
if self.life>3:
 self.life=3
 self.game_start_Bool=False
 
  self.move()
 
  if self.life <= 0:
self.life_remove_bool = False
self.die = True
self.walk = False
 
  if self.life_count>=28:
# self.y=self.Enemy_Y
self.life_count=0
self.life_remove_bool=False
self.walk=True
  # 敵方走路
  if self.walk_count>=16:
self.walk_count=0
 
  #敵方遠程攻擊
  if self.skill_count==30 and not self.life_remove_bool and not self.die:
if collision_check_tanke_jincheng(player, enemylist3[0]):
 player.life -= 8
 player.life_remove_bool = True
 if player.life<=0:
  player.die=True
  # 敵方近程攻擊
  if self.attack_count == 50 and not self.life_remove_bool and not self.die:
if collision_check_tanke(player, enemylist3[0]):
 player.life -= 8
 player.life_remove_bool = True
 if player.life<=0:
  player.die=True
 
  #敵方 遠程 技能
  if self.skill_count >= 50:
self.skill_count = 0
self.skill=False
self.walk=True
 
  # 敵方 近程 技能
  if self.attack_count >= 82:
self.attack_count = 0
self.attack = False
self.walk = True

5.8敵方BOSS 綠坦克

class Enemy(object):
 walk_left=()
 walk_right=()
 die_list = ()
 life_remove_list = ()
 falsh_list=()
 skill_list=()
 attack_list = ()
 
 for pic_num in range(1,24):
  attack_list+=(pygame.image.load("./green/attack/attack ("+str(pic_num)+").png"),)
 for pic_num in range(1,9):
  walk_left+=(pygame.image.load("./green/walk/walk ("+str(pic_num)+").png"),)
 for pic_num in range(8,0,-1):
  walk_right+=(pygame.image.load("./green/walk/walk ("+str(pic_num)+").png"),)
 for pic_num in range(1,38):
  skill_list+=(pygame.image.load("./green/skill/skill ("+str(pic_num)+").png"),)
 
 #敵人 先起飛 再死亡
 for pic_num in range(1,40):
  die_list+=(pygame.image.load("./green/die/hit ("+str(pic_num)+").png"),)
 for pic_num in range(1,65):
  die_list+=(pygame.image.load("./green/die/die ("+str(pic_num)+").png"),)
 # 減血
 for pic_num in range(1,24):
  life_remove_list+=(pygame.image.load("./green/die/hit ("+str(pic_num)+").png"),)
 
 def __init__(self,x,y,start,end):
  self.x=x
  self.y=y
  self.width=133
  self.height=95
  self.area=[start,end]
  self.Yarea = [300, 360] # Y軸 運動 區(qū)間
  self.walk_count=1
  self.speed=-1.5
  self.speed_Y=1.9
  self.life=0
  self.hit_box = (self.x, self.y, self.width, self.height)
  self.die=False
  self.walk=True
  self.die_count=1
  self.life_count=1
  self.skill_count=1
  self.attack_count=0
  self.life_remove_bool=False
  self.skill=False
  self.attack = False
  self.Enemy_Y=0  #保留受傷 Y軸 位置
  self.enemy_img=pygame.image.load("./HP/enemy_green.png")
  self.game_start_Bool=True
 def draw(self,screen):
  global HP_img_green
  global HP_bool_green
  if self.game_start_Bool:
self.life+=0.12
if self.life > 3:
 self.life = 3
 self.game_start_Bool = False
 
  self.move()
 
  if self.life <= 0:
self.life_remove_bool = False
self.die = True
self.walk = False
 
  # 敵方受擊
  # if self.life_count==2:
  #  self.Enemy_Y=self.y
 
 
  if self.life_count>=23:
# self.y=self.Enemy_Y
self.life_count=0
self.life_remove_bool=False
self.walk=True
 
  # 敵方走路
  if self.walk_count>=8:
self.walk_count=0
 
  #敵方遠程攻擊
  if self.skill_count==25 and not self.life_remove_bool and not self.die:
if collision_check_tanke(player, enemylist[0]):
 player.life -= 8
 player.life_remove_bool = True
 if player.life<=0:
  player.die=True
  # 敵方近程攻擊
  if self.attack_count == 14 and not self.life_remove_bool and not self.die:
if collision_check_tanke_jincheng(player, enemylist[0]):
 player.life -= 8
 player.life_remove_bool = True
 if player.life<=0:
  player.die=True
 
  #敵方 遠程 技能
  if self.skill_count >= 37:
self.skill_count = 0
self.skill=False
self.walk=True
 
  # 敵方 近程 技能
  if self.attack_count >= 23:
self.attack_count = 0
self.attack = False
self.walk = True

5.9掉落的血瓶

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

5.10撿血包

def collision_check_tanke_HP(a,b):
 temp1= (b.x+b.width>a.x+a.width-30>b.x)
 #角色的攻擊區(qū)間  容錯區(qū)間
 temp2= (-40<(b.y+b.height)-(a.y+a.height)<=45)
 return temp1 and  temp2

5.11結束類

def game_over():
 global check
 start_btn=pygame.image.load("./load_img/重新開始.png")
 end_btn=pygame.image.load("./load_img/退出游戲.png")
 failed=pygame.image.load("./load_img/失敗.png")
 win_img=pygame.image.load("./load_img/勝利.png")
 bg=pygame.image.load("./map_img/right.jpg")
 back_music.stop()
 while True:
  if check==5:
back_music.play(-1)
player.life = 100
player.x = 0
player.kill_enemy = 0
check = 1
return True
  for event in pygame.event.get():
if event.type == pygame.QUIT:
 sys.exit()
  #鼠標事件
if event.type==pygame.MOUSEBUTTONDOWN:
# 鼠標位置
 if (495<=event.pos[0]<=495+start_btn.get_width()) and (450<=event.pos[1]<450+start_btn.get_height()):
  back_music.play(-1)
  player.life = 100
  player.x = 0
  player.kill_enemy = 0
  check = 1
  return True
 if (495<=event.pos[0]<=495+start_btn.get_width()) and (320<=event.pos[1]<320+start_btn.get_height()):
  sys.exit()
  player.kill_enemy=0
  screen.blit(bg,(0,0))
  screen.blit(start_btn,(495,450))
  screen.blit(end_btn,(495,320))
  if player.win_bool==False :#失敗
screen.blit(failed, (395, 120))
  if player.win_bool :  #勝利
screen.blit(win_img, (425, 120))
  pygame.display.update()

六、效果展示

截圖展示——

游戲界面

第一小關,其他的幾關我就沒截圖了哈

按住U放大這個技能特別可,遠攻,其他的攻擊太近了,威力不是很大!get!

敵方機甲死亡掉落物品

視頻展示——

哈哈哈 效果出來就成!第一份有視頻的動態(tài)效果滿足滿足?。≈髸?yōu)化滴~謝謝大家!

Python游戲實戰(zhàn):機甲對戰(zhàn)闖關模式大冒險!

總結

好啦!這篇大游戲就寫到這里啦,看著這些精致的畫面有沒有想要自己動手玩一下 ,試試嘛~

你們的支持是我最大的動力!!記得三連哦~mua 歡迎大家閱讀往期的文章哦~

到此這篇關于Python 爆肝數(shù)千行代碼實現(xiàn)炫酷機甲闖關游戲大制作案例進階的文章就介紹到這了,更多相關Python 機甲闖關游戲內容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持本站!

版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網友推薦、互聯(lián)網收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。

相關文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務

7x24全年不間斷在線

專屬顧問服務

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務熱線

關注
微信

關注官方微信
頂部