ツンデレ祭りー永遠のライバル
本当は関数型言語で表現したかったんだけど、日本語表記が難しく面倒なので断念(笑)
ツンデレという言葉でボクが連想するのは熱血バトル漫画ピヨッ!
using System;
namespace TunDre {
class Program {
static void Main( string[ ] args ) {
Hero hero = new Hero( );
Console.WriteLine( "後に永遠のライバルとなる敵が出現" );
Enemy enemy1 = new Enemy( hero );
TunnDreRival rival1 = hero.Sympathy( enemy1 );
Console.WriteLine( "\n強敵出現!" );
Enemy hard = new Enemy( hero );
hero.HP = 10;
Console.WriteLine( "\n" );
}
}
///
/// 主人公
///
class Hero {
///
/// 最大HP
///
private int m_maxHp = 100;
///
/// 現在のHP
///
private int m_hp;
public int HP {
get { return this.m_hp; }
set {
this.m_hp = value;
if ( this.m_hp <= ( this.m_maxHp / 10 ) )
OnPinch();
}
}
///
/// もうHPがやばいよ!
///
public event EventHandler Pinch;
///
/// HPがやばい事を外部に知らせる
///
private void OnPinch() {
Console.WriteLine( "ここまでか・・・" );
EventHandler e = Pinch;
if ( e != null ) Pinch( this, EventArgs.Empty );
}
///
/// 敵に情けをかける。
///
public TunnDreRival Sympathy(Enemy e) {
Console.WriteLine( "止めは刺さない。お前なら変われる。" );
return ( TunnDreRival ) e;
}
}
///
/// ツンデレ仕様のライバル
///
class TunnDreRival {
///
/// ライバル視している相手
///
private Hero rival;
///
/// ライバル視している人を指定して、インスタンスを生成する。
///
///
public TunnDreRival( Hero target ) {
this.rival = target;
this.rival.Pinch += new EventHandler( Rival_Pinch );
}
///
/// それは俺の獲物だ!
///
void Rival_Pinch( object sender, EventArgs e ) {
this.Help( );
Console.WriteLine( "お前を倒すのは俺だ!" );
}
///
/// 主人公を助ける。
///
private void Help() {
Console.WriteLine( "だらしがないぞ!");
Console.WriteLine( "俺が奴を引き付けている間に必殺技を使え!" );
Console.WriteLine( "よし、やったな!" +
"流石俺の永遠のライバルだけあるぜ!" );
}
///
/// 昨日の敵は今日の友
///
public static explicit operator TunnDreRival( Enemy obj ) {
return new TunnDreRival( obj.Target );
}
}
///
/// 主人公の敵
///
class Enemy {
///
/// 敵視している相手
///
private Hero target;
internal Hero Target {
get { return target; }
}
///
/// ターゲットを指定して、インスタンスを生成する。
///
/// 敵視している相手
public Enemy( Hero target ) {
this.target = target;
}
}
}
やっぱりライバルの助けはイベントだね♪それと、敵がライバルに変るのもお約束の仕様さ♪