KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

[考古] 其实上用一句话和几行程序代码就可以完全剧透寒蝉[EG中透着剧透][BASIC版本+C版本]

[ 16764 查看 / 29 回复 ]

回复:其实上用一句话和几行程序代码就可以完全剧透寒蝉[EG中透着剧透]


召唤C++代码……

其他语言看起来很累……
本主题由 见习版主 小汀 于 2011/9/12 18:03:15 执行 主题分类 操作
分享 转发

却问何日君再来...
TOP

回复:其实上用一句话和几行程序代码就可以完全剧透寒蝉[EG中透着剧透]


嘛,于是翻译完成……
  1. #include <stdio.h>

  2. #include <stdlib.h>

  3. #include <memory>



  4. typedef int BOOL;

  5. #define TRUE    1

  6. #define FALSE    0

  7. static int s_nCounter = 0;

  8. enum emCharacters

  9. {

  10.     survive_rika,

  11.     survive_rena,

  12.     survive_k1,

  13.     survive_mino,

  14.     survive_shino,

  15.     survive_satoko,

  16.     survive_hanyu,

  17.     survive_jiro,

  18.     survive_kyosuke,

  19.     characters_size,

  20. };

  21. static BOOL s_bArrSurvive[characters_size];

  22. static bool s_bSp = false;



  23. // ============================================================================

  24. // ==============================================================================



  25. BOOL GetRP(void)

  26. {

  27.     if (s_bSp) {

  28.         return TRUE;

  29.     }



  30.     //~~~~~~~~~~~~~~~~~~~

  31.     int nRP = rand() % 100;

  32.     //~~~~~~~~~~~~~~~~~~~



  33.     return(nRP > 0 ? TRUE : FALSE);

  34. }



  35. void Counter(void);

  36. void Set(void);

  37. void Special(void);

  38. void Start(void);

  39. void Confront(void);

  40. void LastWorld(void);



  41. static int s_nYear = 0;

  42. static int s_nMonth = 0;

  43. static int s_nDay = 0;



  44. // ============================================================================

  45. // ==============================================================================



  46. void Result()

  47. {

  48.     while (true) {

  49.         printf("CONTINUE?(Y/N)");



  50.         //~~~~~~~~~~~~~~~~~~~~

  51.         char cChose = getchar();

  52.         //~~~~~~~~~~~~~~~~~~~~



  53.         getchar();

  54.         if ('N' == cChose || 'n' == cChose) {

  55.             break;;

  56.         } else if ('Y' == cChose || 'y' == cChose) {

  57.             Counter();

  58.             break;

  59.         }

  60.     }

  61. }



  62. // ============================================================================

  63. // ==============================================================================

  64. void Counter(void)

  65. {

  66.     ++s_nCounter;

  67.     Set();

  68. }



  69. // ============================================================================

  70. // ==============================================================================

  71. void Set(void)

  72. {

  73.     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  74.     BOOL bArrSurvive[characters_size] = { 1, 1, 1, 1, 1, 1, 0, 1, 1 };

  75.     //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



  76.     memcpy(s_bArrSurvive, bArrSurvive, sizeof(bArrSurvive));

  77.     if (s_nCounter >= 8) {

  78.         Special();

  79.     } else {

  80.         Start();

  81.     }

  82. }



  83. // ============================================================================

  84. // ==============================================================================

  85. void Special(void)

  86. {

  87.     s_bSp = true;

  88.     s_bArrSurvive[survive_hanyu] = 1;

  89.     Start();

  90. }



  91. // ============================================================================

  92. // ==============================================================================

  93. void Start(void)

  94. {

  95.     s_nYear = 1983;

  96.     s_nMonth = 6;

  97.     for (s_nDay = 16; s_nDay < 30; ++s_nDay) {



  98.         //~~~~~~~~~~~~

  99.         int nCharSet[] =

  100.         {

  101.             survive_rena, survive_k1, survive_mino, survive_shino,

  102.             survive_satoko

  103.         };

  104.         //~~~~~~~~~~~~



  105.         for (int i = 0; i < sizeof(nCharSet) / sizeof(int); ++i) {

  106.             s_bArrSurvive[nCharSet[i]] *= GetRP();

  107.         }

  108.     }



  109.     if (30 == s_nDay) {

  110.         Confront();

  111.     }

  112. }



  113. // ============================================================================

  114. // ==============================================================================

  115. void Confront(void)

  116. {

  117.     //~~~~~~~~~~~~~~~~

  118.     int nMainCharSet[] =

  119.     {

  120.         survive_rena, survive_k1, survive_mino, survive_shino, survive_satoko

  121.     };

  122.     //~~~~~~~~~~~~~~~~



  123.     for (int i = 0; i < sizeof(nMainCharSet) / sizeof(int); ++i) {

  124.         if (FALSE == s_bArrSurvive[nMainCharSet[i]]) {

  125.             printf("GAME OVER: MAIN CHARACTER DIED\n");

  126.             Result();

  127.             return;

  128.         }

  129.     }



  130.     if (FALSE == s_bArrSurvive[survive_hanyu]) {

  131.         s_bArrSurvive[survive_jiro] = FALSE;

  132.     } else {

  133.         LastWorld();

  134.         return;

  135.     }



  136.     s_bArrSurvive[survive_rika] = 0;

  137.     printf("GAME OVER: RIKA KILLED, 'LAST PROJECT' CARRIED OUT\n");

  138.     Result();

  139. }



  140. // ============================================================================

  141. // ==============================================================================

  142. void LastWorld()

  143. {

  144.     s_bArrSurvive[survive_rika] = 1;

  145.     ++s_nMonth;

  146.     s_nDay = 1;

  147.     printf("GAME OVER : GOOD ENDING\n");

  148.     printf("%d Time loops had been created by Rika and Hanyu.\n", s_nCounter);

  149.     printf("THANKS FOR PLAYING!\n");

  150.     getchar();

  151. }



  152. // ============================================================================

  153. // ==============================================================================

  154. int main()

  155. {

  156.     Counter();

  157.     return 0;

  158. }

复制代码

却问何日君再来...
TOP

回复: 其实上用一句话和几行程序代码就可以完全剧透寒蝉[EG中透着剧透]

原帖由 nemoma 于 2008-9-11 12:48:00 发表
顺便说一句,以上的C语言版本也可以顺利编译运行……

由以上的程序可见……
某人的轮回是多么的M…………



=V=

一些补充

风格上,BOOL/TRUE/FALSE其实是不好的习惯,且不论,至少这样typedef/define不好,不过感觉合适就用了,另外enum中定义用小写显得很猥琐,主要是偷懒了……拷贝方便 XD


尊重原著,基本是完全的句句对译,除了输入那段(Result())


嘛,RP即使100/100,没开金手指一样没有GoodEnd

还我回笼觉时间><

却问何日君再来...
TOP

回复: 其实上用一句话和几行程序代码就可以完全剧透寒蝉[EG中透着剧透][BASIC版本+C版本]

原帖由 Miliardo 于 2008-9-11 14:03:00 发表
= =C语言似乎不够K&R,标准化时代之前嗯


嘛,VC6/CPP,不标准(ANSI)习惯了,有些想标准都标准不起来……何况有时候贪C++提供的一些小便宜
话说,DevC++也很那啥……
虽然都离K&R时代很远了吧



原帖由 粘土火星 于 2008-9-11 16:04:00 发表
原帖由 于 2008-9-11 13:06:00 发表
原帖由 nemoma 于 2008-9-11 12:48:00 发表
顺便说一句,以上的C语言版本也可以顺利编译运行……

由以上的程序可见……
某人的轮回是多么的M…………

=V=

一些补充

风格上,BOOL/TRUE/FALSE其实是不好的习惯,且不论,至少这样typedef/define不好



orz…………为啥要用那个BOOL。。。。。。



这个,其实也觉得猥琐,说起来是因为从名字看,应该是是否生存的意思,这样就是bool/BOOL比较合适,然而原著用了RP参与计算,若是转成&&0/&&1或&&ture/false都显得怪异,于是还是保留了计算,用了更合适的BOOL,然后是纠结的typedef甚至#define,掩面……

却问何日君再来...
TOP