他到底喜欢我吗?赛博塔罗Java+前端实现,一键解答!

// 后端:Spring Boot 实现赛博塔罗API
// 项目结构:
// - pom.xml
// - src/main/java/com/example/TarotApplication.java
// - src/main/java/com/example/controller/TarotController.java
// - src/main/java/com/example/model/TarotCard.java
// - src/main/resources/application.properties

// 第一步:创建Maven项目,pom.xml内容
/*
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>cyber-tarot</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.1</version>  <!-- 2026年主流版本,替换为最新 -->
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
*/

// TarotCard.java - 塔罗牌模型
package com.example.model;

public class TarotCard {
    private String name;
    private String description;
    private String imageUrl;  // 模拟图片URL,实际可替换为真实链接

    public TarotCard(String name, String description, String imageUrl) {
        this.name = name;
        this.description = description;
        this.imageUrl = imageUrl;
    }

    // Getter 和 Setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getDescription() { return description; }
    public void setDescription(String description) { this.description = description; }
    public String getImageUrl() { return imageUrl; }
    public void setImageUrl(String imageUrl) { this.imageUrl = imageUrl; }
}

// TarotController.java - 控制器
package com.example.controller;

import com.example.model.TarotCard;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

@RestController
public class TarotController {

    // 模拟塔罗牌库(大阿卡纳22张,简化到10张示例)
    private static final List<TarotCard> CARD_LIBRARY = Arrays.asList(
        new TarotCard("恋人", "过去:霓虹心跳连接,曾经有暧昧火花。", "https://example.com/lovers.jpg"),
        new TarotCard("星星", "现在:深夜消息的微光,目前好感在积累。", "https://example.com/star.jpg"),
        new TarotCard("权杖Ace", "未来:主动迈出一步就会有火花,机会不错!", "https://example.com/wands_ace.jpg"),
        new TarotCard("隐士", "过去:他比较内向/慢热,不易表露。", "https://example.com/hermit.jpg"),
        new TarotCard("月亮", "现在:有点不确定/幻觉,需要更多互动。", "https://example.com/moon.jpg"),
        new TarotCard("圣杯骑士", "未来:如果你再主动,他会慢慢靠近。", "https://example.com/cups_knight.jpg"),
        new TarotCard("圣杯三", "过去:曾经有很好的氛围,回忆甜蜜。", "https://example.com/cups_three.jpg"),
        new TarotCard("塔", "现在:突然冷淡/误会/干扰,需要注意。", "https://example.com/tower.jpg"),
        new TarotCard("死神", "未来:需要彻底结束旧模式,才能新生(放手或转变)。", "https://example.com/death.jpg"),
        new TarotCard("太阳", "未来:明朗结局,他很可能喜欢你!", "https://example.com/sun.jpg")
    );

    @GetMapping("/api/tarot/draw")
    public Map<String, Object> drawCards() {
        // 随机抽3张牌:过去、现在、未来
        Random random = new Random();
        TarotCard past = CARD_LIBRARY.get(random.nextInt(CARD_LIBRARY.size()));
        TarotCard present = CARD_LIBRARY.get(random.nextInt(CARD_LIBRARY.size()));
        TarotCard future = CARD_LIBRARY.get(random.nextInt(CARD_LIBRARY.size()));

        // 计算随机“喜欢度” (0-100)
        int likeScore = random.nextInt(101);

        Map<String, Object> result = new HashMap<>();
        result.put("past", past);
        result.put("present", present);
        result.put("future", future);
        result.put("likeScore", likeScore);
        result.put("advice", getAdvice(likeScore));

        return result;
    }

    private String getAdvice(int score) {
        if (score > 80) return "哇塞!塔罗说:他超级喜欢你,赶紧行动吧~";
        else if (score > 50) return "嗯嗯,好感度中等偏上,多互动试试水温。";
        else return "目前不太乐观,先爱自己多一点吧。塔罗建议:别急,缘分自来。";
    }
}

// TarotApplication.java - 主应用
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TarotApplication {
    public static void main(String[] args) {
        SpringApplication.run(TarotApplication.class, args);
    }
}

// application.properties (src/main/resources)
server.port=8080
spring.application.name=cyber-tarot

// 运行后端:mvn spring-boot:run 或 IDE运行TarotApplication.java
// API测试:访问 http://localhost:8080/api/tarot/draw
<!-- 前端:简单HTML+JS页面(使用Fetch调用后端API) -->
<!-- 保存为 index.html,直接浏览器打开 -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>赛博塔罗:他到底喜欢我吗?</title>
    <style>
        body { background: #000; color: #0ff; font-family: monospace; text-align: center; }
        .card { display: inline-block; margin: 10px; padding: 10px; border: 1px solid #0ff; width: 200px; }
        img { width: 100%; height: auto; filter: drop-shadow(0 0 10px #0ff); }
        button { background: #0ff; color: #000; padding: 10px 20px; border: none; cursor: pointer; }
        button:hover { background: #fff; }
    </style>
</head>
<body>
    <h1>赛博塔罗占卜:他到底喜欢我吗?</h1>
    <p>默念问题,点击抽牌~</p>
    <button onclick="drawCards()">一键抽牌</button>
    <div id="result"></div>

    <script>
        async function drawCards() {
            try {
                const response = await fetch('http://localhost:8080/api/tarot/draw');
                const data = await response.json();

                const resultDiv = document.getElementById('result');
                resultDiv.innerHTML = `
                    <h2>喜欢度:${data.likeScore}%</h2>
                    <p>${data.advice}</p>
                    <div class="card">
                        <h3>过去:${data.past.name}</h3>
                        <p>${data.past.description}</p>
                        <img src="${data.past.imageUrl}" alt="${data.past.name}">
                    </div>
                    <div class="card">
                        <h3>现在:${data.present.name}</h3>
                        <p>${data.present.description}</p>
                        <img src="${data.present.imageUrl}" alt="${data.present.name}">
                    </div>
                    <div class="card">
                        <h3>未来:${data.future.name}</h3>
                        <p>${data.future.description}</p>
                        <img src="${data.future.imageUrl}" alt="${data.future.name}">
                    </div>
                `;
            } catch (error) {
                console.error('抽牌失败:', error);
                alert('连接后端失败,确保后端运行中!');
            }
        }
    </script>
</body>
</html>

运行指南(2026年环境)

  1. 后端:用Maven构建项目,运行 mvn spring-boot:run。端口8080。
  2. 前端:保存index.html,双击浏览器打开。点击按钮调用API。
  3. 注意:图片URL是模拟的,替换为真实赛博风格塔罗图链接(如Unsplash或自建)。跨域问题:本地测试用Chrome –disable-web-security 或后端加CORS。
  4. 扩展:加更多牌、逆位逻辑、用户输入问题。纯娱乐,勿当真~

如果你运行时有问题,或想加功能,告诉我细节,我帮你调试!😂

文章已创建 3806

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部