| 項目 | 值 |
|---|---|
| 前端網址 | https://farm.ahpal.com |
| Worker URL | https://ahpal-farm-api.praystone.workers.dev |
| Pages 專案 | ahpal-farm |
| D1 資料庫 | ahpal-farm-db(database_id 見 wrangler.toml) |
| GitHub repo | praystone/ahpal-farm |
| 部署方式 | GitHub Actions(push 即部署) |
| 子網域 | farm.ahpal.com(CNAME 橘雲) |
database_id 見 worker/wrangler.toml,account_id 見 GitHub Secret CLOUDFLARE_ACCOUNT_ID。
| # | 表名 | 用途 |
|---|---|---|
| 1 | crops | 農作物靜態資料(id, name, grow_seconds, sell_price, icon) |
| 2 | farms | 每塊田(id, nickname, crop_id, planted_at, harvested, stolen_by, stolen_at) |
| 3 | farm_logs | 播種/收成/偷菜紀錄(plant / harvest / steal / stolen) |
| 4 | farm_players | 玩家金幣(nickname, coins, total_harvest, last_seen) |
5 種基礎農作物:🥕蘿蔔 60 秒 / 🍅番茄 300 秒 / 🌽玉米 1800 秒 / 🍓草莓 7200 秒 / 🍉西瓜 28800 秒
| # | 端點 | 方法 | 用途 |
|---|---|---|---|
| 1 | /api/crops | GET | 農作物清單 |
| 2 | /api/plant | POST | 種植(body: nickname, cropId) |
| 3 | /api/farm | GET | 查看自己的田(query: nickname) |
| 4 | /api/harvest | POST | 收成(body: id, nickname),寫入 farm_players.coins |
| 5 | /api/player | GET | 讀玩家金幣(query: nickname) |
| 6 | /api/steal | POST | 偷菜(body: farmId, nickname),偷者得 50% sell_price |
| 7 | /api/random-farm | GET | 隨機找一塊別人的成熟田(query: nickname) |
| 8 | /api/recent-steals | GET | 最近 20 筆偷菜紀錄(公告牆用) |
/api/harvest 讀的是 body.id,不是 body.farmId。
農場跟寵物最大的差異:離線也在長。種下去,8 小時後回來就能收。
實作方式:不要用排程器。種下去時 D1 存 planted_at,玩家來看時 Worker 算 now - planted_at,超過 grow_seconds 就回「已成熟」,收成時才寫 D1。
| # | 功能 | 狀態 |
|---|---|---|
| 1 | 種菜、收成 | ✅ 已上線 |
| 2 | 金幣系統(收成寫入、topbar 顯示、收成後即時刷新) | ✅ 已上線 |
| 3 | 偷菜(隨機偷別人的成熟田) | ✅ 已上線 |
| 4 | 偷菜 UI | ✅ 已上線 |
| 5 | 偷菜公告牆(誰偷了什麼,最近 20 筆) | ✅ 已上線 |
| # | 功能 | 狀態 |
|---|---|---|
| 1 | 等級門檻(crops 沒 level_required) | ❌ v2.1 |
| 2 | 多季作物(crops 沒 season_count) | ❌ v2.1 |
| 3 | 化肥加速 | ❌ v2.1 |
| 4 | 偷竊次數上限 | ❌ v2.1 |
| 5 | 雜草蟲害 | ❌ v2.1 |
| 6 | 土地擴張 | ❌ v2.1 |
| 目標 | 指令 | 觸發 |
|---|---|---|
| 前端 Pages | git push → GitHub Actions | 自動 |
| Worker 後端 | wrangler deploy | 永遠手動 |
| D1 資料庫 | wrangler d1 execute --remote | 永遠手動 |
subprocess.run 要用 text=True, encoding="utf-8", errors="replace"b"git ...",用 str<script> 前,先看 div 的 < > 閉合.env,腳本只讀不寫。」node --check,再看 Console。」2009 年,Facebook 開心農場。你半夜設鬧鐘起來,就為了偷同學那顆快熟的番茄。那時候,我們都還年輕。放學衝回家,打開電腦,偷菜、種菜、被偷,一個都不能少。
17 年後,開心農場回來了。不是 Facebook,是 AHPAL。
你的菜,還在長。你的青春,還在等你。