WEEK 06 · JAVASCRIPT

03|運算與條件判斷

看懂一小段,動手改一點,再回到遊戲找用途。

符號的意思

符號意思例子
=指定值state = 'win'
=== / !==嚴格相等/不相等state === 'playing'
+= / -=加上/減去再存回x += 5 等同 x = x + 5
<、>、<=、>=大小比較nextShot <= 0
&& / || / !且/或/非!en.alive:敵機不存活
* / / / %乘/除/餘數i % 3:0、1、2 循環

判斷後才執行

若不是遊戲進行狀態,就 return 離開目前函式。=== 不會先幫你轉型,例如數字 3 與字串 '3' 不相等。

if (state !== 'playing') return;
if (e.key === 'r' || e.key === 'R') init();

命中判斷:全部條件都成立

Math.abs() 取絕對值。下面要求敵機還活著,而且子彈中心與敵機中心的水平、垂直距離都落在半寬/半高內。這是簡化的矩形判斷,不是照飛機輪廓逐點碰撞。

if (en.alive &&
    Math.abs(b.x - en.x) < en.w / 2 &&
    Math.abs(b.y - en.y) < en.h / 2) {
  en.alive = false;
}

三元運算與短路寫法

條件 ? 成立時的值 : 不成立時的值 用來選一個結果。A && B 只有 A 為真值才執行 B;A || B 則在 A 為假值時使用 B,不一定回傳布林值。

const message = state === 'win' ? '你贏了!' : '你輸了…';
en.alive && drawEnemy(en); // 活著才繪圖
const chosen = color || '#ff9800'; // color 未提供或為空字串等假值時用預設色

操作看看

輸入成績後按判斷。

動手修改

用 if 判斷成績,60 分以上顯示及格。注意不要把 === 寫成 =。

展開參考答案

先驗證輸入不是空白、是有限數字且介於 0~100,再作比較。

if (score >= 60) {
  message.textContent = '及格';
} else {
  message.textContent = '不及格';
}