King of Games의 고급 버전을 Python으로 구현하는 방법

王林
풀어 주다: 2023-04-27 19:07:04
앞으로
1621명이 탐색했습니다.

효과 표시

King of Games의 고급 버전을 Python으로 구현하는 방법

필수 재료

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

King of Games의 고급 버전을 Python으로 구현하는 방법

메인 코드

모듈 가져오기

import pygame
import os.path
import csv
import setting as set
import live
import game_event
import gameui as gi
import 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()
로그인 후 복사

위 내용은 King of Games의 고급 버전을 Python으로 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿