用物件導向的方式解說"殺手"這個遊戲:

第一個物件當然是"參賽者"
他有下列屬性:
  1. BOOL  alive   // true=活著, false=死了, default = true
  2. INT8   cunning  // 參賽者的奸詐度, 0~100, default = 0
他有下列的成員函式:
  1. 取牌,看,然後蓋回
  2. 翻牌示眾
  3. 低頭閉眼
  4. 抬頭睜眼
  5. 說話
  6. 表決
  7. 握手
  8. 留遺言
  9. 在一旁暗自啜泣
  10. 歡呼
第二個物件是"殺手"
他繼承"參賽者"的一切特性, 他另有一樣私有的成員函式是:
  1. 密謀殺人
第三個物件是"主持人"
他是觸發事件的中心, 他的成員函式有:
  1. 發牌
  2. 宣布黑夜來臨
  3. 宣布黎明
  4. 宣判死亡
  5. 主持表決
  6. 宣布握手
第四個物件是"殺手遊戲"本身, 他有點像是主程式的意味:
當一群人出去玩無聊, 拿出牌來決定要玩殺手,
"殺手遊戲"這個物件就被創造, 接著初始化.

初始化要作的事情有:
  1. 創造"主持人"*1
  2. 創造"參賽者"*n
  3. 主持人執行"發牌"的動作. (通常是2張黑牌,n-2張紅牌)
  4. 參賽者執行"取牌,看,然後蓋回"的動作
  5. 如果參賽者看到的是黑牌, 則"殺手"物件產生
GAME_CYCLE:
  • 主持人執行"宣布黑夜來臨"的動作
  • 參賽者執行"低頭閉眼"的動作
  • 殺手執行"抬頭睜眼"的動作
  • 殺手執行"密謀殺人"的動作
  • 殺手執行"低頭閉眼"的動作
  • 主持人執行"宣布黎明"的動作
  • 參賽者執行"抬頭睜眼"的動作
  • 主持人執行"宣判死亡"的動作, 告訴參賽者剛剛誰死了
    • 剛死的參賽者執行"翻牌示眾"的動作
    • 剛死的參賽者執行"留遺言"的動作
    • 剛死的參賽者執行"在一旁暗自啜泣"的動作
    • 接著他的 alive 值被設為 false, 所有的成員函式被除能
  • if (活著的參賽者數-活著的殺手數)=2
     then goto SHAKE_HAND;
  • 參賽者執行"說話"的動作
  • 主持人執行"主持表決"的動作
  • 參賽者執行"表決"的動作, 由表決結果
  • 主持人執行"宣判死亡"的動作, 告訴參賽者剛剛誰死了
    • 剛死的參賽者執行"翻牌示眾"的動作
    • 剛死的參賽者執行"在一旁暗自啜泣"的動作
    • 接著他的 alive 值被設為 false, 所有的成員函式被除能
  • 參賽者執行"說話"的動作
  • if (活著的參賽者數-活著的殺手數)=2
     then goto SHAKE_HAND;
    else goto GAME_CYCLE;
SHAKE_HAND:
  • 主持人執行"宣布握手"的動作
  • 參賽者執行"握手"的動作
    • 唯有好人和好人握手, 好人方獲勝
    • 其他情況都是殺手方獲勝
  • 參賽者執行"歡呼"或是"在一旁暗自啜泣"的動作

上面這篇是 sk 很久以前寫的...
前陣子公司同事聚會,我教大家玩了兩盤「殺手」,
從前國樂團玩樂的美好回憶湧上心頭,特 po 此文紀念。 :D



arrow
arrow
    全站熱搜

    瘋小貓 發表在 痞客邦 留言(5) 人氣()