RPG游戏战斗场景的设计

本文探讨了如何运用设计模式,特别是状态模式,来设计RPG游戏的战斗场景,避免复杂的if语句,提高代码的扩展性和可维护性。作者通过创建状态接口并实现不同状态的类,模拟了战斗过程中的状态转换,以此简化了状态管理。
摘要由CSDN通过智能技术生成

之前在学习设计模式,很有感触,感觉之前写的代码真的是太挫了。于是就打算开发一个简单的RPG游戏练一练。

正所谓有了锤子看什么都像钉子,各个模块写之前都想一想能不能用一些设计模式来设计。

RPG游戏的战斗场景是RPG游戏关键的一个部分,其中涉及到很多复杂的状态转换,比如直接物理攻击,选择魔法攻击,使用物品。。。

如下图是我模仿《仙剑奇侠传》中的战斗场景,稍微简化了一点,比如使用物品只能使用药品,没有投掷道具的功能。


行动类型总体上包括三类:物理攻击、魔法攻击、使用物品,分别对应左下角的三个picturebox

战斗场景有明显的状态转换关系,比如,只有先点击物理攻击的按钮,才能选择攻击哪个敌人;点击魔法攻击后,需要先选择魔法,才能继续选择攻击哪个敌人。

状态转换图如下:

(图中少了两条线,一条从选择魔法状态指向选择敌人状态,一条相反,分别为选择魔法和返回)

状态比较复杂,如果按照传统的方式,每次需要判断当前的状态,需要使用很多if语句,如果需要加入新的状态,代码的扩展性不强,修改起来比较麻烦。

我考虑到可以使用状态模式来设计。

状态模式(State Pattern)是设计模式的一种,属于行为模式。

定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
意图:允许一个对象在其内部状态改变时改变它的行为
适用场景:
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
(来自百度百科)


首先定义状态接口:

public interface State
    {
        vo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值