using System;
namespace SampleRPG
{
class Program
{
static void Main(string[] args)
{
Healer healer = new Healer();
// プロパティの使用
Console.WriteLine("[回復前]Healer HP: " + healer.Hp);
healer.Heal(100);
Console.WriteLine("[回復後]Healer HP: " + healer.Hp);
Console.WriteLine("---");
// ポリモーフィズム:派生クラスのインスタンスを基本クラスの変数に入れることができる性質
List<Player> players = new List<Player>();
players.Add(new Magician());
players.Add(new Magician("black magician", 500));
players.Add(new Healer());
foreach(Player p in players)
{
p.SayName();
p.Attack();
Console.WriteLine("---");
}
}
}
}
using System;
namespace SampleRPG
{
// abstract 抽象クラス:インスタンスの生成禁止
abstract class Player
{
// メンバ変数,デフォルトはprivate
private string name;
private int hp;
// コンストラクタ
public Player() { }
// オーバーロード
public Player(string name, int hp)
{
this.name = name;
this.hp = hp;
}
// プロパティ:メンバ変数のように使えるアクセサをつくる仕組み
public int Hp
{
set
{
this.hp = value;
if(this.hp < 0)
{
this.hp = 0;
}
}
get
{
return this.hp;
}
}
public void SayName()
{
Console.WriteLine(this.name);
}
public virtual void Attack()
{
Console.WriteLine("attack!");
}
}
}
using System;
namespace SampleRPG
{
class Magician: Player
{
// コンストラクタ
// 引数がない場合
public Magician() : base("magician", 100) { }
// オーバーロード
public Magician(string name, int hp) : base(name, hp) { }
// オーバーライド
public override void Attack()
{
Console.WriteLine("magic attack!");
}
}
}
using System;
namespace SampleRPG
{
class Healer: Player
{
public Healer() : base("healer", 100) { }
public Healer(string name, int hp) : base(name, hp) { }
public override void Attack()
{
Console.WriteLine("small attack!");
}
public void Heal(int amount)
{
this.Hp += amount;
}
}
}