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。难度也随之增加了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/600498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

农业银行RPA实践 3大典型案例分析

零接触开放金融服务在疫情之下被越来越多的银行和客户所认同,引起了更广泛的持续关注,各家银行纷纷开展产品服务创新,加速渠道迁移,同时通过远程办公、构建金融生态等方式积极推进零接触开放金融体系建设。 随着商业银行科技力量的…

Ansible的安装及简单使用

## Ansible的安装及简单使用 ## 一.Ubuntu安装Ansible sudo apt update sudo apt install ansible #使用以下命令检查安装是否成功: ansible --version二.配置Ansible #进入配置文件目录 cd /etc/ansible/ ls#文件含义 ansible.cfg #ansible配置文件,默认基本不用…

scratch绘制小正方形 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch绘制小正方形 一、题目要求 1、准备工作 2、功能实现 二、案例分析

紫光展锐5G扬帆出海 | 欧洲积极拥抱更多5G选择

和我国一样,欧洲不少国家也在2019年进入5G商用元年:英国在2019年5月推出了5G商用服务,该国最大的移动运营商EE(Everything Everywhere)最先商用5G;德国在2019年年中推出5G商用服务,德国电信、沃达丰和 Telefonica是首批…

Hive实战:分科汇总求月考平均分

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建分区的学生成绩表4、按分区加载数据5、查看分区…

nginx rewrite重写URL地址, laravel路由404问题

前言 在开发项目时,我面临一个需求:区分移动端和桌面端访问路径。移动端访问应在路径前加上/m/,而桌面端则不需要。例如: 移动端: 域名/m/路由地址桌面端: 域名/路由地址 这种设计在路由规则上带来了一定的重复,因为…

[C#]使用OpenCvSharp实现二维码图像增强超分辨率

【官方框架地址】 github.com/shimat/opencvsharp 【算法介绍】 借助于opencv自带sr.prototxt和sr.caffemodel实现对二维码图像增强 【效果展示】 【实现部分代码】 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin…

【机器学习】循环神经网络(一)

一、网络结构 RNN 处理输入序列时的信息流。 粗体箭头为各时间点信息流的活跃路径,虚线箭头显示当时不活动的连接。 一个简单RNN例子 RNN 不是一类网络,而是适用于不同问题的拓扑结构的集合。循环网络的一个有趣的方面是,有了足够的层和节点&…

export命令详解

export命令详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,让我们一同深入了解 Linux 和 Unix 系统中的一个强大命令——export,并…

PC+Wap仿土巴兔装修报价器源码 PHP源码

核心功能: 业主自助预算计算:通过简洁的界面,业主可以输入装修需求,系统自动进行预算计算信息自动收集:系统自动收集业主的基本信息,如姓名、联系方式、房屋面积等一键发送报价:业主完成预算计…

GnuTLS recv error (-110): The TLS connection was non-properly terminated.

bug 解决方案:参考 GnuTLS recv error (-110): The TLS connection was non-properly terminated. 解决方案: apt-get install gnutls-bin git config --global http.sslVerify false git config --global http.postBuffer 1048576000参考

【SpringCloud】7、Spring Cloud Gateway限流配置

1、限流介绍 Spring Cloud Gateway 的限流配置主要涉及到令牌桶算法的实现。令牌桶算法可以对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。 在 Spring Cloud Gateway 中,官方提供了 RequestRateLimiterGatewayFi…

uni-app 前后端调用实例 基于Springboot 上拉分页实现

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Grafana相关问题及答案(2024)

1、Grafana 是什么,它用于什么目的? Grafana 是一个高度灵活且富有功能的数据可视化和监控平台,旨在为技术专业人员提供强大的方式来显示和分析他们的数据。下面将详细介绍 Grafana 的关键特点和它的使用场景。 关键特点 1. 数据源的多样性…

【数据库系统概论】数据库并发控制机制——并发操作带来的数据不一致性问题有哪些

系统文章目录 数据库的四个基本概念:数据、数据库、数据库管理系统和数据库系统 数据库系统的三级模式和二级映射 数据库系统外部的体系结构 数据模型 关系数据库中的关系操作 SQL是什么?它有什么特点? 数据定义之基本表的定义/创建、修改和…

算法基础之合并果子

合并果子 核心思想&#xff1a; 贪心 Huffman树(算法): 每次将两个最小的堆合并 然后不断向上合并 #include<iostream>#include<algorithm>#include<queue> //用小根堆实现找最小堆using namespace std;int main(){int n;cin>>n;priority_queue&l…

项目-苍穹外卖基础(持续更新中~)

day1: login的后端实现&#xff1a; day 2:

【java】期末复习知识点

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 填空题封装包主类开发过程的改变interfaceabstract class访问控制关键字继承多态object 类Java I/O(输入/输出)异常线程和进程创建线程的两种基本方法 编程题Hello World编写Swing程序&#xff0c;显示一个空白窗口 填空题…

【大数据进阶第三阶段之Hive学习笔记】Hive的数据类型与数据操作

【大数据进阶第三阶段之Hive学习笔记】Hive安装-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive常用命令和属性配置-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive基础入门-CSDN博客 【大数据进阶第三阶段之Hive学习笔记】Hive查询、函数、性能优化-CSDN博客 …

奇偶数合并

今天分享一道很有意思的算法题目 1、题目描述 奇偶数合并 将所有相邻且相同的偶数相加放入相邻偶数中间 将所有相邻且相同奇数相加&#xff0c;替换掉这两个相邻且相同的奇数 最后输出合并后的数组结果。 举例 数组[1,2,2,7,8,3,3,6] 数组奇偶数合并之后[1,2,4,2,7,8,6,1…