python成功实现“高配版”王者小游戏?【赠源码】

news/2024/11/8 21:34:02/

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

本游戏完整源码、素材: 点击此处跳转文末名片获取

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

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

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

开发环境:

首先我们先来安装一下运行代码的软件(对没安装的小白说)

  • 版 本: python 3.8

  • 编辑器: pycharm 2022.3.2 专业版

必备素材

主要代码

导入模块

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

安装第三方模块方法:win + R 输入cmd 输入安装命令 pip install 模块名

(如果你觉得安装速度比较慢, 你可以切换国内镜像源)

完整代码👉【点击文末名片领取】【或者看代码中数字】

程序主函数

def run_game():#初始化pygame库pygame.init()702813599 ### 源码领取#创建时钟对象(控制帧率)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)702813599 ### 源码领取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)
702813599 ### 源码领取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_1group_player.add(player_1)if setting.player_2!=None:player_2=setting.player_2group_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)
702813599 ### 源码领取            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_1group_player.add(player_1)player_2=setting.player_2group_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+=1game_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+=1game_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()

效果展示

好了,这就是我们的效果啦~技术就这么多将就看看吧 😎

尾语 💝

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇


http://www.ppmy.cn/news/35940.html

相关文章

python 10

一、文件的基础知识 无论何种类型的文件&#xff0c;在内存或磁盘上最终都是以二进制编码存储的。根据逻辑上编码的不同&#xff0c;可以区分为文本文件和二进制文件。 文本文件基于字符编码&#xff0c;如ASCII码、Unicode编码等。文本文件存储的是普通字符串&#xff0c;能够…

【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件

目录 1 什么是Intel Hex 2 Intel Hex的格式 2.1 Intel Hex的Record结构 2.1.1 “Record type记录类型”的说明 2.1.2 “Record length记录长度”的说明 2.1.3 如何计算“Checksum校验和” 2.2 Record order记录顺序 2.3 Text line terminators文本行终止符 3 Hex文件的…

C++ MVC模式

概述 C是一种流行的编程语言&#xff0c;它可以用于构建各种类型的应用程序&#xff0c;包括Web应用程序、桌面应用程序和移动应用程序。在这里&#xff0c;我将为您介绍C中的MVC模式&#xff0c;以及如何在C中实现MVC模式。 MVC&#xff08;Model-View-Controller&#xff0…

【慕伏白教程】在Vmware中安装Ubuntu流程

【慕伏白教程】在Vmware中安装Ubuntu流程一、下载官方镜像二、新建虚拟机1. 创建虚拟机2. 安装系统镜像2.1 点击 *编辑虚拟机设置*2.1 虚拟机设置三、安装系统1. 系统初始化1.1 点击 *开启此虚拟机*1.2 选择 *Try or Install Ubuntu* 并回车1.3 等待加载ing1.4 选择语言并安装1…

【第017问 Unity Physics.OverlapSphere如何检测附近玩家?】

一、背景 如何检测一个对象范围内的玩家&#xff0c;这个可以直接使用距离判定&#xff0c;物体射线检测等相关方式&#xff1b;这里采用Physics.OverlapSphere的方式来实践其过程&#xff0c;并对Physics.OverlapSphere的使用做一下记录&#xff1b; 二、Physics.OverlapSph…

趋势面模型分析实例(python)

python 趋势面模型分析实例 已知五个气象站&#xff0c;这五个站围绕着未知的0号站。下图为各个站点的x、y坐标及及其已知值 第一行为0号点x&#xff0c;y坐标 z值未知暂设为0 而后依次为1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5号点xyz值 对未知点0进行插值。…

es-head插件插入查询以及条件查询(五)

es-head插件插入查询以及条件查询 1.es-head插件页面介绍 页面详细介绍 2.es-head查询语句 2.1.查询索引中的全部数据 curl命令交互&#xff0c;采用GET请求 语法格式&#xff1a; curl -XGET es地址:9200/索引名/_search?pretty [rootelaticsearch ~]# curl -XGET 192…

模拟集成电路设计:Bandgap电路设计及版图实现

模拟集成电路设计 Bandgap电路设计及版图实现 一、目的&#xff1a; 1、熟悉模拟集成电路设计的基本流程&#xff0c;实现Bandgap电路设计&#xff1b; 2、熟悉Linux系统及Cadence Virtuoso icfb设计、仿真软件的使用方法。 二、原理&#xff1a; 1、设计目标&#xff1a;…