如果諸葛亮用C#寫出師表...

看到一篇18年的文章 "C++版《出師表》",站長覺得挺有意思的,就用C# 控制檯也實現了一遍,技術上沒啥難度,但複製代碼費了1、2個小時,純粹無聊寫着玩,看者別在意枚舉、類名、變量中文命名,純粹爲了娛樂。


出師表背景(照抄原文)

今天讓我們碼農以特有的方式,來表達對丞相大人的敬仰與懷念!

蜀章武元年(221年),劉備稱帝,諸葛亮爲丞相。蜀漢建興元年(223年),劉備病死,將劉禪託付給諸葛亮。諸葛亮實行了一系列比較正確的政治和經濟措施,使蜀漢境內呈現興旺景象。爲了實現全國統一,諸葛亮在平息南方叛亂之後,於建興五年(227年)決定北上伐魏,擬奪取魏的長安,臨行之前上書後主,即這篇《出師表》。

C# 源碼

定義的一些類、枚舉

public enum 王道 { 明, 昏 };

/// <summary>
/// 先帝,陛下,文景,桓靈
/// </summary>
public class 君
{
  public string 名稱;
  public bool 在;
  public 王道 爲君;

  public 君()
  {
    在 = true;
    爲君 = 王道.明;
  }
  public bool 創業(double percentage)
  {
    if (percentage < 0.5)
    {
      在 = false;
      Console.WriteLine($"{名稱}創業未半而中道崩殂!");
      return false;
    }
    else
    {
      Console.WriteLine(@"{名稱}興復漢室,還於舊都!");
      return true;
    }
  }

  public void 開張聖聽()
  {
    Console.WriteLine("開張聖聽,光先帝遺德!");
  }

  public void 恢弘志士之氣() { }

  public void 賓自菲薄() { }

  public void 引喻失義()
  {
    Console.WriteLine("塞忠諫之路!");
  }

  public void 親賢臣遠小人()
  {
    爲君 = 王道.明;
  }

  public void 親小人遠賢臣()
  {
    爲君 = 王道.昏;
  }

  public void 治國() { }

  public void 偏私()
  {
    Console.WriteLine("內外異法!");
  }

  public bool 諮之(string 事)
  {
    if (王道.明 == 爲君)
    {
      return true;
    }

    return false;
  }

  public bool 施行(string 事)
  {
    return true;
  }

  public void 曰(string 言)
  {
    Console.WriteLine(言);
  }

  public void 每與臣論此事()
  {
    Console.WriteLine("嘆息痛恨於桓靈。");
  }

  ~君() { }
}


public enum 臣德 { 賢, 奸 }

public class 侍衛之臣
{
  private 君 劉備 = new 君();
  private 君 劉禪 = new 君();

  public string 名稱;
  public 臣德 爲臣;

  public void 不懈於內()
  {
    Console.WriteLine($"侍衛之臣({名稱})不懈於內");
  }

  public bool 追先帝之殊遇()
  {
    if (劉備.爲君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  public bool 報之於陛下()
  {
    if (劉禪.爲君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  public bool 謀事(string 事)
  {
    if (爲臣 == 臣德.賢)
    {
      return true;
    }

    return false;
  }
}

class 忠志之士
{
  private 君 劉備 = new 君();
  private 君 劉禪 = new 君();

  public string 名稱;
  public 臣德 爲臣 = new();

  public void 忘身於外()
  {
    Console.WriteLine($"忠志之士({名稱})忘身於外!");
  }

  public bool 追先帝之殊遇()
  {
    if (劉備.爲君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  public bool 報之於陛下()
  {
    if (劉禪.爲君 == 王道.明)
    {
      return true;
    }
    else
    {
      return false;
    }
  }

  public bool 謀事(string 事)
  {
    if (爲臣 == 臣德.賢)
    {
      return true;
    }

    return false;
  }
}

public enum 氣候 { 興盛, 疲弊, 興隆, 傾頹 }

/// <summary>
/// 曹魏,東吳,益州,先漢,後漢
/// </summary>
public class 國
{
  public 氣候 國運;

  public 國()
  {
    國運 = 氣候.興盛;
  }

  public void 付諸有司論其刑賞(侍衛之臣 臣)
  {
    if (臣.爲臣 == 臣德.賢)
    {
      Console.WriteLine("賞!");
    }
    else
    {
      Console.WriteLine("刑!");
    }
  }

  ~國() { }
}

/// <summary>
/// 郭攸之,費禕
/// </summary>
public class 侍中 : 侍衛之臣 { };

/// <summary>
/// 董允
/// </summary>
public class 侍郎 : 侍衛之臣 { }

/// <summary>
/// 陳震
/// </summary>
public class 尚書 : 侍衛之臣 { }

/// <summary>
/// 張裔
/// </summary>
public class 長史 : 侍衛之臣 { }

/// <summary>
/// 蔣琬
/// </summary>
public class 參季 : 侍衛之臣 { }

/// <summary>
/// 向寵
/// </summary>
class 中都督 : 忠志之士 { }

/// <summary>
/// 諸葛亮
/// </summary>
class 丞相 : 侍衛之臣
{
  public void 回首往事()
  {
    Console.WriteLine("臣本布衣,躬耕於南陽,苟全性命於亂世,不求聞達於諸候。先帝不以臣卑鄙,猥自枉屈,三顧臣於草廬之中,諮臣以當世之事,由是感激,遂許先帝以驅馳。後值巔覆,受任於敗軍之際,奉命於危難之間,爾來二十有一年矣。");
  }

  public void 表忠心()
  {
    Console.WriteLine("先帝知臣謹慎,故臨崩寄臣以大事也。受命以來,夙夜憂嘆,恐託付不效,以傷先帝之明。故五月渡瀘,深入不毛。");
  }

  public void 請戰()
  {
    Console.WriteLine("今南方已定,兵甲已足,當獎率三軍,北定中原,庶竭駑鈍,攘除奸兇,興復漢室, 還於舊都。");
  }
  public void 道別()
  {
    Console.WriteLine("今當遠離, 臨表涕零, 不知所言。");
  }
}

Main方法

static void Main(string[] args)
{
  君 先帝 = new 君();
  先帝.名稱 = "先帝";
  先帝.創業(0.49);

  國 益州 = new 國();
  益州.國運 = 氣候.疲弊;

  Console.WriteLine("此誠危急存亡之秋也!");

  侍中 郭攸之 = new 侍中();
  郭攸之.名稱 = "郭攸之";
  if (郭攸之.追先帝之殊遇() && 郭攸之.報之於陛下())
  {
    郭攸之.不懈於內();
  }

  侍中 費禕 = new 侍中();
  費禕.名稱 = "費禕";
  if (費禕.追先帝之殊遇() && 費禕.報之於陛下())
  {
    費禕.不懈於內();
  }

  侍郎 董允 = new 侍郎();
  董允.名稱 = "董允";
  if (董允.追先帝之殊遇() && 董允.報之於陛下())
  {
    董允.不懈於內();
  }

  中都督 向寵 = new 中都督();
  向寵.名稱 = "向寵";
  if (向寵.追先帝之殊遇() && 向寵.報之於陛下())
  {
    向寵.忘身於外();
  }

  君 陛下 = new 君();
  if (陛下.爲君 == 王道.明)
  {
    陛下.開張聖聽();
    陛下.恢弘志士之氣();
  }
  else
  {
    陛下.賓自菲薄();
    陛下.引喻失義();
  }

  陛下.治國();

  bool 宮中 = false;
  bool 府中 = false;
  bool 陟臧 = false;
  bool 罰否 = false;
  Debug.Assert(宮中 == 府中);
  Debug.Assert(陟臧 == 罰否);

  侍衛之臣 作奸犯科者 = new 侍衛之臣();
  作奸犯科者.爲臣 = 臣德.奸;
  侍衛之臣 爲忠善者 = new 侍衛之臣();
  爲忠善者.爲臣 = 臣德.賢;
  if (陛下.爲君 == 王道.明)
  {
    益州.付諸有司論其刑賞(作奸犯科者);
    益州.付諸有司論其刑賞(爲忠善者);
  }
  else
  {
    陛下.偏私();
  }

  if (郭攸之.爲臣 == 臣德.賢
    && 費禕.爲臣 == 臣德.賢
    && 董允.爲臣 == 臣德.賢)
  {
    Console.WriteLine("此皆良實,志慮忠純,是以先帝簡拔以遺陛下。");
  }

  string 宮中之事 = null;
  if (陛下.諮之(宮中之事)
    && 郭攸之.謀事(宮中之事)
    && 費禕.謀事(宮中之事)
    && 董允.謀事(宮中之事))
  {

    陛下.施行(宮中之事);
    Console.WriteLine("裨補闕病, 有所廣益");
  }

  if (向寵.爲臣 == 臣德.賢)
  {
    Console.WriteLine("性行淑均,曉暢軍事。");
    Console.Write("先帝稱之曰:");
    先帝.曰("能");
    Console.WriteLine("是以衆議舉寵爲督。");
  }

  string 營中之事 = null;
  if (陛下.諮之(營中之事))
  {
    陛下.施行(宮中之事);
    Console.WriteLine("行陣和睦,優劣得所!");
  }

  君 文景 = new 君();
  君 恆靈 = new 君();
  國 先漢 = new 國();
  國 後漢 = new 國();

  文景.親賢臣遠小人();
  先漢.國運 = 氣候.興隆;
  恆靈.親小人遠賢臣();
  後漢.國運 = 氣候.傾頹;

  do
  {
    先帝.每與臣論此事();
  } while (先帝.在);

  if (郭攸之.爲臣 == 臣德.賢
          && 費禕.爲臣 == 臣德.賢
          && 董允.爲臣 == 臣德.賢)
  {
    Console.WriteLine("此悉貞良死節之臣,願陛下親之信之,則漢室之隆,可計日而待也。");
  }

  丞相 諸葛亮 = new 丞相();
  諸葛亮.回首往事();
  諸葛亮.表忠心();
  諸葛亮.請戰(); // 此臣所以報先帝而忠陛下之職分也
  諸葛亮.道別();

}

代碼輸出《出師表》

出師表部分輸出

先帝創業未半而中道崩殂!
此誠危急存亡之秋也!
侍衛之臣(郭攸之)不懈於內
侍衛之臣(費禕)不懈於內
侍衛之臣(董允)不懈於內
忠志之士(向寵)忘身於外!
開張聖聽,光先帝遺德!
刑!
賞!
此皆良實,志慮忠純,是以先帝簡拔以遺陛下。
裨補闕病, 有所廣益
性行淑均,曉暢軍事。
先帝稱之曰:能
是以衆議舉寵爲督。
行陣和睦,優劣得所!
嘆息痛恨於桓靈。
此悉貞良死節之臣,願陛下親之信之,則漢室之隆,可計日而待也。
臣本布衣,躬耕於南陽,苟全性命於亂世,不求聞達於諸候。先帝不以臣卑鄙,猥自枉屈,三顧臣於草廬之中,諮臣以當世之事,由是感激,遂許先帝以驅馳。後值巔覆,受任於敗軍之際,奉命於危難之間,爾來二十有一年矣。
先帝知臣謹慎,故臨崩寄臣以大事也。受命以來,夙夜憂嘆,恐託付不效,以傷先帝之明。故五月渡瀘,深入不毛。
今南方已定,兵甲已足,當獎率三軍,北定中原,庶竭駑鈍,攘除奸兇,興復漢室, 還於舊都。
今當遠離, 臨表涕零, 不知所言。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章