DEV Community

Cover image for 為什麼遊戲「再一關就好」?拆解那些讓你欲罷不能的設計
張旭豐
張旭豐

Posted on

為什麼遊戲「再一關就好」?拆解那些讓你欲罷不能的設計

為什麼遊戲「再一關就好」?拆解那些讓你欲罷不能的設計

先問你一個問題

你曾經有沒有過以下經驗?

躺在床上想說「再打一場就睡」,結果抬頭已經凌晨三點。

或者地鐵上玩消消樂,本來想只玩五分鐘,結果一路玩到站。

這也許不是意志力的問題。更可能是設計出來的

機制一:即時反饋(Immediate Feedback)

遊戲裡幾乎每一個動作,都會馬上得到回應。

你砍了一隻怪 → 經驗值跳出來
你放了一個技能 → 畫面馬上閃爍
你答對了一個題目 → 「太棒了!」音效響起

這種「做一個動作,立刻得到回應」的感覺,在現實生活裡不一定常見。

現實:你努力了一個月,老闆說「還不錯,繼續加油」(有時候一個月才一次回應)
遊戲:你砍了一隻怪,馬上看到數字跳出來

玩遊戲時,你的大腦會覺得「這個世界很有回應」——也許就停不下來了。

機制二:階梯式成就感(Progressive Challenge)

好的遊戲會設法讓難度階梯式上升——讓你墊腳搆得到,但搆的過程有點挑戰性。

心理學上有個詞叫「心流(flow)——就是完全沉浸在活動裡,忘記時間的那種感覺」:
挑戰太簡單 → 無聊
挑戰太難 → 焦慮
挑戰剛好比你能力高一點點 → 專注到忘記時間

遊戲設計師常會參考這個框架來設計難度曲線。

機制三:未知獎勵(Variable Reward)

這一招很強。

想像你有兩種情況:

情況 A:你知道打敗這只怪,會掉 100 金幣。100% 確定。

情況 B:你不知道打敗這只怪會掉什麼。可能掉 10 金幣,可能掉稀有裝備,也可能什麼都沒有。隨機的。

即使兩個選項的「平均報酬」一樣,如果你問身邊朋友「你喜歡哪一個」,他們可能會選情況 B——那種「不知道」的刺激感,會讓大腦對「未知的驚喜」特別有反應。

手機遊戲的抽卡、轉蛋,有些可以說是這個機制的變形。

庭庭:這些東西跟我的生活有什麼關係?

不只是遊戲。

有些平台的設計——例如 Instagram 的限時動態、Netflix 的自動播放、Spotify 的每週推薦——常會用到「即時反饋」和「未知獎勵」的元素。

當你知道這些機制在運作的時候,你就可以選擇「我要不要被它影響」。

你可以是這樣的人:
玩手遊的時候,知道這些機制存在,所以玩完這關就選擇真的去睡。

而不是這樣的人:
「奇怪我為什麼每次都停不下來⋯⋯」

小傑:如果想做得更正式

遊戲化機制(gamification)不只是手機遊戲的專利。

如果你想把它做成展覽或互動裝置,硬體電路可以讓回饋從「虛擬」變成「物理」:

材料

  • Arduino Uno(大約 200 元)
  • 三色 LED 燈 + 220Ω 電阻 x 3
  • 麵包板和杜邦線

概念:做一個「能量條」——每次觀眾做一個指定動作(按鈕、觸碰感測器),燈就亮一格。累積到一定程度,全部 LED 閃爍 + 播放成功音效。

這就是把遊戲的「即時反饋」和「階梯式成就感」變成實體感受的做法。

進階版:加入隨機性——有時候做完動作只亮 1 格,有時候亮 2 格(未知獎勵)。觀眾可能會想「再試一次看看會亮幾格」。

阿哲:如果想用這些機制做作品

好消息:這些機制是可以拿來做好事的。

例如:

  • 讀書 app:每讀完一個章節,馬上有一個小測驗(即時反饋),讓讀書也有「打怪」的感覺
  • 習慣養成:每完成一次習慣,就在日曆上打一個勾(台階式成就感),累積三十天給自己一個獎勵(未知獎勵)
  • 互動藝術:讓觀眾參與的每一步都得到視覺或聲音的回應,讓他們不願意離開

下次看到一個讓你停不下來的設計時,試著問自己:
這是哪一種機制在作用?

知道名字之後,你就比較不容易被它牽著走了。

實驗:自己體驗即時反饋

用 p5.js 做出來的。點擊圓圈,馬上看到分數增加(即時反饋)。有時候只加 1 分,有時候加 10 分(未知獎勵)。分數越高,升級需要的分數越多(階梯式成就感)。

// p5.js 遊戲化機制實驗
// 點擊黃色目標,觀察三種上癮機制

let score = 0;
let level = 1;
let pointsToNextLevel = 10;
let target;
let particles = [];

function setup() {
  createCanvas(400, 400);
  noCursor();
  spawnTarget();
}

function spawnTarget() {
  target = {
    x: random(50, width - 50),
    y: random(80, height - 50),
    size: 30 + random(10)
  };
}

function draw() {
  background(30);

  // 即時反饋粒子
  for (let p of particles) {
    fill(255, 200, 50, p.life);
    noStroke();
    ellipse(p.x, p.y, p.size);
    p.x += p.vx;
    p.y += p.vy;
    p.life -= 5;
  }

  // 目標
  fill(255, 220, 0);
  noStroke();
  ellipse(target.x, target.y, target.size);

  // 等級進度條
  fill(50);
  rect(20, 20, 200, 20, 5);
  let scoreInLevel = score - (pointsToNextLevel - 10);
  if (scoreInLevel < 0) scoreInLevel = 0;
  let progress = scoreInLevel / (pointsToNextLevel - (pointsToNextLevel - 10));
  if (progress > 1) progress = 1;
  fill(0, 200, 100);
  rect(20, 20, 200 * progress, 20, 5);

  // 分數與等級
  fill(255);
  textSize(14);
  text(`分數: ${score}`, 20, 60);
  text(`等級: ${level}`, 20, 80);

  // 清除死亡粒子
  particles = particles.filter(p => p.life > 0);

  // 游標
  noFill();
  stroke(255);
  ellipse(mouseX, mouseY, 20);
  line(mouseX - 12, mouseY, mouseX + 12, mouseY);
  line(mouseX, mouseY - 12, mouseX, mouseY + 12);
}

function mousePressed() {
  let d = dist(mouseX, mouseY, target.x, target.y);
  if (d < target.size / 2) {
    // 即時反饋:馬上加分
    let reward = random() < 0.3 ? 10 : 1;  // 未知獎勵:30% 機率得 10 分
    score += reward;

    // 等級提升(支援一次升多級)
    while (score >= pointsToNextLevel) {
      level++;
      pointsToNextLevel += 10;
    }

    // 粒子特效
    for (let i = 0; i < 8; i++) {
      particles.push({
        x: target.x,
        y: target.y,
        vx: random(-3, 3),
        vy: random(-3, 3),
        size: random(4, 10),
        life: 255
      });
    }

    spawnTarget();
  }
}
Enter fullscreen mode Exit fullscreen mode

試著把 random() < 0.3 改成 0.50.1,看遊戲感覺怎麼變化。

今天的功課

下次玩遊戲的時候(如果你有玩的話),注意三件事:

  1. 我在哪個時刻停不下來? 是打Boss的緊張感?還是開寶箱的期待感?
  2. 這個遊戲什麼時候讓我覺得自己很強? 第幾關?什麼操作?
  3. 我能不能用一句話總結這款遊戲最吸引我的部分?

如果你能回答這三個問題,你就知道這個遊戲在用哪一招抓住你了。

今日概念:遊戲讓人停不下來,通常不是因為「好玩」两个字能解釋的。背後常見的手法包括「即時反饋」、「台階式成就感」和「未知獎勵」——設計師把它們按得比較精準。

一句話版本:當你的大腦開始覺得「每個動作好像都有意義」的時候,你可能就停不下來了。

Top comments (0)