iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
0
自我挑戰組

跟著新手一起玩Javascript!系列 第 3

DAY3 - 遊戲實作 - 猜數字遊戲 (條件式)

  • 分享至 

  • xImage
  •  

今天我們來做做看第一個小遊戲吧!

在這之前要先了解兩個幾乎所有程式當會碰到的概念:條件式,下面就來簡單介紹一下。

條件式

在 JavaScript 與大多數語言一樣,有兩種常用用來判斷條件式的語法: if/else 和 switch/case 。

if/else

語法就是:如果符合了if(條件式){程式碼}的條件式(條件式為 true ),則執行他的程式碼,反之則查看下一個 else if(條件式){程式碼}裡的條件式是不是 true ,以此類推直到所有 else if 都檢查完畢,最後如果有一個 else,就執行他的程式碼。
好像繞口令一樣,我們直接看以下的範例:

if(num > 10){
   console.log("比10大");
}
else if(num > 5){
   console.log("比5大");
}
else if(num <= 5){
   console.log("比5小(或等於5)");
}
else{
   console.log("不是數字");
}

如果輸入 num = 20; ,在第一個 if 條件式的地方就是 true,所以會輸出 "比10大" 。要注意的是,這時候不會繼續檢查期他 else if 裡條件式是不是 true,所以並不會再輸出一個 "比5大" 。

如果輸入 num = 2; ,前面的 if 和第一個 else if 裡的條件式都是 false ,來到第二個 else if 的地方,他的條件式是 true ,所以會輸出 "比5小(或等於5)" 。

如果輸入 num = "abc"; ,因為 "abc" 在做與數字比較的運算時,會轉型為型別為 number 的 NaN (Not a Number),而 NaN 這個 number(對,是 number) 不相於任何其他數字,所以前面三個條件式都為 false,會執行 else 的程式碼,輸出 "不是數字" 。

switch/case

switch/case 適合用在條件很多,條件式又不是一個範圍而是一個值的狀況。 (其他狀況就用 if/else 吧)
這次我們直接來看範例:

switch(score){
   case 'A':
      console.log("高於90分");
      break;
   case 'B':
      console.log("高於80分");
      break;
   case 'C':
      console.log("高於70分");
      break;
   case 'D':
      console.log("高於60分");
      break;
   default:
      console.log("不及格");
}

當 case 的值符合 switch(條件) ,就會開始執行以下的程式碼。注意一下是所有以下的程式碼。所以我們需要用 break; 這個語法來做打斷,跳出 swtich。

猜數字遊戲

接著就可以來實做第一個遊戲了:猜數字遊戲

在HTML的部分,我們製作一個用來起動遊戲的按鈕:

<button type="button" onclick="checkNum()">開始猜數字遊戲</button>

在 JavaScript 的部分,我們先做一個能夠產生隨機數的 function (在主程式會用到):

//取一個隨機數
function GetRandomNumber(min,max)
{ 
    var range = max - min; 
    var rand = Math.random(); 
    return(min + Math.round(rand * range)); 
} 

主程式的部分如下:
裡頭用到的 prompt 和 alert 都是 window 的 method ,用來跳出對話盒用的。

//猜數字遊戲
function checkNum(){
    var min = 1;
    var max = 100;
    var times = 10;
    var answer = GetRandomNumber(min,max);
    var playerGuess;
    var messageOfRange = "範圍 : " + min + " 到 " + max;
    var messageOfPrompt = "\n這個數字比 " + playerGuess + " 還要";

    alert("猜數字遊戲開始");
    for(var i = times ; i > 0 ; i-- ){
        if (i === times){
            playerGuess = prompt(messageOfRange 
            + " ,總共有 " + i + " 次機會。","");
            
        }
        else{
            if(!(playerGuess <= max && playerGuess >= min)){
                playerGuess = prompt("輸入錯誤,請重新輸入。","");
                i++;
            }
            else if(answer > playerGuess){
                playerGuess = prompt(messageOfRange 
                + " ,你還有 " + i + " 次機會。"
                + "\n這個數字比 " + playerGuess + " 還要" + "大。","");
            }
            else if(answer < playerGuess){
                playerGuess = prompt(messageOfRange 
                + " ,你還有 " + i + " 次機會。"
                + "\n這個數字比 " + playerGuess + " 還要" + "小。","");
            }
            else if(answer == playerGuess){
                alert("恭喜答對!你一共猜了 " + (times-i) + " 次。");
                break;
            }
        }
        console.log(playerGuess);
    }
    alert("遊戲結束!正確答案是 " + answer + " 。");
}

後記

覺得可以講個東西太多了,接下來要收束一下,專心講一個東西效果應該會比較好。(而且差點寫不完)/images/emoticon/emoticon04.gif


上一篇
DAY2 - JavaScript概念 - 變數的宣告與型別
下一篇
DAY4 - JavaScript概念 - 迴圈
系列文
跟著新手一起玩Javascript!4
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言