【千锋合集】史上最全Unity3D全套教程|匠心之作_哔哩哔哩_bilibilip73

using System;

namespace gameTest
    //写一个程序,模拟英雄互相伤害的过程
    //英雄类、装备类
{
    //创建武器类,包含字段:加攻击力,加生命值
    //加防御力,加速度值,类型(包括攻击、防御、法术、移动)
    //创建英雄类,包含字段:血量,攻击力,名字,防御力,移动速度,等级
    //英雄类当中包括的方法:
    //(1)添加装备(2)卸载装备(3)攻击英雄(4)受到攻击会掉血,当血量小于等于0时英雄死亡
    //(5)每杀掉一个英雄等级+1,同时攻击力增加200
    class Program
    {
        enum EquipType { 
            Attack,
            Defense,
            Magic,
            Move,
            Jungle
        }
        /// <summary>
        /// 装备类
        /// </summary>
        class Equip {
            public string name;
            public float adBuff;
            public float hpBuff;
            public float armorBuff;
            public float speedBuff;
            //类型一般创建一个枚举
            public EquipType equiptype = EquipType.Attack;
        }
        /// <summary>
        /// 英雄类
        /// </summary>
        class Hero {
            public string name;
            public int level;
            /// <summary>
            /// 初始攻击力
            /// </summary>
            public float baseAttack;
            public float attack;
            /// <summary>
            /// 初始法强
            /// </summary>
            public float baseMagic;
            public float magic;
            public float baseDefence;
            public float defense;
            public float baseMoveSpeed;
            public float moveSpeed;
            public float hp=1000;
            /// <summary>
            /// 英雄装备栏
            /// </summary>
            public Equip[] heroEquips=new Equip[6];
            /// <summary>
            /// 初始化英雄基础信息
            /// </summary>
            public void InitHeroProperties()
            {
                attack = baseAttack;
                defense = baseDefence;
                moveSpeed = baseMoveSpeed;
                Console.WriteLine("初始化属性信息");
            }
            //加载装备
            /// <summary>
            /// 更新英雄属性信息
            /// </summary>

public void UpdateHeroProperties() {
                //初始化属性信息
                InitHeroProperties();
                for (int i = 0; i < heroEquips.Length; i++) {
                    //装备栏中有装备
                    if (heroEquips[i] != null) {
                        //英雄更新装备后的攻击力
                        attack +=  heroEquips[i].adBuff;
                        //更新装备后的防御力
                        defense +=  heroEquips[i].armorBuff;
                        //更新移动速度
                        moveSpeed +=  heroEquips[i].speedBuff;
                    }
                }
                Console.WriteLine("英雄属性更新完毕!");
            }
            public void LoadEquip(Equip equip) {

//检测装备栏是否有空余位置
                for (int i = 0; i < heroEquips.Length; i++) {
                    //有空余位置
                    if (heroEquips[i] == null) {
                        Console.WriteLine("加载装备成功!" + equip.name);
                        //将装备放在这个位置
                        heroEquips[i] = equip;
                        UpdateHeroProperties();
                        //跳出循环
                        //break;
                        //直接用return结束方法
                        return;
                    }
                    //还执行到这个位置,装备栏满了
                    Console.WriteLine("装备栏已满");
                }
            }
            /// <summary>
            /// 卸载装备
            /// </summary>
            public void UnloadEquip(string equipName) {
                for (int i = 0; i < heroEquips.Length; i++) {
                    if (heroEquips[i] != null && heroEquips[i].name==equipName) {
                        Console.WriteLine("卸载装备成功");
                        //卸载该装备
                        heroEquips[i] = null;
                        //更新英雄属性信息
                        UpdateHeroProperties();
                        //结束方法
                        return;
                    }
                }
                Console.WriteLine("卸载失败");
            }
            /// <summary>
            /// 攻击英雄
            /// </summary>
            /// <param name="targetHero">要攻击的英雄</param>
            public void AttackHero(Hero targetHero) {
                targetHero.TakeDamage(attack,this);
            }
            public void TakeDamage(float damage,Hero attacker) {
                //伤害被护甲抵消了一些
                damage -= defense;
                //真实伤害(防止伤害值为负数)
                damage = damage > 0 ? damage : 0;
                //扣血
                hp -= damage;
                //判断是否死亡
                if (hp <= 0)
                {
                    Console.WriteLine($"{name}英雄已经被{attacker.name}击杀!");
                    attacker.KillAward();
                }
                else { Console.WriteLine($"{name}英雄受到{attacker.name}攻击,伤害{damage}"); }
            }
            public void KillAward() {
                //等级+1
                level++;
                Console.WriteLine($"{name}等级提升至于{level}");
                //攻击力+200
                baseAttack += 200;
                UpdateHeroProperties();
                Console.WriteLine($"{name}伤害提升至于{attack}");
            }
        }
        static void Main(string[] args)
        {
            Equip wjzr = new Equip();
            wjzr.adBuff = 100;
            wjzr.name = "无尽之刃";
            Equip sgzz = new Equip();
            sgzz.armorBuff = 200;
            sgzz.name = "时光之杖";
            Hero dmxy = new Hero();
            dmxy.name = "德玛西亚";
            dmxy.baseMagic = 0;
            dmxy.baseAttack = 50;
            dmxy.baseDefence = 20;
            dmxy.baseMoveSpeed = 30;
            dmxy.LoadEquip(wjzr);
            //dmxy.LoadEquip(sgzz);
            Console.WriteLine("攻击力"+dmxy.attack);
            Console.WriteLine("防御力"+dmxy.defense);
            dmxy.UnloadEquip("无尽之刃");
            Console.WriteLine("攻击力" + dmxy.attack);
            Console.WriteLine("防御力" + dmxy.defense);
            dmxy.UnloadEquip("无尽");
            Hero js = new Hero();
            js.name = "剑圣";
            js.LoadEquip(wjzr);
            js.AttackHero(dmxy);
            Console.WriteLine("攻击力" + js.attack);
            Console.WriteLine("防御力" + js.defense);
        }
    }
}

C#---面向对象(3)相关推荐

  1. 【AJAX】JavaScript的面向对象

    Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...

  2. 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?

    AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...

  3. 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类

    目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...

  4. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  5. java面向过程和面向对象

    面向过程(Procedure Oriented):说的是功能的行为 面向对象(Object Oriented,简称OO):说的是功能的对象 面向过程理解: 当学习java的时候先了解java语言优良的 ...

  6. day22_面向对象

    面向过程: 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 面向对象: 优点是:解决了程序的扩展性.对 ...

  7. java面向对象-------静态初始化块

    1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...

  8. 7.12 其他面向对象设计原则3: 依赖倒置原则DIP

    其他面向对象设计原则3: 依赖倒置原则DIP  The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...

  9. Day-16 面向对象03 类与类之间的关系

    一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...

  10. 09_Java面向对象_第9天(类、封装)_讲义

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...

最新文章

  1. python教程书籍-初学者最好的Python书籍列表
  2. js写css3过渡前端,web前端vue之CSS过渡效果示例
  3. 006---Linux用户、群组和权限
  4. ITK:使用FFT与输入图像的掩码图像进行归一化相关
  5. 标签内超出的文字显示省略号
  6. 欧式墙纸素材高清纹样图案,美观又大气
  7. spring security 的 logout 功能
  8. QA:mongoose中设置virtual后不工作问题
  9. DELL linux 网卡驱动升级
  10. SAP会计科目表(Charts of Accounts)
  11. JAVA EE面试重点
  12. 设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?
  13. 广东省韶关计算机学校,广东韶关市华粤电脑技术学校
  14. 雅克比(Jacobi)迭代法解线性方程组(Matlab程序)
  15. 匈牙利算法python代码实现以及原理图解
  16. 为什么外链建设对于谷歌SEO至关重要?
  17. 网站注册邮件发送功能实现
  18. 做一个Java程序员,数学一定要好吗?
  19. 景安服务器不稳定,服务器常见问题二
  20. 移动的台风:论matplotlib和cartopy配合的地图动画漫游

热门文章

  1. 【操作系统③】——进程及其实现【运行态 就绪态 等待态等 PCB 进程控制块 进程要素】
  2. CSS3 小球抛物线动画
  3. 工作流之大局势2006版
  4. 怎样才能拍出漂亮的照片?
  5. 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示
  6. Trimble Tekla Structures 2021 SP2
  7. 版本控制服务器-git
  8. (十)pytorch学习笔记---内容为学习资源摘录整合の梯度下降方法--Adadelta(5)
  9. css--小白入门篇5
  10. npm 报错 Class extends value undefined is not a constructor or null