设计原则之单一职责原则

本文通过贪吃蛇游戏实例,阐述了如何将复杂的游戏功能进行模块化分解,以降低各功能间的耦合度,便于后期扩展与维护。重点介绍了如何通过类的设计来实现战斗模块中的动画播放、位移及逻辑判断等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

当我们拿到一个较为复杂的需求,我们首先应该抽象他的各种功能模块,分别写成一个个类,如同愚公移山,石头一块一块的运走,土一筐一筐运走,最后完成移走山峰的目标。

正文:

每一个类负责一块功能,一定要拆分的细;降低各种功能之间的耦合性。当我们把所有的功能实现在一个类里面,第一次实现没神魔问题可以运转,当我们改变需求时则发现,牵一发动全身,代码之间的耦合性特别的高,不方便扩展;


比如说:

            战斗:1.播放动画;

                      2.位移;

                      3逻辑判断;

例如贪吃蛇demo中的一段代码:

public class SnakeHead : SnakeBody
{
    public SnakeHead(SnakeBody tmpFront, Transform target)
        : base(tmpFront, target)
    {
    }
    public void RotatLeft()
    {
        Vector3 tmpAngle = targetObj.localEulerAngles;
        tmpAngle.y -= 90;
        targetObj.localEulerAngles = tmpAngle;
    }
    public void RotatRight()
    {
        Vector3 tmpAngle = targetObj.localEulerAngles;
        tmpAngle.y += 90;
        targetObj.localEulerAngles = tmpAngle;
    }
    public void MoveFront()
    {
        targetObj.Translate(targetObj.forward, Space.World);
    }
}
public class SnakeBody {
 protected SnakeBody front;
   protected  Transform targetObj;
    public SnakeBody(SnakeBody  tmpFront, Transform  target)
    {
        this.front = tmpFront;
        this.targetObj = target;
        oldPos = targetObj.position;
    }
     private Vector3 oldPos;
    public Vector3 OldPos
    {
        get
        {
            return oldPos;
        }
        set
        {
            oldPos = value *2;
        }
    }
 // 更新记录
    public void ExchangePos()
    {
        oldPos = targetObj.position;
    }
    public void FollowFront()
    {
        //  等于前面身体的 移动前的位置
        targetObj.position = front.OldPos;
        // 更新前面身体 记录的位置
        front.ExchangePos();
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值