当前位置: 首页 > news >正文

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链接&#xff1a; <script src"https://cdn.jsdelivr.net/npm/vue2.6.11/dist/vue.min.js"></script>创建Vue实例 接下来&#xff0c;我们要创建一个Vue实例&#xff0c;并将其挂载到HTML文…...

PDF最强处理工具-StirlingPDF

Stirling-PDF 一个功能强大的本地托管的基于 Web 的 PDF 操作工具&#xff0c;这个软件最初是使用 ChatGPT 制作的&#xff0c;持续的版本迭代更新&#xff0c;支持对 PDF 文件执行各种操作&#xff0c;例如拆分合并、转换、重组、添加图像、旋转、压缩等。完全开源免费&#x…...

SpringCloud系列篇:入门讲解Spring Cloud是什么

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringCloud的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Spring Cloud是什么 二.Spring …...

GEE:随机数

作者&#xff1a;CSDN _养乐多_ 本文将介绍在 Google Earth Engine&#xff08;GEE&#xff09;上生成随机数的 API&#xff0c;可以指定随机数的生成范围、类型&#xff08;整型、浮点型&#xff09;、分布方式&#xff08;均匀分布、正态分布&#xff09;。 文章目录 一、随…...

H266/VVC率失真优化与速率控制概述

率失真优化技术 率失真优化&#xff1a; 视频编码的主要目的是在保证一定视频质量的条件下尽量降低视频的编码比特率&#xff0c;或者在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下&#xff0c;为了应对不同的视频内容&#xff0c;往往有多种候选的编码方…...

thinkphp6入门(14)-- 多关联模型查询

背景&#xff1a; 有3个数据表&#xff0c;一个User表&#xff0c;一个Cloth表&#xff0c;一个Shoe表。 Cloth表和Shoe表分别和User表通过user_id关联。 thinkphp 6中如何通过模型查询所有用户&#xff0c;其中包括每个用户的cloth和shoe。 多关联模型查询&#xff1a; 1.…...

MT8766安卓核心板规格参数_MTK8766核心板模块方案定制

MT8766安卓核心板&#xff1a;高性能、稳定可靠、集成度高的一体化解决方案 MT8766安卓核心板采用联发科MTK8766四核4G模块方案&#xff0c;是一款高度集成的安卓一体板。四核芯片架构&#xff0c;主频可达到2.0GHz&#xff0c;支持国内4G全网通。12nm制程工艺&#xff0c;支持…...

k8s的声明式资源管理(yaml文件)

1、声明式管理的特点 &#xff08;1&#xff09;适合对资源的修改操作 &#xff08;2&#xff09;声明式管理依赖于yaml文件&#xff0c;所有的内容都在yaml文件当中 &#xff08;3&#xff09;编辑好的yaml文件&#xff0c;还是要依靠陈述式的命令发布到k8s集群当中 kubect…...

Qt中图片旋转缩放操作

在我们开发过程中&#xff0c;难免会遇到加载图片的问题&#xff0c;在上一个开发项目里我就遇到了图片缩放的问题&#xff0c;所以&#xff0c;我决定将这一部分好好研究&#xff0c;记录下来&#xff0c;希望对大家有帮助哟~ 在讲解之前&#xff0c;我们先看一看具体的展示效…...

LeetCode 2125. 银行中的激光束数量【数组,遍历】1280

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

关于图像分割任务中按照比例将数据集随机划分成训练集和测试集

1. 前言 之前写了分类和检测任务划分数据集的脚本&#xff0c;三大任务实现了俩&#xff0c;基于强迫症&#xff0c;也实现一下图像分割的划分脚本 分类划分数据&#xff1a;关于图像分类任务中划分数据集&#xff0c;并且生成分类类别的josn字典文件 检测划分数据&#xff…...

回文链表【链表】

Problem: 234. 回文链表 文章目录 思路 & 解题方法复杂度Code 思路 & 解题方法 先转成列表。 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) Code # Definition for si…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...