基于Python实现高配版王者小游戏

 更新时间:2023年03月16日 09:30:13   作者:十九1919  
咳咳,又是一款新的小游戏,就是大家熟悉的王者~本文将利用python来实现高(di)配版的王者的小游戏,感兴趣的小伙伴可以跟随小编一起学习一下

前言

咳咳,又是一款新的小游戏,就是大家熟悉的王者~

来看我用python来实现高(di)配版的王者

是一款拿到代码运行后,可直接玩的游戏,是摸鱼必备的小游戏
小声说,我玩了一下午…

好了,先给你们看看效果吧,技术就这么多将就看看吧 

效果展示

必备素材

主要代码

导入模块

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()

以上就是基于Python实现高配版王者小游戏的详细内容,更多关于Python王者小游戏的资料请关注脚本之家其它相关文章!

相关文章

  • Python+django实现文件下载

    Python+django实现文件下载

    本文是python+django系列的第二篇文章,主要是讲述是先文件下载的方法和代码,有需要的小伙伴可以参考下。
    2016-01-01
  • python判断所输入的任意一个正整数是否为素数的两种方法

    python判断所输入的任意一个正整数是否为素数的两种方法

    今天小编就为大家分享一篇python判断所输入的任意一个正整数是否为素数的两种方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python数据结构之双向链表的定义与使用方法示例

    Python数据结构之双向链表的定义与使用方法示例

    这篇文章主要介绍了Python数据结构之双向链表的定义与使用方法,结合实例形式分析了Python双向链表的概念、原理、使用方法及相关注意事项,需要的朋友可以参考下
    2018-01-01
  • python判断无向图环是否存在的示例

    python判断无向图环是否存在的示例

    今天小编就为大家分享一篇python判断无向图环是否存在的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python基于DFA算法实现内容敏感词过滤

    Python基于DFA算法实现内容敏感词过滤

    DFA 算法是通过提前构造出一个 树状查找结构,之后根据输入在该树状结构中就可以进行非常高效的查找。本文将利用改算法实现敏感词过滤,需要的可以参考一下
    2022-04-04
  • python实现反转部分单向链表

    python实现反转部分单向链表

    这篇文章主要为大家详细介绍了python实现反转部分单向链表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 如何利用python正则表达式匹配版本信息

    如何利用python正则表达式匹配版本信息

    这篇文章主要给大家介绍了关于如何利用python正则表达式匹配版本信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 深入理解python中的atexit模块

    深入理解python中的atexit模块

    atexit模块很简单,只定义了一个register函数用于注册程序退出时的回调函数,我们可以在这个回调函数中做一些资源清理的操作。下面这篇文章主要介绍了python中atexit模块的相关资料,需要的朋友可以参考下。
    2017-03-03
  • Pycharm debug调试时带参数过程解析

    Pycharm debug调试时带参数过程解析

    这篇文章主要介绍了Pycharm debug调试时带参数过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • python如何查看微信消息撤回

    python如何查看微信消息撤回

    这篇文章主要为大家详细介绍了python实现查看微信消息撤回的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论