Skip to content

About

Lucky Draw 一個為「科普寫作」課程設計的互動式抽獎模擬網站。An interactive classroom simulation inspired by Counter-Strike 2 case opening, created for a science communication activity about randomized rewards and player behavior.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Lucky Draw

一個為「科普寫作」課程設計的互動式抽獎模擬網站。

本專案以 Counter-Strike 2(CS2)造型箱(case opening) 為題材, 將隨機獎勵、近失、持續投入與虛擬物品的社交價值等概念, 轉化成可以讓班上同學實際參與的課堂活動。

An interactive classroom simulation inspired by Counter-Strike 2 case opening, created for a science communication activity about randomized rewards and player behavior.


專案背景

本專案來自一門「科普寫作」課程。

課程要求學生選擇一個主題撰寫科普文章,並搭配設計一個能讓全班參與的活動。 我們選擇 Counter-Strike 2 作為主題,而我負責探討 Steam 遊戲中 造型箱抽取機制,以及其中可能涉及的心理現象。

單純透過文章說明抽箱機制,很難讓讀者真正感受到「知道機率很低, 卻仍想繼續抽取」的過程,因此我製作了 Lucky Draw, 將部分抽箱設計轉化成一個可以直接操作的互動式網站。

活動中,每位玩家會獲得有限的虛擬金幣, 可以用來抽取不同稀有度的虛擬物品。

抽到物品後,玩家可以:

  • 保留物品,增加自己的「社交分數」
  • 出售部分物品,換取更多金幣繼續抽取

活動最後會透過排行榜顯示所有參與者的社交分數, 並讓排名前三名的同學獲得實際獎勵。

藉由讓抽取結果、虛擬物品價值、排行榜與真實獎勵產生連結, 希望讓參與者不只是理解文章中的概念, 而是透過實際決策與競爭過程體驗這些機制。


設計概念

網站中的部分機制,是根據科普文章所探討的心理學概念進行設計。

本活動的目的在於提供一個可操作的體驗情境, 並非正式心理學實驗,因此網站機制與心理學概念之間的對應, 主要作為課堂討論與科普說明使用。

網站機制 對應概念 設計方式
不同稀有度的隨機抽取 變動比率增強(Variable-ratio reinforcement) 每一次抽取的結果都具有不確定性,高價值物品的出現機率較低
抽取時的滾動動畫 近失效應(Near-miss effect) 抽取動畫在結果揭曉前快速經過不同物品,使玩家感受到「差一點得到更稀有物品」的情境
每 5 次付費抽取贈送 1 次免費抽取 持續投入與沉沒成本相關決策 透過累積抽取次數與額外獎勵,使玩家在已經投入資源後產生繼續參與的誘因
不同物品具有不同社交分數 虛擬物品的社交價值 稀有物品除了具有稀有度差異,也會直接影響玩家的排行榜分數
全班即時排行榜 社會比較與競爭 將玩家持有的物品轉化成公開可比較的分數
前三名獲得實際獎勵 虛擬價值與真實誘因 讓網站中的排行榜結果與課堂中的實際獎勵產生連結

其中「5 次付費抽取贈送 1 次免費抽取」並不等同於沉沒成本效應本身, 而是用來營造「已經投入了一部分資源,因此更想繼續」的決策情境。


活動流程

  1. 玩家進入網站並建立自己的活動資料。
  2. 每位玩家取得固定數量的初始虛擬金幣。
  3. 使用金幣進行抽取,取得不同稀有度的物品。
  4. 玩家決定要保留物品,或出售物品換回金幣。
  5. 每完成一定次數的付費抽取,可以取得免費抽取機會。
  6. 系統依照目前持有的物品計算社交分數。
  7. 玩家可以查看排行榜,比較自己與其他參與者的分數。
  8. 活動結束後,由管理員頁面統整全班結果。
  9. 最終排名前三名的參與者取得課堂活動獎勵。

遊戲機制

玩家初始擁有 300 金幣。

每次付費抽取需要:

30 金幣

物品分成五種稀有度:

稀有度 出現機率 出售價格 社交分數
⚪ 白色 40% 3 1
🔵 藍色 30% 8 3
🟣 紫色 18% 20 8
🔴 紅色 9% 80 25
🟡 金色 3% 不可出售 80

每完成 5 次付費抽取,玩家可取得 1 次免費抽取機會。

因此玩家在活動過程中需要持續在兩種資源之間取捨:

金幣

可以用來進行更多次抽取。

出售物品可以增加金幣, 但同時也代表放棄該物品帶來的社交分數。

社交分數

由玩家目前持有的物品計算。

越稀有的物品通常具有越高的社交分數, 並會直接影響玩家在全班排行榜中的排名。


主要功能

隨機抽取系統

依照不同稀有度的設定機率, 隨機決定每一次抽取的結果。

抽取動畫

透過滾動式動畫呈現抽取過程, 在結果正式揭曉以前顯示不同可能的物品。

此設計除了增加互動感之外, 也用來模擬遊戲開箱中常見的近失體驗。

玩家資源管理

系統記錄:

  • 玩家目前金幣
  • 持有物品
  • 抽取次數
  • 免費抽取次數
  • 社交分數

物品出售

玩家可以選擇出售取得的部分物品, 換取金幣繼續參與抽取。

這讓玩家必須在:

「留下高價值物品」

與

「取得更多抽取機會」

之間做出決策。

免費抽取機制

完成一定次數的付費抽取後, 系統會提供免費抽取機會。

排行榜

依照所有玩家目前的社交分數產生排名。

排行榜讓原本只存在於玩家帳號中的虛擬物品, 進一步成為可以被其他參與者比較的社交指標。

在實際課堂活動中, 最終排名前三名的玩家可以取得額外獎勵。

管理員統計頁面

為了方便課堂活動進行, 另外製作管理員頁面查看整體活動狀況,例如:

  • 參與玩家
  • 抽取狀況
  • 玩家社交分數
  • 排行榜
  • 不同稀有度物品的分布
  • 活動相關統計資料

這些資料主要用於活動進行與最後的課堂討論。


專案畫面

玩家介面

圖片

抽取結果

drawing

差一點抽到紅球獲金球的滾動動畫展現近失效應。


排行榜 / 管理員頁面

圖片

使用技術

Frontend

  • React
  • Vite
  • Tailwind CSS

Data

  • Firebase Firestore

用於保存玩家資料與活動進度。

UI / Animation

  • Framer Motion
  • Lucide React

Framer Motion 主要用於開箱與介面動畫, Lucide React 則用於介面圖示。


本機執行

Clone repository:

git clone https://github.com/Trioc/lucky-draw.git
cd lucky-draw

安裝 dependencies:

npm install

啟動開發環境:

npm run dev

建立 production build:

npm run build

部分功能依賴 Firebase Firestore,若未設定對應 Firebase 環境,玩家資料相關功能可能無法正常運作。

專案限制與反思

這個網站最初的目標,是在有限的課堂時間內完成一個可供全班實際參與的互動活動, 因此部分設計以快速實作與活動需求為優先,而不是正式產品環境。

例如管理員頁面使用前端 PIN 作為簡易進入限制。

這種方式適合當時一次性的課堂活動, 但並不能視為真正的安全驗證機制。

若未來要將系統改造成正式公開服務,可以進一步改善:

使用 Firebase Authentication 或其他身份驗證方式 透過 Firebase Security Rules 限制資料存取 將管理員權限移至可信任的後端 將敏感設定移出前端程式 增加更完整的錯誤處理 改善活動資料與使用者資料的管理方式

此外,本活動的目的主要是讓參與者體驗與討論相關心理現象, 並沒有採用正式實驗設計、控制組或統計檢定, 因此不應將活動結果視為心理學研究證據。

專案狀態

本專案原先是為一次性的課堂活動所製作。

課程活動目前已結束, 原始課堂版本使用 Firebase、多排行榜與管理員統計;目前公開版為 localStorage 單機 Demo。 Repository 主要保留作為專案紀錄與程式實作參考。

About

Lucky Draw 一個為「科普寫作」課程設計的互動式抽獎模擬網站。An interactive classroom simulation inspired by Counter-Strike 2 case opening, created for a science communication activity about randomized rewards and player behavior.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages