效果展示
必备素材
主要代码导入模块import pygameimport os.pathimport csvimport setting as setimport liveimport game_eventimport gameui as giimport startupui as si
程序主函数def run_game(): #初始化pygame库 pygame.init() #创建时钟对象(控制帧率) clock=pygame.time.clock() #实例化设置类,用于导入游戏设置 setting=set.setting() #设置游戏窗口 screen=pygame.display.set_mode((setting.screen_width,setting.screen_height)) pygame.display.set_caption(setting.screen_caption)
设置不同的组,用于分别处理各种物品间的关系
#玩家组group_player=pygame.sprite.group()#玩家的攻击组group_attack=pygame.sprite.group()#敌人组group_enemy=pygame.sprite.group()#敌人的攻击组group_enemy_attack=pygame.sprite.group()
实例化ui对象
#showinfo用于在游戏内显示人物血条等信息 showinfo=gi.info(setting,screen) #人物选择按钮 yi_button=si.monkeykingbutton(screen,setting) monkey_button=si.yibutton(screen,setting) fox_button=si.foxbutton(screen,setting) bin_button=si.binbutton(screen,setting)
游戏开始界面的按钮
pve_button=si.pvebutton(screen,setting) pvp_button=si.pvpbutton(screen,setting) endless_button=si.endlessbutton(screen,setting) control_button=si.controlbutton(screen,setting) memory_button=si.recordbutton(screen,setting) cooling_button=si.coolingbutton(screen,setting)
游戏背景
select_button=si.selectbutton(screen,setting) win_button=si.winbutton(screen,setting) dead_button=si.deadbutton(screen,setting)
玩家当前选择的人物标记
player_button_1=si.playerbutton1(screen,setting) player_button_2=si.playerbutton2(screen,setting) #空白按钮 none_button=si.nonebutton(screen,setting) #空白图像 none_info=gi.exinfo(screen,none_button,setting.introduce_none)
介绍按钮作用的图像
pve_info=gi.exinfo(screen,pve_button,setting.introduce_pve) pvp_info=gi.exinfo(screen,pvp_button,setting.introduce_pvp) endless_info=gi.exinfo(screen,endless_button,setting.introduce_endless) control_info=gi.exinfo(screen,control_button,setting.introduce_control) record_info=gi.exinfo(screen,memory_button,setting.introduce_record) cooling_info=gi.exinfo(screen,cooling_button,setting.introduce_cooling)
按钮组(绘制时,在前的按钮会被在后的按钮覆盖)
buttons=[select_button,yi_button,monkey_button,fox_button,bin_button, pve_button,pvp_button,endless_button, cooling_button,control_button,memory_button, dead_button,win_button]
标签按钮组
choose_buttons=[player_button_1,player_button_2]
介绍按钮作用的图像组
button_info_dict={none_button:none_info,pve_button:pve_info,pvp_button:pvp_info, endless_button:endless_info,control_button:control_info, memory_button:record_info,cooling_button:cooling_info} #当前显示的图像列表 info_label=[] #存储模拟刚体运动的列表 rigidbody_list=[] #玩家实例,初始化为战士 player_1=live.monkeyking(setting,screen) player_2=live.monkeyking(setting,screen) if not os.path.exists(setting.record_path): #如果游戏记录文件不存在就新创建一个 with open(setting.record_path,'w',newline="") as f: writer=csv.writer(f) header=["time","mode","winner","1st score","2st score","duration(s)","1st player","2nd player","iscooling"] writer.writerow(header)
游戏主循环 while true: #绘制背景 screen.blit(setting.screen_surface_background,(0,0)) #设置游戏帧率 clock.tick(setting.fps) #检测键盘鼠标事件 game_event.check_event(setting,screen,group_player,group_attack,group_enemy, group_enemy_attack,buttons,showinfo,button_info_dict,info_label)
更新当前选择人物的标签
game_event.update_choose(setting,buttons,choose_buttons)
游戏运行,非玩家对抗模式
if (setting.game_active and (setting.game_mode==0 or setting.game_mode==2)):
人物初始化
if(not setting.isinit): if setting.player_1!=none: player_1=setting.player_1 group_player.add(player_1) if setting.player_2!=none: player_2=setting.player_2 group_player.add(player_2) setting.isinit=true #游戏计时器 setting.timer+=1 #更新玩家 group_player.update() #生成敌人 game_event.generate_enemies(setting,group_enemy,screen)
更新敌人,玩家的攻击,敌人的攻击,玩家状态等
game_event.update_enemies(setting,showinfo,screen,group_player,group_enemy,group_attack,group_enemy_attack) game_event.update_attacks(setting,screen,group_attack,group_enemy,rigidbody_list) game_event.update_enemy_attacks(setting,screen,group_player,group_enemy_attack,rigidbody_list) game_event.update_state(setting,showinfo) game_event.update_rigidbody(setting,rigidbody_list)
胜利条件
if setting.timer>=60*setting.fps and not group_enemy.spritedict and setting.game_mode==0: game_event.game_win(setting,showinfo,group_enemy,group_attack,group_enemy_attack) setting.timer=0
失败条件
if setting.isinit and ((setting.player_1!=none and setting.health_1<=0) or (setting.player_2!=none and setting.health_2<=0)): game_event.game_dead(setting,showinfo,group_enemy,group_attack,group_enemy_attack) setting.timer=0
玩家对抗模式
elif setting.game_active and setting.game_mode==1:
人物初始化
if(not setting.isinit): if setting.player_1!=none and setting.player_2!=none: player_1=setting.player_1 group_player.add(player_1) player_2=setting.player_2 group_player.add(player_2) setting.isinit=true
游戏计时器
setting.timer+=1
更新玩家
player_1.update() player_2.update()
更新玩家的攻击,信息显示和物理模拟
game_event.update_attacks_pvp(setting,screen,group_attack,rigidbody_list) game_event.update_state(setting,showinfo) game_event.update_rigidbody(setting,rigidbody_list)
玩家1胜利条件
if setting.isinit and setting.health_2<=0: setting.score_1+=1 game_event.game_win(setting,showinfo,group_enemy,group_attack,group_enemy_attack) setting.timer=0
玩家2胜利条件
if setting.isinit and setting.health_1<=0: setting.score_2+=1 game_event.game_win(setting,showinfo,group_enemy,group_attack,group_enemy_attack) setting.timer=0
根据上述更新的结果绘制整个游戏窗口
game_event.update_screen(setting,screen,group_player,group_attack,group_enemy,group_enemy_attack, showinfo,buttons,info_label,choose_buttons) #运行游戏run_game()
以上就是python如何实现高配版王者小游戏的详细内容。