TypeScript-塔防游戏接口设计

        创作灵感来自于2024年7月25号上架steam端的一个塔防游戏《王国保卫战5:联盟》,是一款比较经典的塔防游戏,第一次接触是在4399网页端的版本,这个版本于2024年7月28号通过普通模式的最后一关,总体上就是好玩,同时也萌发了写塔防游戏的想法,不过在正式开写之前打算通过接口的方式初步摸索一下里面的系统设计,于是有了下面的这篇文章。

        主要是一些接口的初步设计,后续不一定要沿用这个模版,不过大体上思路是这样的,话不多说,直接上代码(后续有时间会继续迭代这个版本,同时借助Cocos或者untiy实现游戏的原型)

// 塔防游戏 接口设计
export namespace TowerDefense {

    // 属性命名空间
    export namespace Property {
        /*
            描述
            @param name      名字
            @param introduce 介绍
        */
        export interface Description {
            name: string;
            introduce: string;
        }
        /*
            攻击
            @param base      基础伤害
            @param physical  物理穿透
            @param magimic   魔方穿透
        */
        export interface Attack {
            base: number;
            physical: number;
            magimic: number;
        }
        /*
            防御
            @param base      基础防御
            @param physical  物理防御
            @param magimic   魔方防御
        */
        export interface Defense {
            base: number;
            physical: number;
            magimic: number;
        }
        /*
            生命周期
            @method create    创建
            @method update    更新
            @method destroy   销毁
        */
        export interface LifeCycleComponent {
            create(): void;
            update(): void;
            destroy(): void;
        }
        /*
            游戏实体
            @param des       描述
            @param attack    攻击
            @param defense   防御
            @param speed     速度
            @param hp        血量
            @param state     状态
        */
        export interface GameEntity extends LifeCycleComponent {
            des: Property.Description;
            attack: Property.Attack;
            defense: Property.Defense;
            speed: number;
            hp: number;
            state: State.GameStateManager;
        }
    }
    // 状态命名空间
    export namespace State {
        /*
            状态
            @param  des       描述
            @param  time      持续时间
            @method execute   防御
        */
        export interface BaseState {
            des: Property.Description;
            time: number;
            execute(): void;
        }
        /*
            冰冻状态
        */
        export interface FrozenState extends BaseState {
            
        }
        /*
            燃烧状态
            @param  attack  伤害
        */
        export interface BurningState extends BaseState {
            attack: Property.Attack;
        }
        /*
            护盾状态
            @param  defense  防御
        */
        export interface ShieldedState extends BaseState {
            defense: Property.Defense;
        }
        /*
            治愈状态
            @param  health  恢复值
        */
        export interface HealthState extends BaseState {
            health: number;
        }
        /*
            速度状态
            @param  speed  速度变化值
        */
        export interface SpeedState extends BaseState {
            speed: number;
        }
        /*
            状态管理类
            @param  states       状态列表
            @method execute      执行状态 
            @method addState     添加状态
            @method removeState  移除状态
        */
        export interface GameStateManager {
            states: Array<BaseState>;
            execute(): void;
            addState(state: BaseState): void;
            removeState(state: BaseState): void;
        }
    }

    // 技能命名空间
    export namespace Skill {
        /*
            技能接口
            @param  des       描述
            @param  cd        冷却时间
            @method release   释放技能
        */
        export interface ISkill {
            des: Property.Description;
            cd: number;
            release(): void;
        }
        /* 敌人技能接口 */
        export interface IEnemySkill extends ISkill {

        }
        /* 英雄技能接口 */
        export interface IHeroSkill extends ISkill {

        }
    }

    // 敌人命名空间
    export namespace Enemy {
        /*
            敌人攻击
            @param  damage  对基地造成的伤害
        */
        export interface EnemyAttack extends Property.Attack {
            damage: number;
        }
        /*
            敌人
            @param  attack  攻击
            @param  skills  技能列表
        */
        export interface IEnemy extends Property.GameEntity {
            attack: EnemyAttack;
            skills: Array<Skill.IEnemySkill>;
        }
    }

    // 英雄命名空间
    export namespace Hero {
        /*
            英雄
            @param  skills  技能列表
        */
        export interface IHero extends Property.GameEntity {
            skills: Array<Skill.IHeroSkill>;
        }
    }

    // 游戏地图命名空间
    export namespace Map {
        /* 
            二维坐标
            @param  x  x坐标
            @param  y  y坐标
        */
        export interface Coordinate {
            x: number;
            y: number;
        }
        /*
            路径
            @param  start  起点
            @param  end    终点
            @param  width  宽度
        */
        export interface IPath {
            start: Coordinate;
            end: Coordinate;
            width: number;
        }
        /*
            塔槽
            @param  coordinate  坐标
        */
        export interface ITowerSlot {
            coordinate: Coordinate;
        }
        /*
            地图
            @param  paths       路径
            @param  towerSlots  塔槽
        */
        export interface IMap {
            paths: Array<IPath>;
            towerSlots: Array<ITowerSlot>;
        }
    }

    // 防御塔命名空间
    export namespace Tower {
        /*
            塔升级
            @param  level  等级
            @param  cost   升级花费
        */
        export interface TowerUpgrade {
            level: number;
            cost: number;
        }
        /*
            防御塔
            @param   slot         塔槽
            @param   radius       塔半径
            @param   upgradeList  升级列表
            @method  upgrade      升级
        */
        export interface ITower extends Property.GameEntity {
            slot: Map.ITowerSlot;
            radius: number;
            upgradeList: Array<TowerUpgrade>;
            upgrade(): void;
        }
    }

    // 关卡命名空间
    export namespace Level {
        /*
            敌人批次
            @param  enemies  敌人列表
            @param  delay    敌人生成延迟
            @param  time     敌人生成时间
            @param  path     敌人路径
        */
        export interface IEnemyBatch {
            enemies: Array<Enemy.IEnemy>;
            delay: number;
            time: number;
            path: Array<Map.IPath>;
        }
        /*
            敌人波次
            @param  enemyBatches  敌人批次
            @method execute       进入波次时触发
        */
        export interface IEnemyWave {
            enemyBatches: Array<IEnemyBatch>;
            execute(): void;
        }
        /*
            关卡
            @param  map      地图
            @param  waves    敌人波次
        */ 
        interface ILevel {
            map: Map.IMap;   
            waves: Array<IEnemyWave>;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值