猜拳遊戲的真相 遊戲 剪刀 石頭 布 請猜拳! 程式碼 你覺得這猜拳遊戲是怎麼寫的呢?亂數決定電腦出什麼拳,然後和玩家出的拳比較? <button onclick='猜拳(0)'>剪刀</button> <button onclick='猜拳(1)'>石頭</button> <button onclick='猜拳(2)'>布</button> <p>請猜拳!</p> <script> let 出拳=['剪刀','石頭','布']; let 訊息=document.querySelector('p'); function 猜拳(玩家){ let 電腦 = Math.floor(Math.random()*3); switch((玩家-電腦+3)%3){ case 0: 訊息.innerHTML=`${出拳[玩家]} vs ${出拳[電腦]} = 平手。`; break; case 1: 訊息.innerHTML=`${出拳[玩家]} vs ${出拳[電腦]} = 你贏了!`; break; case 2: 訊息.innerHTML=`${出拳[玩家]} vs ${出拳[電腦]} = 你輸了~`; } } </script> 跟真人互猜的話,或許是這樣寫沒錯,但與電腦猜拳的話,真相是… <button onclick='猜拳(0)'>剪刀</button> <button onclick='猜拳(1)'>石頭</button> <button onclick='猜拳(2)'>布</button> <p>請猜拳!</p> <script> let 出拳=['剪刀','石頭','布']; let 訊息=document.querySelector('p'); function 猜拳(玩家){ let 機率=Math.ceil(Math.random()*100); if(機率<=50) 訊息.innerHTML=`${出拳[玩家]} vs ${出拳[(玩家+1)%3]} = 你輸了~`; else if(機率<=75) 訊息.innerHTML=`${出拳[玩家]} vs ${出拳[玩家]} = 平手。`; else 訊息.innerHTML=`${出拳[玩家]} vs ${出拳[(玩家+2)%3]} = 你贏了!`; } </script> 直接 50% 機率猜輸,有 25% 機率平手,剩下 25% 會贏,然後根據輸贏,看你出什麼,電腦就跟著出什麼,根本不需要費心處理雙方各猜什麼! 省思 在設計遊戲,總想不出程式該怎麼動作才對時,表示你不該再站在「玩家」的立場思考,而應該站在設下這場賭局的「莊家」立場,來釐清究竟是怎麼回事~