好久都沒有寫了。今天做了類繼承的練習,做了一個小隊,進行簡單的判定。
namespace 兵團建立練習
{
class ServantBasics
{
public string name; //protected 代表着子類可以繼承,外部不能調用
protected int attack;
public ServantBasics(string name,int attack) //做了一個構造函數,用于指派
{
this.name = name;
this.attack = attack;
}
}
class SaberServant : ServantBasics //用于繼承父類函數 這個就是文法
{
public SaberServant(string name, int attack) : base(name, attack) //這個其實是上面輸入父類後,然後有個紅線自動點選會自動填入,不過我也認真記了一下,和this用法挺像的
{
}
public void skill()
{
Console.WriteLine("“EX咖喱棒!!!”");
Console.WriteLine("給對面造成了{0}點傷害",attack);
}
}
class ArcherServant: ServantBasics //用于繼承父類函數
{
public ArcherServant(string name,int attack) : base(name,attack)
{
}
public void skill()
{
Console.WriteLine("“無限劍制”");
Console.WriteLine("給對面造成了{0}點傷害", attack);
}
}
class RiderServant : ServantBasics //用于繼承父類函數
{
public RiderServant(string name, int attack) : base(name, attack)
{
}
public void skill()
{
Console.WriteLine("“無限劍制”");
Console.WriteLine("給對面造成了{0}點傷害", attack);
}
}
class CasterServant : ServantBasics //用于繼承父類函數
{
public CasterServant(string name, int attack) : base(name, attack)
{
}
public void skill()
{
Console.WriteLine("“萬符必應破戒”");
Console.WriteLine("給對面造成了{0}點傷害", attack);
}
}
class Program
{
static void Main(string[] args)
{
var r = new Random(); //建立一個随機的骰子
var servantParty = new ServantBasics[10]; //建立了一個10個人小隊的數組
for (int i = 0; i < servantParty.Length; i++)
{
var roll = r.Next(1, 101);
if (roll > 70)
{
servantParty[i] = new SaberServant("劍士",100);
}
else if (roll > 40)
{
servantParty[i] = new ArcherServant("弓箭手", 90);
}
else
{
servantParty[i] = new CasterServant("魔法師", 110);
}
}
for (int i = 0; i < servantParty.Length; i++)
{
if (servantParty[i] is SaberServant) //我是這樣了解的,用父類建立的這個子類,是不是SaberSevrvant
{
SaberServant saber = servantParty[i] as SaberServant; //如果不是傳回空,如果是就給saber指派
Console.WriteLine("這是第{0}個,職業是{1}",i+1,saber.name);
saber.skill();
}
else if (servantParty[i] is ArcherServant)
{
Console.WriteLine("這是第{0}個,職業是{1}", i + 1, (servantParty[i] as ArcherServant).name);
(servantParty[i] as ArcherServant).skill(); //嘗試進行簡寫
}
else
{
Console.WriteLine("這是第{0}個,職業是{1}", i + 1, (servantParty[i] as CasterServant).name);
(servantParty[i] as CasterServant).skill();
//我自己測試發現不能直接用servantParty[i].skill,沒有選項,因為這個數組是基于父類建立的
//這種方法被稱為裡氏轉換,挺神奇的,因為我以為數組都存好了資料new後的資料,居然不能 .skill
}
}
Console.ReadKey();
}
}
}
用了一個數組來記錄東西,我覺得這樣似乎可以做生成地圖随機怪獸的玩意,是以記錄下來,友善以後忘記時候來看看,可能會有幫助