repositories
loading repo index
repositories
loading repo index
repository
loading code, commits, and activity
Robin-hood Game
stars
latest
clone command
git clone gitlawb://did:key:z6MkwMR9...adEc/robin-hood-gamegit clone gitlawb://did:key:z6MkwMR9.../robin-hood-gamec8777c8csync from playground5h ago| #1 | import { useState, useEffect } from 'react'; |
| #2 | import type { AppScreen } from './game/types'; |
| #3 | import { loadSettings } from './game/storage'; |
| #4 | import { setMuted } from './game/sound'; |
| #5 | import Menu from './Menu'; |
| #6 | import Game from './Game'; |
| #7 | import Leaderboard from './Leaderboard'; |
| #8 | import Settings from './Settings'; |
| #9 | |
| #10 | export default function App() { |
| #11 | const [screen, setScreen] = useState<AppScreen>('menu'); |
| #12 | const [leaderboardKey, setLeaderboardKey] = useState(0); |
| #13 | |
| #14 | // Apply saved settings on mount |
| #15 | useEffect(() => { |
| #16 | const settings = loadSettings(); |
| #17 | setMuted(!settings.soundEnabled); |
| #18 | }, []); |
| #19 | |
| #20 | return ( |
| #21 | <div |
| #22 | style={{ |
| #23 | width: '100vw', |
| #24 | height: '100vh', |
| #25 | display: 'flex', |
| #26 | alignItems: 'center', |
| #27 | justifyContent: 'center', |
| #28 | background: '#000', |
| #29 | overflow: 'hidden', |
| #30 | touchAction: 'none', |
| #31 | userSelect: 'none', |
| #32 | WebkitUserSelect: 'none', |
| #33 | }} |
| #34 | > |
| #35 | <div |
| #36 | style={{ |
| #37 | position: 'relative', |
| #38 | width: 'min(100vw, 100vh)', |
| #39 | height: 'min(100vw, 100vh)', |
| #40 | maxWidth: '100%', |
| #41 | maxHeight: '100%', |
| #42 | }} |
| #43 | > |
| #44 | {screen === 'menu' && ( |
| #45 | <Menu |
| #46 | onPlay={() => setScreen('playing')} |
| #47 | onLeaderboard={() => setScreen('leaderboard')} |
| #48 | onSettings={() => setScreen('settings')} |
| #49 | /> |
| #50 | )} |
| #51 | |
| #52 | {screen === 'playing' && ( |
| #53 | <Game |
| #54 | onMenu={() => setScreen('menu')} |
| #55 | onScoreSaved={() => setLeaderboardKey(k => k + 1)} |
| #56 | /> |
| #57 | )} |
| #58 | |
| #59 | {screen === 'leaderboard' && ( |
| #60 | <Leaderboard key={leaderboardKey} onBack={() => setScreen('menu')} /> |
| #61 | )} |
| #62 | |
| #63 | {screen === 'settings' && ( |
| #64 | <Settings onBack={() => setScreen('menu')} /> |
| #65 | )} |
| #66 | </div> |
| #67 | </div> |
| #68 | ); |
| #69 | } |
| #70 |