增加对不同帖子类型的工具函数
Change-Id: I725923ef606d0f2b434da3f5f4ab6927a5fe3e9a
diff --git a/src/components/pet/index.tsx b/src/components/pet/index.tsx
new file mode 100644
index 0000000..c859b68
--- /dev/null
+++ b/src/components/pet/index.tsx
@@ -0,0 +1,94 @@
+import React, { useState, useEffect } from 'react';
+
+const petList = [
+ {
+ id: 'cat01',
+ name: '喵喵',
+ image: '/pets/cat.png',
+ mood: '开心',
+ hunger: 50,
+ },
+ {
+ id: 'dog01',
+ name: '汪汪',
+ image: '/pets/dog.png',
+ mood: '饥饿',
+ hunger: 70,
+ }
+];
+
+const PetGame = () => {
+ const [selectedPetIndex, setSelectedPetIndex] = useState(0);
+ const [petStates, setPetStates] = useState(petList);
+
+ // 定时每 5 秒减少一点饥饿值
+ useEffect(() => {
+ const timer = setInterval(() => {
+ setPetStates(prev =>
+ prev.map((pet, index) =>
+ index === selectedPetIndex
+ ? {
+ ...pet,
+ hunger: Math.min(100, pet.hunger + 2),
+ mood: pet.hunger > 80 ? '生气' : pet.mood
+ }
+ : pet
+ )
+ );
+ }, 5000);
+ return () => clearInterval(timer);
+ }, [selectedPetIndex]);
+
+ const handleFeed = () => {
+ setPetStates(prev =>
+ prev.map((pet, index) =>
+ index === selectedPetIndex
+ ? {
+ ...pet,
+ hunger: Math.max(0, pet.hunger - 20),
+ mood: '开心'
+ }
+ : pet
+ )
+ );
+ };
+
+ const handlePet = () => {
+ setPetStates(prev =>
+ prev.map((pet, index) =>
+ index === selectedPetIndex
+ ? { ...pet, mood: '超级开心' }
+ : pet
+ )
+ );
+ };
+
+ const currentPet = petStates[selectedPetIndex];
+
+ return (
+ <div style={{ textAlign: 'center', padding: 20 }}>
+ <h2>当前宠物:{currentPet.name}</h2>
+ <img
+ src={currentPet.image}
+ alt={currentPet.name}
+ style={{ width: 200, height: 200, cursor: 'pointer' }}
+ onClick={handlePet}
+ />
+ <p>情绪:{currentPet.mood}</p>
+ <p>饥饿值:{currentPet.hunger}/100</p>
+
+ <button onClick={handleFeed}>🍖 喂食</button>
+
+ <div style={{ marginTop: 20 }}>
+ <h4>切换宠物:</h4>
+ {petStates.map((pet, index) => (
+ <button key={pet.id} onClick={() => setSelectedPetIndex(index)} style={{ marginRight: 8 }}>
+ {pet.name}
+ </button>
+ ))}
+ </div>
+ </div>
+ );
+};
+
+export default PetGame;