溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python如何實(shí)現(xiàn)高配版王者小游戲

發(fā)布時(shí)間:2023-03-16 10:43:58 來(lái)源:億速云 閱讀:89 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“Python如何實(shí)現(xiàn)高配版王者小游戲”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Python如何實(shí)現(xiàn)高配版王者小游戲”文章吧。

效果展示

Python如何實(shí)現(xiàn)高配版王者小游戲

必備素材

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

Python如何實(shí)現(xiàn)高配版王者小游戲

主要代碼

導(dǎo)入模塊

import pygame
import os.path
import csv
import setting as set
import live
import game_event
import gameui as gi
import startupui as si

程序主函數(shù)

def run_game():
    #初始化pygame庫(kù)
    pygame.init()
    #創(chuàng)建時(shí)鐘對(duì)象(控制幀率)
    clock=pygame.time.Clock()
    #實(shí)例化設(shè)置類(lèi),用于導(dǎo)入游戲設(shè)置
    setting=set.Setting()
    #設(shè)置游戲窗口
    screen=pygame.display.set_mode((setting.screen_width,setting.screen_height))
    pygame.display.set_caption(setting.screen_caption)

設(shè)置不同的組,用于分別處理各種物品間的關(guān)系

#玩家組
group_player=pygame.sprite.Group()
#玩家的攻擊組
group_attack=pygame.sprite.Group()
#敵人組
group_enemy=pygame.sprite.Group()
#敵人的攻擊組
group_enemy_attack=pygame.sprite.Group()

實(shí)例化ui對(duì)象

    #showinfo用于在游戲內(nèi)顯示人物血條等信息
    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)

游戲開(kāi)始界面的按鈕

    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)

玩家當(dāng)前選擇的人物標(biāo)記

    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)

按鈕組(繪制時(shí),在前的按鈕會(huì)被在后的按鈕覆蓋)

    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]

標(biāo)簽按鈕組

    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}
    #當(dāng)前顯示的圖像列表
    info_label=[]
    #存儲(chǔ)模擬剛體運(yùn)動(dòng)的列表
    rigidbody_list=[]
    #玩家實(shí)例,初始化為戰(zhàn)士
    player_1=live.MonkeyKing(setting,screen)
    player_2=live.MonkeyKing(setting,screen)

    if not os.path.exists(setting.record_path):
        #如果游戲記錄文件不存在就新創(chuàng)建一個(gè)
        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)

游戲主循環(huán)

    while True: 
        #繪制背景
        screen.blit(setting.screen_surface_background,(0,0))
        #設(shè)置游戲幀率
        clock.tick(setting.fps)
        #檢測(cè)鍵盤(pán)鼠標(biāo)事件   
        game_event.check_event(setting,screen,group_player,group_attack,group_enemy,
                               group_enemy_attack,buttons,showinfo,button_info_dict,info_label)

更新當(dāng)前選擇人物的標(biāo)簽

        game_event.update_choose(setting,buttons,choose_buttons)

游戲運(yùn)行,非玩家對(duì)抗模式

        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
            #游戲計(jì)時(shí)器
            setting.timer+=1
            #更新玩家
            group_player.update()
            #生成敵人
            game_event.generate_enemies(setting,group_enemy,screen)

更新敵人,玩家的攻擊,敵人的攻擊,玩家狀態(tài)等

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

玩家對(duì)抗模式

        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

游戲計(jì)時(shí)器

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

根據(jù)上述更新的結(jié)果繪制整個(gè)游戲窗口

        game_event.update_screen(setting,screen,group_player,group_attack,group_enemy,group_enemy_attack,
                                 showinfo,buttons,info_label,choose_buttons)                 

#運(yùn)行游戲
run_game()

以上就是關(guān)于“Python如何實(shí)現(xiàn)高配版王者小游戲”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI