C#---面向对象(3)
【千锋合集】史上最全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)相关推荐
- 【AJAX】JavaScript的面向对象
Ajax中后端数据返回后需要前端通过JavaScript来实现动态数据更新的问题.所以,在Ajax中加深了一遍JavaScript面向对象的印象. 基础部分: JavaScript中创建对象并简单对象 ...
- 面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?
AutoSAR入门到精通系列讲解 将从2019年开始更新关于AutoSAR的知识,从入门到精通,博主xyfx和大家一起进步 雪云飞星 ¥29.90 去订阅 简单地说结构化分析方法主要用来分析系统的功能 ...
- 2021年大数据常用语言Scala(二十八):scala面向对象 MAVEN依赖和类
目录 scala面向对象 MAVEN依赖 类 - 掌握 创建类和对象 - 掌握 getter/setter - 了解 类的构造器 - 掌握 scala面向对象 MAVEN依赖 <?xml ver ...
- php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例
本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...
- java面向过程和面向对象
面向过程(Procedure Oriented):说的是功能的行为 面向对象(Object Oriented,简称OO):说的是功能的对象 面向过程理解: 当学习java的时候先了解java语言优良的 ...
- day22_面向对象
面向过程: 优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可. 缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身. 面向对象: 优点是:解决了程序的扩展性.对 ...
- java面向对象-------静态初始化块
1.构造方法用于对象的初始化!静态初始化块,用于类的初始化操作,在静态初始化块中不能直接访问非static成员. package java面向对象; /** * 测试静态初始化块 */public c ...
- 7.12 其他面向对象设计原则3: 依赖倒置原则DIP
其他面向对象设计原则3: 依赖倒置原则DIP The Dependency Inversion Principle 7.1 依赖倒置原则DIP The Dependency Inversion P ...
- Day-16 面向对象03 类与类之间的关系
一.类与类之间的依赖关系 我用着你,但是你不属于我,这种关系是最弱的,比如,公司和雇员之间,对于正式员工,肯定要签订劳动合同,还得小心伺候着,但是如果是兼职,那无所谓,需要了你就来,不需要你就可以拜拜 ...
- 09_Java面向对象_第9天(类、封装)_讲义
今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 A: 面向过程与面向对 ...
最新文章
- python教程书籍-初学者最好的Python书籍列表
- js写css3过渡前端,web前端vue之CSS过渡效果示例
- 006---Linux用户、群组和权限
- ITK:使用FFT与输入图像的掩码图像进行归一化相关
- 标签内超出的文字显示省略号
- 欧式墙纸素材高清纹样图案,美观又大气
- spring security 的 logout 功能
- QA:mongoose中设置virtual后不工作问题
- DELL linux 网卡驱动升级
- SAP会计科目表(Charts of Accounts)
- JAVA EE面试重点
- 设计模式【2.2】-- 工厂模式怎么演变成抽象工厂模式?
- 广东省韶关计算机学校,广东韶关市华粤电脑技术学校
- 雅克比(Jacobi)迭代法解线性方程组(Matlab程序)
- 匈牙利算法python代码实现以及原理图解
- 为什么外链建设对于谷歌SEO至关重要?
- 网站注册邮件发送功能实现
- 做一个Java程序员,数学一定要好吗?
- 景安服务器不稳定,服务器常见问题二
- 移动的台风:论matplotlib和cartopy配合的地图动画漫游
热门文章
- 【操作系统③】——进程及其实现【运行态 就绪态 等待态等 PCB 进程控制块 进程要素】
- CSS3 小球抛物线动画
- 工作流之大局势2006版
- 怎样才能拍出漂亮的照片?
- 微信公众号开发系列-13、基于RDIFramework.NET框架整合微信开发应用效果展示
- Trimble Tekla Structures 2021 SP2
- 版本控制服务器-git
- (十)pytorch学习笔记---内容为学习资源摘录整合の梯度下降方法--Adadelta(5)
- css--小白入门篇5
- npm 报错 Class extends value undefined is not a constructor or null