Comment implémenter une version haut de gamme de King of Games en Python

王林
Libérer: 2023-04-27 19:07:04
avant
1622 Les gens l'ont consulté

Affichage d'effet

Comment implémenter une version haut de gamme de King of Games en Python

Matériaux essentiels

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Comment implémenter une version haut de gamme de King of Games en Python

Code principal

Module d'importation

import pygame
import os.path
import csv
import setting as set
import live
import game_event
import gameui as gi
import startupui as si
Copier après la connexion

Programme Le fonction principale

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)
Copier après la connexion

configure différents groupes pour gérer respectivement les relations entre divers éléments

#玩家组
group_player=pygame.sprite.Group()
#玩家的攻击组
group_attack=pygame.sprite.Group()
#敌人组
group_enemy=pygame.sprite.Group()
#敌人的攻击组
group_enemy_attack=pygame.sprite.Group()
Copier après la connexion

instancier les objets de l'interface utilisateur

    #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)
Copier après la connexion

boutons sur l'interface de démarrage du jeu

    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)
Copier après la connexion

arrière-plan du jeu

    select_button=si.SelectButton(screen,setting)
    win_button=si.WinButton(screen,setting)
    dead_button=si.DeadButton(screen,setting)
Copier après la connexion

marque de personnage actuellement sélectionnée par le joueur

    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)
Copier après la connexion

Présentation de l'image de la fonction du bouton

    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)
Copier après la connexion

Groupe de boutons (lors du dessin, le bouton précédent sera couvert par le bouton suivant)

    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]
Copier après la connexion

Groupe de boutons d'étiquette

    choose_buttons=[player_button_1,player_button_2]
Copier après la connexion

Présentation du groupe d'images de la fonction du bouton

    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)
Copier après la connexion

Boucle principale du jeu

    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)
Copier après la connexion

Mettre à jour l'étiquette du personnage actuellement sélectionné

        game_event.update_choose(setting,buttons,choose_buttons)
Copier après la connexion

Jeu en cours, mode confrontation non-joueur

        if (setting.game_active and (setting.game_mode==0 or setting.game_mode==2)):
Copier après la connexion

Initialisation du personnage

            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)
Copier après la connexion

Mettre à jour les ennemis, les attaques du joueur, les attaques de l'ennemi, le statut du joueur, etc.

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)
Copier après la connexion

Conditions de victoire

            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
Copier après la connexion

Conditions d'échec

            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
Copier après la connexion

Mode joueur contre joueur

        elif setting.game_active and setting.game_mode==1:
Copier après la connexion

Initialisation du personnage

            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
Copier après la connexion

Minuteur de jeu

setting.timer+=1
Copier après la connexion

Mettre à jour le joueur

            player_1.update()
            player_2.update()
Copier après la connexion

Mettre à jour l'attaque du joueur, l'affichage des informations et la simulation physique

game_event.update_attacks_pvp(setting,screen,group_attack,rigidbody_list)
            game_event.update_state(setting,showinfo)
            game_event.update_rigidbody(setting,rigidbody_list)
Copier après la connexion

Condition de victoire du joueur 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
Copier après la connexion

Jouer euh 2 condition de victoire

            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
Copier après la connexion

Dessinez toute la fenêtre de jeu en fonction des résultats de la mise à jour ci-dessus

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

#运行游戏
run_game()
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal