[Ruby]Game of rock-paper-scissors

Kaycheng
3 min readOct 4, 2017

--

第二次寫完整的Ruby程式(第一次是找出二的次方),發現自己盲點超多,而突破盲點,真的超爽!

第一遍的寫法是,把腦海中全部的想法一次通通倒出來,然後error,改了幾次,也無法成功run起來。於是,先停下這個部分,然後找到[Learn Ruby The Hard Way],從第一篇看到第十六篇後,再寫一遍。

第二遍從頭改過:

  1. 想法一:想用輸入數字,印出數字對應的拳。然後用數字做比對,得出贏家,但得不出結果。
  2. 想法二:改回直接印出文字,且用文字做比對,得出輸贏。
  3. 這裡學會了可以先列出array和使用i=rand(0..2),然後把i帶入array裡,變com[i]。
  4. 原來rand(0..2) 和 rand(3)會得出一樣的結果。
  5. 這裡遇到的困難點是:前面都跑得起來,但在if…end裡,設置有錯,所以一直error。解法是分段後,把每段if(elsif改回if)…else…end拆下來試。全部都跑得起來,再全部合起來跑。

第三次修改,加上輸入非rock、 paper、 scissors的因素。因為發現如果使用者輸入非rock、 paper、 scissors,會出現error,所以加上while迴圈。

結果:若是一開始輸入非rock、 paper、 scissors後,再輸入rock、 paper、 scissors,則程式表現正常。但若一開始輸入rock、 paper、 scissors,則會出現error…,需再輸入一遍rock、 paper、 scissors才能正常表現。目前不懂問題出在哪邊。

第四次修改:在while迴圈前,再加一遍if…end,這樣結果就是正常的了。

第五次修改:覺得重複的code太多,於是做value的設定。但如果設置一個value = “You are “ + player,然後puts value,player會出現最先輸入的值,而不是最後的值,但不影響結果。是個奇怪的點!

總結:

  1. 若是code很長,跑起來出錯。則拆段跑,跑得起來,再全部合起來跑。
  2. 永遠要記得反著想!才能找出盲點!
  3. 修改前,要開新檔案,之後才有依據做對照!
  4. 應該還能再更優化,加油!

--

--

No responses yet