尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Portrait-first Klondike solitaire built with React, TypeScript, and Vinext.
Tap the stock to draw, select a card then tap its destination, or drag a card or sequence. Eligible cards move directly to foundations when tapped. Double-tap a card to make an available move. Each stock tap reveals one card. The latest three waste cards overlap from left to right, with earlier ranks exposed; only the newest is playable. Older cards remain in the waste for recycling. The start screen features Tina and one primary button: Start Game for a fresh hand, or Continue Game for a saved hand. Fresh hands have an empty waste pile and face-down stock; cards open only when the stock is tapped. The playing screen uses a compact stats header and a Pause / Undo / Hint / How to play bottom bar. Includes the last 100 moves of undo, hints, three table colors, optional synthesized sound, a pause menu, local game saving, and automatic completion when the tableau is uncovered and the stock and waste are empty.
Requires Node 22.13 or newer. Run npm install, then npm run dev. Run npm run build for the deployment build. Run node --experimental-strip-types lib/solitaire.test.mjs for rule checks and npx tsc --noEmit for TypeScript checks.
This repository contains the web game, not an Android wrapper. The layout includes viewport safe-area support, touch dragging, scalable cards, reduced-motion support, and localStorage persistence. Enable JavaScript and DOM storage in the host WebView. The hosting preview is private; player-facing use requires an appropriately accessible deployment. An actual Android WebView and device test is still required before release. Offline packaging and a service worker are not included.
The rule tests cover shuffled deck uniqueness, deal structure, single-card drawing, rolling three-card visibility and recycling, sequence moves, empty-column restrictions, foundations, scores, immutability, uncovering cards, and hint discovery. Production build and TypeScript checks pass. Browser UI QA was not performed because browser control is unavailable in this session. Optional WebMCP hint discovery is feature-detected but could not be runtime-verified without a supported browser context.
Create a new empty repository on GitHub (e.g. funda-solitaire). Do not initialize it with a README — this repo already has one.
git init
git add .
git commit -m "chore: initial release of Funda Solitaire"
git remote add origin https://github.com/YOUR_USERNAME/funda-solitaire.git
git branch -M main
git push -u origin main
funda-solitaire GitHub repository.npm run builddist/clientnpm installAfter deployment, confirm the security headers are live:
curl -I https://your-project.vercel.app
You should see:
X-Frame-Options: DENYX-Content-Type-Options: nosniffReferrer-Policy: strict-origin-when-cross-originContent-Security-PolicyThis game is fully client-side and requires no environment variables. Do not add API keys or secrets — none are needed.
Saved games, timer, sound preference, and table color are local to the current browser profile. Undo and redo history are session-only. The timer runs only on the playing screen and pauses for menus and when the app goes into the background. Shuffles are random and are not guaranteed solvable.
Foundations sit on the left; the stock sits at the far right beside its waste pile. New games deal 28 cards in staggered order. Dragging uses a fixed overlay for complete sequences, legal-target feedback, overlap-assisted drops, return animation on invalid drops, and edge scrolling. Exposed indices use compact stack spacing; the waste shows the latest three cards in an overlapping fan. Motion respects the system reduced-motion preference. Touch behavior still needs verification on the target Android device.
Tina welcomes players on the start screen in simple English. New deals animate from her deck at the bottom of the table, followed by a short farewell. Hint brings her back with a legal move or draw/recycle guidance for up to ten seconds; her bubble can be dismissed. The character is a still illustration with card and interface animation, not a skeletal or video character. All guidance is text.
The game posts gameplay events to the Funda activity endpoint POST https://apip-preprod.classplusapp.com/funda/api/activity/events (override with VITE_FUNDA_EVENTS_URL at build time). The Funda backend writes Funda DB; the game never connects to the database.
Authorization: Bearer <Funda JWT>. The backend takes userId and orgId from the token. Open the game with ?token=<JWT>; the token is kept in localStorage for reloads. Without a token, analytics stay off.{ app: "solitaire", session: { sessionId, activeSeconds }, events: [{ eventId, type, payload }] }, up to 20 events, sent every 5 seconds when events are queued. payload is flat: string or number values only (booleans are sent as 0/1). The hand id travels as payload.matchId. The server sets the event time and drops unknown fields. Invalid events come back in data.rejected with HTTP 200. Spec: "Activity Tracking API" (FundaActivityTracker.docx).session_started, session_paused, session_resumed, session_ended, game_started, game_completed {outcome, score, moves, seconds, autoFinished}, game_abandoned {score, moves, seconds}, hint_used, undo_used, auto_finish_used, play_again_clicked. An empty batch every 30 seconds is the heartbeat and carries the running activeSeconds.The spec lists app values ludo, pacman and rashifal only; preprod currently accepts solitaire, but the backend team should add it officially.