STM32学习笔记二十:WS2812制作像素游戏屏-飞行射击游戏(10)探索游戏平衡
游戏平衡很重要,然而,却往往得不到开发者的重视。或者,没有花时间仔细去做调整。
做过游戏开发的,都听说过一个词叫“数值爆炸”,实际上就是平衡没做好。
怎么样才能算是平衡呢?
玩家投入游戏的有两个,要么投入时间(提高熟练度),要么氪金(提高强度)。
让用户的投入,能通过某种方式体现出来,就是个好的平衡。
而作为开发者应该对玩家投入的时间,特别是首次、单次游戏的时间有所计划。
以前娱乐较少的时候,游戏首次、单词投入的时间能达到30分钟,而现在有个5分钟就不错。哪怕是3A大作,如果不能让玩家5分钟内上手,往后就难了。
现代游戏开发有个指标,策划让新玩家内测,他会希望 N% 的用户能够玩到 N 分钟。
比如2048游戏,希望80%的用户能合成到128,
比如Flepybird 游戏,希望80%的用户能飞10米。
比如羊了个羊 游戏,希望0.0001%的用户能通过第二关。
你必须要有类似这个目标,才能去调游戏数值。
这个题目很大,展开了都能开专题了。所以这里只是一个引子,希望大家重视。
回归本游戏,游戏平衡怎么做?
既然这是个非氪金游戏,那么就要让用户熟练度在游戏中有所体现。我们希望,80%用户能玩到5分钟,就很难再继续前进了。
首先第一个平衡是玩家火力和敌人的平衡。
敌人的总血量要考量几个因素:
-》单敌人单位的血量
-》敌人出现间隔
而玩家火力包括常规攻击方式和道具伤害。或者你可以理解为持续伤害和爆发伤害。
我们应该让他处于一种状态:玩家熟练度高时,可以干掉所有敌机,熟练度不足时,就要放过一部分敌机。简单做个乘除法就可以得到。
另一个平衡是玩家血量和敌机火力的平衡。
敌机火力于几个因素:
-》敌机生成密度
-》敌机开火密度
-》敌机子弹伤害
以上所有的这些东西,我们前面都是有数值控制的。
现在我们要做的是:
1、把这些数值都抽出来,放在统一的地方,以方便修改
。。。
#define PlayerMaxLife 12000
#define EnamyMaxLife 1000
#define EnemyBulletDam 400
#define EnemyRocketDam 2000
#define PlayerBulletDam 400
。。。
2、调整这些数值,看看每个数值对游戏影响,特别是确定每个数值的合理范围。这很重要,也很花时间。
3、用变量来代替这些数值,随着时间的进行,自动修改参数提高难度。
我们期望的效果是,在5分钟里我们让玩家:
1、前两分钟轻松打怪,积攒道具
2、中间两分钟有点扛不住,必须依靠道具才能继续
3、道具补充的速度赶不上消耗的速度,试图通过躲闪节省道具使用(通过这个阶段驱动玩家提高熟练度)
4、道具用完了,迅速崩溃
最终,我决定采用每分钟出现一次BOSS,出现BOSS时,缩小其他敌机出现的频率。
uint8_t EnemyManager::tick(uint32_t t) {if (createTimer.tick(t)) {EnemyBase *enemy = createEnemyObject();enemy->init();ListPushBack(enemyList, (LTDataType) enemy);}if (createBossTimer.tick(t)) {createTimer.defaultSpan -= 200;EnemyBase *enemy = new EnemyT3();enemy->init();ListPushBack(enemyList, (LTDataType) enemy);}for (ListNode *cur = enemyList->next; cur != enemyList; cur = cur->next) {EnemyBase *enemy = ((EnemyBase*) (cur->data));enemy->tick(t);}return 0;
}
这样,每过一分钟,敌机出现间隔少200ms。难度也随之增加了。
STM32学习笔记二十一:WS2812制作像素游戏屏-飞行射击游戏(11)探索游戏脚本
相关文章:
STM32学习笔记二十:WS2812制作像素游戏屏-飞行射击游戏(10)探索游戏平衡
游戏平衡很重要,然而,却往往得不到开发者的重视。或者,没有花时间仔细去做调整。 做过游戏开发的,都听说过一个词叫“数值爆炸”,实际上就是平衡没做好。 怎么样才能算是平衡呢? 玩家投入游戏的有两个&a…...
Windows 搭建ninja 编译c++的环境
1. 系统安装python, 测试版本为(3.7.0) 2. 从官方网站获取get-pip.py https://bootstrap.pypa.io/get-pip.py 3. 安装pip python get-pip.py 4. 安装ninja pip install ninja 5. 准备CMakeLists.txt cmake_minimum_required(VERSION 3.22) proje…...
环形链表【链表】【哈希】
Problem: 141. 环形链表 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 哈希 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( n ) O(n) O(n) Code # Definition for singly-lin…...
Hive实战:网址去重
文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、基于HDFS数据文件创建Hive外部表4、利用Hive SQL实…...
206.【2023年华为OD机试真题(C卷)】最大N个数与最小N个数的和(JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-最大N个数与最小N个数的和二.解题思路三.题解代…...
【刷题日记】青少年CTF-Misc(一)
靶场链接 青少年CTF Markdown 题目难度:★ 题目描述:s0ng师傅发现M0x1n师傅特别喜欢用这个写文档,你知道M0x1n这次把FLAG放到哪里了吗?flag格式为:qsnctf{xxx}。 下载附件,打开即可看到flag flag qsnc…...
《未知星途:自我掌握命运》
最近在追一部叫《吞噬星空》的国产动漫,由此引发了我对于人类命运的思考。 在宇宙的无边黑暗中,我们仰望星空,对于外星生命的想象如同星云般浩渺。外星生命,或许是以我们无法想象的形态存在着,可能是以光辉的气体、晶莹…...
一个简单的KNN实现方法
对于许多离散问题,经过神经网络解决再通过softmax之后每一个值在[0,1]之间的连续变量,想要将其离散化,即离散化到每个元素都是 binary-variable,即 0-1 ,这时可以用KNN方法,其实就是找到与这个向量的方差最…...
Vue实现加减法验证码
引入Vue.js 在HTML文件的<head>标签中引入Vue.js的CDN链接: <script src"https://cdn.jsdelivr.net/npm/vue2.6.11/dist/vue.min.js"></script>创建Vue实例 接下来,我们要创建一个Vue实例,并将其挂载到HTML文…...
PDF最强处理工具-StirlingPDF
Stirling-PDF 一个功能强大的本地托管的基于 Web 的 PDF 操作工具,这个软件最初是使用 ChatGPT 制作的,持续的版本迭代更新,支持对 PDF 文件执行各种操作,例如拆分合并、转换、重组、添加图像、旋转、压缩等。完全开源免费&#x…...
SpringCloud系列篇:入门讲解Spring Cloud是什么
🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.Spring Cloud是什么 二.Spring …...
GEE:随机数
作者:CSDN _养乐多_ 本文将介绍在 Google Earth Engine(GEE)上生成随机数的 API,可以指定随机数的生成范围、类型(整型、浮点型)、分布方式(均匀分布、正态分布)。 文章目录 一、随…...
H266/VVC率失真优化与速率控制概述
率失真优化技术 率失真优化: 视频编码的主要目的是在保证一定视频质量的条件下尽量降低视频的编码比特率,或者在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下,为了应对不同的视频内容,往往有多种候选的编码方…...
thinkphp6入门(14)-- 多关联模型查询
背景: 有3个数据表,一个User表,一个Cloth表,一个Shoe表。 Cloth表和Shoe表分别和User表通过user_id关联。 thinkphp 6中如何通过模型查询所有用户,其中包括每个用户的cloth和shoe。 多关联模型查询: 1.…...
MT8766安卓核心板规格参数_MTK8766核心板模块方案定制
MT8766安卓核心板:高性能、稳定可靠、集成度高的一体化解决方案 MT8766安卓核心板采用联发科MTK8766四核4G模块方案,是一款高度集成的安卓一体板。四核芯片架构,主频可达到2.0GHz,支持国内4G全网通。12nm制程工艺,支持…...
k8s的声明式资源管理(yaml文件)
1、声明式管理的特点 (1)适合对资源的修改操作 (2)声明式管理依赖于yaml文件,所有的内容都在yaml文件当中 (3)编辑好的yaml文件,还是要依靠陈述式的命令发布到k8s集群当中 kubect…...
Qt中图片旋转缩放操作
在我们开发过程中,难免会遇到加载图片的问题,在上一个开发项目里我就遇到了图片缩放的问题,所以,我决定将这一部分好好研究,记录下来,希望对大家有帮助哟~ 在讲解之前,我们先看一看具体的展示效…...
LeetCode 2125. 银行中的激光束数量【数组,遍历】1280
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
关于图像分割任务中按照比例将数据集随机划分成训练集和测试集
1. 前言 之前写了分类和检测任务划分数据集的脚本,三大任务实现了俩,基于强迫症,也实现一下图像分割的划分脚本 分类划分数据:关于图像分类任务中划分数据集,并且生成分类类别的josn字典文件 检测划分数据ÿ…...
回文链表【链表】
Problem: 234. 回文链表 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 先转成列表。 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例: O ( n ) O(n) O(n) Code # Definition for si…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
