即时反应:对砍系统Demo实现

        大家好,我是老肉。梦想成为一名游戏策划的我,在上个月构想了一款Demo,而为了提升可行性和我的程序思维,我打算先使用纯程序的方式实现基础玩法,不在一开始就接入unity引擎。所以就先分享一下这次最基础的纯程序版本。但是说实话做的有很多问题,很抽象,然后有影响平衡性的bug存在...不过,作为一次不错的尝试,也是值得分享出来的。

        希望我和GPT的配合也能越来越熟练吧,现在还是有沟通问题,我需要亲自修BUG。

        P.S.我用的C#,因为这样子以后更好接入Unity。

关于即时对砍

        直接上来介绍一下游戏循环:

  1. 进入战斗
    玩家和史莱姆开始战斗,游戏将显示双方的状态信息(如生命值、攻击力等)。

  2. 时间流逝与操作
    时间在游戏中以固定的步长流逝,玩家和史莱姆的时间流逝是同步的:

    • 玩家可以在史莱姆的攻击间隔内选择行为(如攻击、格挡、闪避)。
    • 每次玩家执行一个行为时,消耗的时间会体现在整体的时间流逝上。
    • 如果玩家在史莱姆攻击间隔尚未结束时执行行为,剩余的时间可以继续让玩家操作,直到攻击间隔结束。
  3. 史莱姆的攻击

    • 当史莱姆的攻击间隔小于等于零时,史莱姆会立即执行攻击。
    • 如果玩家的操作导致时间间隔小于零(即玩家的行为时间超过史莱姆攻击的剩余时间),史莱姆的攻击会即时触发。
    • 史莱姆攻击后,重新计算下一次攻击的间隔时间。
  4. 史莱姆死亡的处理

    • 如果史莱姆在玩家的行为中被击杀,即使当前的攻击间隔已经耗尽,史莱姆也不会行动。
    • 在史莱姆死亡后,将刷新一只满血的新史莱姆,继续战斗。
  5. 玩家死亡的处理

    • 如果玩家的生命值降至零,循环结束,游戏结束,输出玩家的得分(即击败的史莱姆数量)。

循环示例:

  • 初始状态:史莱姆的攻击间隔为 3 秒。
  • 玩家在第 2.5 秒时选择攻击,消耗 2 秒时间,时间流逝至第 4.5 秒。此时,史莱姆的攻击时间间隔已经小于零,因此史莱姆执行攻击后,进入下一次攻击循环。
  • 如果史莱姆在这次攻击前被玩家击杀,则不会触发史莱姆的攻击行为。
谢谢GPT帮我做的总结,基本上就是要实现这个循环,我先写了Warrior和Slime两个类。

类的实现

        类需要一些基本的属性,如 Health(生命值)、ActionTime(行为耗时)、CooldownTime(冷却时间)、Name(名称)、Damage(伤害)等。还有相对应的行为,也就是格挡、攻击、闪避等,每个行为对应其成员函数。

        Warrior

public class Warrior
{
    public string Name { get; set; }
    public double Health { get; set; }
    public double AttackPower { get; set; }
    public double BaseCooldown { get; set; }
    public double BaseActionTime { get; set; }

    public Warrior(string name, double health, double attackPower, double baseCooldown, double baseActionTime)
    {
        Name = name;
        Health = health;
        AttackPower = attackPower;
        BaseCooldown = baseCooldown;
        BaseActionTime = baseActionTime;
    }

    // 攻击方法
    public double Attack()
    {
        Console.WriteLine($"{Name} 执行挥砍攻击!");
        return AttackPower; // 返回当前攻击力
    }

    // 格挡方法
    public double Block(double incomingDamage)
    {
        double reducedDamage = incomingDamage / 2; // 格挡减少50%的伤害
        Console.WriteLine($"{Name} 执行格挡,减少50%的伤害!");
        return reducedDamage;
    }

    // 闪避方法
    public double Dodge(double incomingDamage)
    {
        bool isDodged = new Random().NextDouble() <= 0.6; // 60%闪避成功率
        Console.WriteLine($"{Name} 执行闪避!");
        if (isDodged)
        {
            Console.WriteLine($"{Name} 成功闪避了攻击!");
            return 0; // 闪避成功时伤害为0
        }
        else
        {
            Console.WriteLine($"{Name} 未能闪避,承受了攻击!");
            return incomingDamage; // 闪避失败,伤害为正常值
        }
    }

    // 承受伤害方法
    public void TakeDamage(double damage)
    {
        Health -= damage;
        Console.WriteLine($"{Name} 承受了 {damage} 点伤害,当前生命值:{Health}");
    }
}

        Slime

public class Slime
{
    public string Name { get; set; }
    public double Health { get; set; }
    public double AttackPower { get; set; }
    public double BaseActionTime { get; set; } // 基础动作时间

    private Random random = new Random(); // 随机数生成器

    public Slime(string name, double health, double attackPower, double b
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值