分享一下抽象对象的思路

:flower_playing_cards: 一种抽象对象的设计思路

这篇帖子想和大家分享一下,关于抽象对象的一种设计思路。

:bulb: 灵感来源

这个思路源自于我在做卡牌游戏开发的时候。当时我在设计并规范卡牌的使用方式和目标判定。

这时候遇到了一类特殊的卡牌——无需指定目标的卡牌

按照常规思路,我为这类卡牌单独设置了一个分类,然后在各种相关判断条件里用 if else 来处理。

写着写着……关于这部分非指向性卡牌的特殊判断逻辑越来越多,代码也变得十分混乱 :dizzy_face:

:sparkles: 灵光一现

某一天,我在写这类卡牌释放逻辑的时候,突然想到:

这类卡牌虽然是非指向性的,但在实际操作时,它还是指向了一个看不见的区域,才能触发释放。

于是我灵机一动,直接在项目里创建了一个名为 empty 的对象 :hole:

然后把这类的卡牌修改为:需要指向 empty 对象,而不是用代码去特殊判断它是非指向性。

这样一来,这类卡牌的各种代码逻辑,就和其它指向性卡牌完全统一了!:tada:

:brain: 核心思想

这就是抽象对象的思路:

将“无目标”也抽象为一种目标对象。

:rocket: 衍生应用

顺着这个思路,我在设计制作敌人的攻击模式时,直接为敌人的每一种行为都开发了一张卡牌。

敌人的行为切换,直接复用已有的卡牌机制——每次使用不同的卡牌即可实现。


:thought_balloon: 一点小感悟:很多时候,与其不断增加特殊判断,不如换个角度,把“特殊”抽象成“通用”的一种形式。代码会清爽很多,扩展性也会更好。

1赞


类 class A{} 抽象类 abstract class B{}
对象 new A() new B()

从编程语言角度讲抽象对象这个词汇就挺抽象的

你说抽象类实现什么基础卡牌,继承这个抽象类实现变种卡牌,继承了默认的属性基于基础的东西而外新增个性化的定制
在专业的人面前你就会显得比较专业 :blossom:

虽然但是 你说的abstract关键字是设计一个卡牌抽象类的公共模板
楼主说的是把无目标也抽象为一种目标 把敌人的各种行为也抽象为一张张卡牌 攻击牌 防御牌等等
ps: 这种方式还挺常见的
你说的是编码角度反而太新手了 楼主说的是设计角度却很实用 :rofl:

:rofl:我这里说的抽象是自然语言的抽象,不是编程术语中的抽象。虽然这个题目是有点让人误解啦。

大约就是一切皆是对象,没有空的说法,统一行为

恭喜打通了任督二脉,对程序的理解又LevelUp了
一切皆行为 一切皆罪过,非人类的奇怪知识又增加了

恭喜打通了任督二脉

你小子玩抽象的 :smirk:

游戏的本质就是抽象 :crazy_face:

没有对象 = 空对象 = 有对象 = 不是单身

将没有性生活抽象为性生活对象为五姑娘,完美复用已有逻辑,减少不必要的设计。 :rofl:

说的有道理、我应算是cocos论坛最菜最菜的新手 :grin:

:rofl:不是对人 我说的是抽象类在编程语言里很基础的意思 楼主确实分享的是设计思路不是编程基础

:blossom: