blob: c859b68ce02022677c77bc4daf5c5e91feaf6d4b [file] [log] [blame]
San3yuan30e245f2025-06-07 20:04:23 +08001import React, { useState, useEffect } from 'react';
2
3const petList = [
4 {
5 id: 'cat01',
6 name: '喵喵',
7 image: '/pets/cat.png',
8 mood: '开心',
9 hunger: 50,
10 },
11 {
12 id: 'dog01',
13 name: '汪汪',
14 image: '/pets/dog.png',
15 mood: '饥饿',
16 hunger: 70,
17 }
18];
19
20const PetGame = () => {
21 const [selectedPetIndex, setSelectedPetIndex] = useState(0);
22 const [petStates, setPetStates] = useState(petList);
23
24 // 定时每 5 秒减少一点饥饿值
25 useEffect(() => {
26 const timer = setInterval(() => {
27 setPetStates(prev =>
28 prev.map((pet, index) =>
29 index === selectedPetIndex
30 ? {
31 ...pet,
32 hunger: Math.min(100, pet.hunger + 2),
33 mood: pet.hunger > 80 ? '生气' : pet.mood
34 }
35 : pet
36 )
37 );
38 }, 5000);
39 return () => clearInterval(timer);
40 }, [selectedPetIndex]);
41
42 const handleFeed = () => {
43 setPetStates(prev =>
44 prev.map((pet, index) =>
45 index === selectedPetIndex
46 ? {
47 ...pet,
48 hunger: Math.max(0, pet.hunger - 20),
49 mood: '开心'
50 }
51 : pet
52 )
53 );
54 };
55
56 const handlePet = () => {
57 setPetStates(prev =>
58 prev.map((pet, index) =>
59 index === selectedPetIndex
60 ? { ...pet, mood: '超级开心' }
61 : pet
62 )
63 );
64 };
65
66 const currentPet = petStates[selectedPetIndex];
67
68 return (
69 <div style={{ textAlign: 'center', padding: 20 }}>
70 <h2>当前宠物:{currentPet.name}</h2>
71 <img
72 src={currentPet.image}
73 alt={currentPet.name}
74 style={{ width: 200, height: 200, cursor: 'pointer' }}
75 onClick={handlePet}
76 />
77 <p>情绪:{currentPet.mood}</p>
78 <p>饥饿值:{currentPet.hunger}/100</p>
79
80 <button onClick={handleFeed}>🍖 喂食</button>
81
82 <div style={{ marginTop: 20 }}>
83 <h4>切换宠物:</h4>
84 {petStates.map((pet, index) => (
85 <button key={pet.id} onClick={() => setSelectedPetIndex(index)} style={{ marginRight: 8 }}>
86 {pet.name}
87 </button>
88 ))}
89 </div>
90 </div>
91 );
92};
93
94export default PetGame;