import { useState } from 'react' import React from 'react'; // Added for useEffect // --- Scratch Card Game Types and State --- type Tier = { name: string; unlockPrice: number; buyPrice: number; }; const TIERS: Tier[] = [ { name: 'Bronze', unlockPrice: 2, buyPrice: 3 }, { name: 'Silver', unlockPrice: 5, buyPrice: 7 }, { name: 'Gold', unlockPrice: 10, buyPrice: 15 }, ]; function App() { // --- Game State --- const [money, setMoney] = useState(20); // User starts with $20 const [unlockedTiers, setUnlockedTiers] = useState([]); // Unlocked tier names // Remove selectedTier state // const [selectedTier, setSelectedTier] = useState(null); // Currently selected tier const [count, setCount] = useState(0) // --- Card State --- const [card, setCard] = useState<{ winningNumbers: number[]; fields: { value: number; scratched: boolean; won: number | null }[]; tier: Tier | null; } | null>(null); // --- Play History State --- const [history, setHistory] = useState<{ tier: string; winnings: number; winningNumbers: number[]; fields: number[]; }[]>([]); // --- Tier Unlock Logic --- const handleUnlockTier = (tier: Tier) => { if (money >= tier.unlockPrice && !unlockedTiers.includes(tier.name)) { setMoney(money - tier.unlockPrice); setUnlockedTiers([...unlockedTiers, tier.name]); } }; // --- Tier Select Logic --- // Remove handleSelectTier // const handleSelectTier = (tier: Tier) => { // if (unlockedTiers.includes(tier.name)) { // setSelectedTier(tier.name); // } // }; // Update handleBuyCard to accept tier as argument const handleBuyCard = (tier: Tier) => { if (!unlockedTiers.includes(tier.name) || money < tier.buyPrice) return; // Generate 3 unique winning numbers (1-9) const winningNumbers: number[] = []; while (winningNumbers.length < 3) { const n = Math.floor(Math.random() * 9) + 1; if (!winningNumbers.includes(n)) winningNumbers.push(n); } // Generate 6 random fields (1-9) const fields = Array.from({ length: 6 }, () => ({ value: Math.floor(Math.random() * 9) + 1, scratched: false, won: null })); setMoney(money - tier.buyPrice); setCard({ winningNumbers, fields, tier }); // Add to history (winnings will be updated after all fields scratched) setHistory((h) => [ { tier: tier.name, winnings: 0, winningNumbers, fields: fields.map(f => f.value) }, ...h.slice(0, 9) ]); }; // --- Update history winnings after all fields scratched --- React.useEffect(() => { if (!card) return; const allScratched = card.fields.every(f => f.scratched); if (allScratched) { setHistory((h) => { const [latest, ...rest] = h; if (!latest || latest.winningNumbers !== card.winningNumbers) return h; return [ { ...latest, winnings: card.fields.reduce((sum, f) => sum + (f.won || 0), 0) }, ...rest ]; }); } }, [card]); // --- UI --- return (

Scratch Card Game

Money: ${money}
{TIERS.map((tier) => { const unlocked = unlockedTiers.includes(tier.name); return (
{tier.name}
Unlock: ${tier.unlockPrice}
Buy: ${tier.buyPrice}
{!unlocked ? ( ) : ( )}
); })}
{/* Tier Info and Card Summary */} {/* Remove all selectedTier-dependent UI (selected tier info, buy button outside tier cards, etc.) */} {card && (
Winnings this card: ${card.fields.reduce((sum, f) => sum + (f.won || 0), 0)}
)} {/* Card UI */} {card && (
{card.tier?.name} Scratch Card
{card.winningNumbers.map((num, i) => (
{num}
))}
{card.fields.map((field, idx) => ( ))}
Scratch each field one at a time. Winnings: 1-2 = 50%, 3-4 = 80%, 5-6 = 120% of card price.
)} {/* Play History */} {history.length > 0 && (
Play History
    {history.map((h, i) => (
  • {h.tier} Win: ${h.winnings}
    {h.winningNumbers.map((n, j) => ( {n} ))}
    {h.fields.map((n, j) => ( {n} ))}
  • ))}
)}
) } export default App