secondcatch / index.html
coldandcode's picture
Add 2 files
2c1dc0e verified
Raw
History Blame Contribute Delete
32.9 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>预言契约 | 命运编织者</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&display=swap');
body {
font-family: 'Noto Sans JP', sans-serif;
background-color: #f5f0e6;
color: #3a3226;
background-image: url('https://www.transparenttextures.com/patterns/rice-paper.png');
}
.ghibli-bg {
background: linear-gradient(135deg, #e8d8b8 0%, #d4c4a3 100%);
border: 2px solid #8b7d65;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
}
.ghibli-card {
background: #fff9e6;
border: 3px solid #8b7d65;
border-radius: 12px;
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.15);
transition: all 0.3s ease;
}
.ghibli-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
}
.ghibli-btn {
background: linear-gradient(to bottom, #a38f6a, #8b7d65);
color: white;
border: none;
border-radius: 20px;
padding: 8px 16px;
font-weight: bold;
box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);
transition: all 0.2s;
}
.ghibli-btn:hover {
background: linear-gradient(to bottom, #8b7d65, #6b5e4a);
transform: translateY(-2px);
}
.ghibli-btn:active {
transform: translateY(1px);
}
.hand-card {
transition: all 0.3s ease;
cursor: pointer;
}
.hand-card:hover {
transform: translateY(-15px) scale(1.05);
z-index: 10;
}
.prophecy-glow {
animation: glow 2s infinite alternate;
}
@keyframes glow {
from {
box-shadow: 0 0 5px rgba(255, 215, 0, 0.5);
}
to {
box-shadow: 0 0 20px rgba(255, 215, 0, 0.8);
}
}
.loan-effect {
position: relative;
overflow: hidden;
}
.loan-effect::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(45deg,
transparent 45%,
rgba(255, 255, 255, 0.8) 50%,
transparent 55%);
background-size: 200% 200%;
animation: shine 2s infinite;
}
@keyframes shine {
0% {
background-position: -100% -100%;
}
100% {
background-position: 100% 100%;
}
}
.fate-point {
width: 24px;
height: 24px;
background: radial-gradient(circle, #ffd700 30%, #daa520 100%);
border-radius: 50%;
display: inline-block;
box-shadow: 0 0 8px #ffd700;
margin: 0 2px;
}
</style>
</head>
<body class="min-h-screen">
<div class="container mx-auto px-4 py-8">
<!-- 游戏标题 -->
<div class="text-center mb-8">
<h1 class="text-4xl font-bold mb-2 text-amber-900">预言契约</h1>
<h2 class="text-2xl text-amber-800">命运编织者</h2>
<div class="flex justify-center mt-4">
<div class="fate-point"></div>
<div class="fate-point"></div>
<div class="fate-point"></div>
</div>
</div>
<!-- 游戏区域 -->
<div class="grid grid-cols-1 lg:grid-cols-3 gap-6">
<!-- 左侧 - 玩家区域 -->
<div class="ghibli-bg p-6 rounded-lg">
<h3 class="text-xl font-bold mb-4 text-center border-b-2 border-amber-800 pb-2">玩家</h3>
<div class="mb-4">
<div class="flex justify-between items-center mb-2">
<span class="font-bold">生命值: <span id="player-health" class="text-red-600">50</span>/50</span>
<span class="font-bold">命运点数: <span id="player-fate" class="text-amber-600">3</span></span>
</div>
<div class="h-4 bg-gray-200 rounded-full">
<div id="player-health-bar" class="h-4 bg-red-500 rounded-full" style="width: 100%"></div>
</div>
</div>
<div class="mb-4">
<h4 class="font-bold mb-2">当前预言契约</h4>
<div id="player-prophecies" class="space-y-2">
<div class="ghibli-card p-3 prophecy-glow">
<p class="font-bold text-sm">在3回合内造成50点伤害</p>
<p class="text-xs">奖励: 获得5点命运点数</p>
<div class="text-xs mt-1">剩余回合: <span class="font-bold">2</span></div>
</div>
</div>
</div>
<div class="mb-4">
<h4 class="font-bold mb-2">未来贷款</h4>
<div id="player-loans" class="space-y-2">
<div class="ghibli-card p-3 loan-effect">
<p class="font-bold text-sm">提前获得3点命运点数</p>
<p class="text-xs">需在5回合内偿还5点</p>
<div class="text-xs mt-1">剩余回合: <span class="font-bold">4</span></div>
</div>
</div>
</div>
</div>
<!-- 中间 - 游戏主区域 -->
<div class="ghibli-bg p-6 rounded-lg">
<div class="flex justify-between items-center mb-4">
<div class="text-center">
<div class="text-lg font-bold">回合</div>
<div id="turn-counter" class="text-2xl font-bold">1</div>
</div>
<button id="end-turn-btn" class="ghibli-btn px-6 py-2">
<i class="fas fa-hourglass-end mr-2"></i>结束回合
</button>
</div>
<div class="mb-6">
<h4 class="font-bold mb-2 text-center">战斗区域</h4>
<div class="flex justify-center items-center space-x-8">
<div class="text-center">
<div class="ghibli-card w-24 h-36 flex items-center justify-center mx-auto mb-2">
<i class="fas fa-sword text-3xl text-gray-700"></i>
</div>
<div class="text-sm">攻击力: 10</div>
</div>
<div class="text-4xl font-bold text-red-600">VS</div>
<div class="text-center">
<div class="ghibli-card w-24 h-36 flex items-center justify-center mx-auto mb-2">
<i class="fas fa-shield-alt text-3xl text-gray-700"></i>
</div>
<div class="text-sm">防御力: 5</div>
</div>
</div>
</div>
<div class="mb-4">
<h4 class="font-bold mb-2 text-center">战斗日志</h4>
<div id="battle-log" class="ghibli-card p-3 h-32 overflow-y-auto text-sm">
<div class="text-amber-800">游戏开始!</div>
<div class="text-blue-600">你获得了初始预言契约</div>
</div>
</div>
</div>
<!-- 右侧 - 敌人区域 -->
<div class="ghibli-bg p-6 rounded-lg">
<h3 class="text-xl font-bold mb-4 text-center border-b-2 border-amber-800 pb-2">敌人</h3>
<div class="mb-4">
<div class="flex justify-between items-center mb-2">
<span class="font-bold">生命值: <span id="enemy-health" class="text-red-600">80</span>/80</span>
<span class="font-bold">命运点数: <span id="enemy-fate" class="text-amber-600">2</span></span>
</div>
<div class="h-4 bg-gray-200 rounded-full">
<div id="enemy-health-bar" class="h-4 bg-red-500 rounded-full" style="width: 100%"></div>
</div>
</div>
<div class="mb-4">
<h4 class="font-bold mb-2">敌人预言契约</h4>
<div id="enemy-prophecies" class="space-y-2">
<div class="ghibli-card p-3">
<p class="font-bold text-sm">在2回合内不使用防御卡牌</p>
<p class="text-xs">奖励: 获得3点命运点数</p>
<div class="text-xs mt-1">剩余回合: <span class="font-bold">1</span></div>
</div>
</div>
</div>
<div class="mb-4">
<h4 class="font-bold mb-2">敌人意图</h4>
<div class="ghibli-card p-3">
<p class="text-sm">下回合将使用: <span class="font-bold">强力攻击</span></p>
<p class="text-xs">预计伤害: 15</p>
</div>
</div>
</div>
</div>
<!-- 玩家手牌区域 -->
<div class="mt-8 ghibli-bg p-6 rounded-lg">
<h3 class="text-xl font-bold mb-4 text-center border-b-2 border-amber-800 pb-2">你的手牌</h3>
<div class="flex flex-wrap justify-center gap-4" id="player-hand">
<!-- 攻击卡 -->
<div class="ghibli-card w-32 h-48 hand-card relative" onclick="playCard(this)">
<div class="absolute top-2 left-2 w-6 h-6 bg-red-500 rounded-full flex items-center justify-center text-white text-xs font-bold">攻</div>
<div class="p-3 h-full flex flex-col">
<h4 class="font-bold text-center mb-2">火焰斩击</h4>
<p class="text-xs flex-grow">造成10点伤害,有30%几率额外造成5点伤害</p>
<div class="text-xs text-right">消耗: <span class="font-bold">1</span>命运点</div>
</div>
</div>
<!-- 防御卡 -->
<div class="ghibli-card w-32 h-48 hand-card relative" onclick="playCard(this)">
<div class="absolute top-2 left-2 w-6 h-6 bg-blue-500 rounded-full flex items-center justify-center text-white text-xs font-bold">防</div>
<div class="p-3 h-full flex flex-col">
<h4 class="font-bold text-center mb-2">魔法护盾</h4>
<p class="text-xs flex-grow">获得8点护盾,下回合开始时保留50%</p>
<div class="text-xs text-right">消耗: <span class="font-bold">1</span>命运点</div>
</div>
</div>
<!-- 预言卡 -->
<div class="ghibli-card w-32 h-48 hand-card relative" onclick="playCard(this)">
<div class="absolute top-2 left-2 w-6 h-6 bg-purple-500 rounded-full flex items-center justify-center text-white text-xs font-bold">预</div>
<div class="p-3 h-full flex flex-col">
<h4 class="font-bold text-center mb-2">命运预言</h4>
<p class="text-xs flex-grow">创建一个新的预言契约</p>
<div class="text-xs text-right">消耗: <span class="font-bold">2</span>命运点</div>
</div>
</div>
<!-- 贷款卡 -->
<div class="ghibli-card w-32 h-48 hand-card relative" onclick="playCard(this)">
<div class="absolute top-2 left-2 w-6 h-6 bg-green-500 rounded-full flex items-center justify-center text-white text-xs font-bold">贷</div>
<div class="p-3 h-full flex flex-col">
<h4 class="font-bold text-center mb-2">命运贷款</h4>
<p class="text-xs flex-grow">立即获得3命运点,5回合后偿还5点</p>
<div class="text-xs text-right">消耗: <span class="font-bold">0</span>命运点</div>
</div>
</div>
<!-- 篡改卡 -->
<div class="ghibli-card w-32 h-48 hand-card relative" onclick="playCard(this)">
<div class="absolute top-2 left-2 w-6 h-6 bg-yellow-500 rounded-full flex items-center justify-center text-white text-xs font-bold">改</div>
<div class="p-3 h-full flex flex-col">
<h4 class="font-bold text-center mb-2">篡改预言</h4>
<p class="text-xs flex-grow">修改一个预言的条件或奖励</p>
<div class="text-xs text-right">消耗: <span class="font-bold">1</span>命运点</div>
</div>
</div>
</div>
</div>
<!-- 预言创建模态框 -->
<div id="prophecy-modal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center hidden">
<div class="ghibli-bg p-6 rounded-lg w-full max-w-md">
<h3 class="text-xl font-bold mb-4 text-center">创建预言契约</h3>
<div class="mb-4">
<label class="block font-bold mb-2">预言条件</label>
<select id="prophecy-condition" class="w-full p-2 border border-amber-800 rounded">
<option value="damage">在X回合内造成Y点伤害</option>
<option value="no-potion">在X回合内不使用药水</option>
<option value="no-defense">在X回合内不使用防御卡</option>
<option value="specific-card">在X回合内使用特定卡牌Y次</option>
</select>
</div>
<div class="grid grid-cols-2 gap-4 mb-4">
<div>
<label class="block font-bold mb-2">回合数(X)</label>
<input type="number" id="prophecy-turns" class="w-full p-2 border border-amber-800 rounded" min="1" max="5" value="2">
</div>
<div>
<label class="block font-bold mb-2">数值(Y)</label>
<input type="number" id="prophecy-value" class="w-full p-2 border border-amber-800 rounded" min="1" max="50" value="10">
</div>
</div>
<div class="mb-4">
<label class="block font-bold mb-2">预言奖励</label>
<select id="prophecy-reward" class="w-full p-2 border border-amber-800 rounded">
<option value="fate-points">获得X命运点数</option>
<option value="health">恢复X生命值</option>
<option value="draw-cards">抽X张卡</option>
<option value="copy-card">复制对手最后使用的卡牌</option>
</select>
<input type="number" id="prophecy-reward-value" class="w-full p-2 border border-amber-800 rounded mt-2" min="1" max="10" value="2">
</div>
<div class="flex justify-end space-x-2">
<button onclick="document.getElementById('prophecy-modal').classList.add('hidden')" class="ghibli-btn bg-gray-500">
取消
</button>
<button onclick="createProphecy()" class="ghibli-btn">
创建契约
</button>
</div>
</div>
</div>
<!-- 篡改预言模态框 -->
<div id="modify-modal" class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center hidden">
<div class="ghibli-bg p-6 rounded-lg w-full max-w-md">
<h3 class="text-xl font-bold mb-4 text-center">篡改预言</h3>
<div class="mb-4">
<label class="block font-bold mb-2">选择要修改的预言</label>
<select id="prophecy-select" class="w-full p-2 border border-amber-800 rounded">
<option value="0">在3回合内造成50点伤害</option>
</select>
</div>
<div class="mb-4">
<label class="block font-bold mb-2">修改类型</label>
<select id="modify-type" class="w-full p-2 border border-amber-800 rounded">
<option value="condition">修改条件</option>
<option value="reward">修改奖励</option>
<option value="both">同时修改条件和奖励</option>
</select>
</div>
<div id="modify-condition-section" class="mb-4">
<label class="block font-bold mb-2">新条件</label>
<input type="text" id="new-condition" class="w-full p-2 border border-amber-800 rounded" value="在3回合内造成50点伤害">
</div>
<div id="modify-reward-section" class="mb-4">
<label class="block font-bold mb-2">新奖励</label>
<input type="text" id="new-reward" class="w-full p-2 border border-amber-800 rounded" value="获得5点命运点数">
</div>
<div class="flex justify-end space-x-2">
<button onclick="document.getElementById('modify-modal').classList.add('hidden')" class="ghibli-btn bg-gray-500">
取消
</button>
<button onclick="modifyProphecy()" class="ghibli-btn">
篡改预言
</button>
</div>
</div>
</div>
</div>
<script>
// 游戏状态
const gameState = {
turn: 1,
player: {
health: 50,
maxHealth: 50,
fatePoints: 3,
prophecies: [
{
condition: "在3回合内造成50点伤害",
reward: "获得5点命运点数",
turnsLeft: 2,
progress: 0
}
],
loans: [
{
amount: 3,
repayment: 5,
turnsLeft: 4
}
]
},
enemy: {
health: 80,
maxHealth: 80,
fatePoints: 2,
prophecies: [
{
condition: "在2回合内不使用防御卡牌",
reward: "获得3点命运点数",
turnsLeft: 1
}
],
nextAction: "强力攻击",
nextDamage: 15
},
battleLog: [
"游戏开始!",
"你获得了初始预言契约"
]
};
// 更新UI
function updateUI() {
// 更新玩家状态
document.getElementById('player-health').textContent = gameState.player.health;
document.getElementById('player-fate').textContent = gameState.player.fatePoints;
document.getElementById('player-health-bar').style.width = `${(gameState.player.health / gameState.player.maxHealth) * 100}%`;
// 更新敌人状态
document.getElementById('enemy-health').textContent = gameState.enemy.health;
document.getElementById('enemy-fate').textContent = gameState.enemy.fatePoints;
document.getElementById('enemy-health-bar').style.width = `${(gameState.enemy.health / gameState.enemy.maxHealth) * 100}%`;
// 更新回合计数器
document.getElementById('turn-counter').textContent = gameState.turn;
// 更新战斗日志
const battleLogElement = document.getElementById('battle-log');
battleLogElement.innerHTML = gameState.battleLog.map(log => `<div class="text-amber-800">${log}</div>`).join('');
battleLogElement.scrollTop = battleLogElement.scrollHeight;
}
// 播放卡牌
function playCard(cardElement) {
const cardType = cardElement.querySelector('div').textContent;
let message = "";
switch(cardType) {
case "攻":
// 攻击逻辑
const damage = 10 + Math.floor(Math.random() * 6); // 10-15伤害
gameState.enemy.health -= damage;
gameState.player.fatePoints -= 1;
// 更新预言进度
gameState.player.prophecies.forEach(prophecy => {
if (prophecy.condition.includes("造成")) {
prophecy.progress += damage;
}
});
message = `你使用攻击卡牌,造成${damage}点伤害!`;
break;
case "防":
// 防御逻辑
gameState.player.fatePoints -= 1;
message = "你使用防御卡牌,获得了护盾!";
break;
case "预":
// 预言逻辑
if (gameState.player.fatePoints >= 2) {
gameState.player.fatePoints -= 2;
document.getElementById('prophecy-modal').classList.remove('hidden');
message = "你开始编织新的命运预言...";
} else {
message = "命运点数不足,无法创建预言!";
}
break;
case "贷":
// 贷款逻辑
gameState.player.fatePoints += 3;
gameState.player.loans.push({
amount: 3,
repayment: 5,
turnsLeft: 5
});
message = "你向未来借贷了3点命运点数!";
break;
case "改":
// 篡改预言逻辑
if (gameState.player.fatePoints >= 1) {
gameState.player.fatePoints -= 1;
document.getElementById('modify-modal').classList.remove('hidden');
message = "你开始篡改现有的预言...";
} else {
message = "命运点数不足,无法篡改预言!";
}
break;
}
gameState.battleLog.push(message);
updateUI();
}
// 创建预言
function createProphecy() {
const conditionType = document.getElementById('prophecy-condition').value;
const turns = document.getElementById('prophecy-turns').value;
const value = document.getElementById('prophecy-value').value;
const rewardType = document.getElementById('prophecy-reward').value;
const rewardValue = document.getElementById('prophecy-reward-value').value;
let condition = "";
let reward = "";
// 构建条件
switch(conditionType) {
case "damage":
condition = `在${turns}回合内造成${value}点伤害`;
break;
case "no-potion":
condition = `在${turns}回合内不使用药水`;
break;
case "no-defense":
condition = `在${turns}回合内不使用防御卡`;
break;
case "specific-card":
condition = `在${turns}回合内使用特定卡牌${value}次`;
break;
}
// 构建奖励
switch(rewardType) {
case "fate-points":
reward = `获得${rewardValue}点命运点数`;
break;
case "health":
reward = `恢复${rewardValue}生命值`;
break;
case "draw-cards":
reward = `抽${rewardValue}张卡`;
break;
case "copy-card":
reward = `复制对手最后使用的卡牌`;
break;
}
// 添加到玩家预言
gameState.player.prophecies.push({
condition,
reward,
turnsLeft: turns,
progress: 0
});
gameState.battleLog.push(`你创建了新的预言契约: ${condition} → ${reward}`);
document.getElementById('prophecy-modal').classList.add('hidden');
updateUI();
}
// 篡改预言
function modifyProphecy() {
const prophecyIndex = document.getElementById('prophecy-select').selectedIndex;
const modifyType = document.getElementById('modify-type').value;
const newCondition = document.getElementById('new-condition').value;
const newReward = document.getElementById('new-reward').value;
if (prophecyIndex >= 0 && prophecyIndex < gameState.player.prophecies.length) {
const prophecy = gameState.player.prophecies[prophecyIndex];
const oldCondition = prophecy.condition;
const oldReward = prophecy.reward;
if (modifyType === "condition" || modifyType === "both") {
prophecy.condition = newCondition;
}
if (modifyType === "reward" || modifyType === "both") {
prophecy.reward = newReward;
}
gameState.battleLog.push(`你篡改了预言契约:
"${oldCondition} → ${oldReward}"
变为
"${prophecy.condition} → ${prophecy.reward}"`);
}
document.getElementById('modify-modal').classList.add('hidden');
updateUI();
}
// 结束回合
document.getElementById('end-turn-btn').addEventListener('click', function() {
// 敌人行动
const enemyDamage = gameState.enemy.nextDamage;
gameState.player.health -= enemyDamage;
gameState.battleLog.push(`敌人使用${gameState.enemy.nextAction},对你造成${enemyDamage}点伤害!`);
// 更新预言回合数
gameState.player.prophecies.forEach(prophecy => {
prophecy.turnsLeft -= 1;
// 检查预言是否完成
if (prophecy.condition.includes("造成") && prophecy.progress >= parseInt(prophecy.condition.match(/\d+/)[0])) {
gameState.battleLog.push(`你完成了预言"${prophecy.condition}",获得奖励: ${prophecy.reward}`);
// 处理奖励
if (prophecy.reward.includes("命运点数")) {
const points = parseInt(prophecy.reward.match(/\d+/)[0]);
gameState.player.fatePoints += points;
}
// 移除完成的预言
gameState.player.prophecies = gameState.player.prophecies.filter(p => p !== prophecy);
} else if (prophecy.turnsLeft <= 0) {
gameState.battleLog.push(`预言"${prophecy.condition}"未能实现`);
gameState.player.prophecies = gameState.player.prophecies.filter(p => p !== prophecy);
}
});
// 更新贷款回合数
gameState.player.loans.forEach(loan => {
loan.turnsLeft -= 1;
if (loan.turnsLeft <= 0) {
gameState.player.fatePoints -= loan.repayment;
gameState.battleLog.push(`你偿还了命运贷款,支付了${loan.repayment}点命运点数`);
gameState.player.loans = gameState.player.loans.filter(l => l !== loan);
}
});
// 更新敌人预言
gameState.enemy.prophecies.forEach(prophecy => {
prophecy.turnsLeft -= 1;
if (prophecy.turnsLeft <= 0) {
if (prophecy.condition.includes("不使用防御卡牌")) {
gameState.enemy.fatePoints += 3;
gameState.battleLog.push(`敌人完成了预言"${prophecy.condition}",获得了3点命运点数`);
}
gameState.enemy.prophecies = gameState.enemy.prophecies.filter(p => p !== prophecy);
}
});
// 生成敌人下回合行动
const actions = ["强力攻击", "快速攻击", "防御姿态", "命运汲取"];
const damages = [15, 10, 0, 5];
const randomIndex = Math.floor(Math.random() * actions.length);
gameState.enemy.nextAction = actions[randomIndex];
gameState.enemy.nextDamage = damages[randomIndex];
// 增加回合数
gameState.turn += 1;
// 抽卡逻辑
gameState.battleLog.push("你抽了一张新卡牌");
updateUI();
// 检查游戏结束
if (gameState.player.health <= 0) {
gameState.battleLog.push("你被击败了!游戏结束");
updateUI();
setTimeout(() => alert("游戏结束!你被击败了"), 500);
} else if (gameState.enemy.health <= 0) {
gameState.battleLog.push("你击败了敌人!胜利!");
updateUI();
setTimeout(() => alert("恭喜!你击败了敌人!"), 500);
}
});
// 初始化UI
updateUI();
</script>
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - <a href="https://enzostvs-deepsite.hf.space?remix=coldandcode/secondcatch" style="color: #fff;text-decoration: underline;" target="_blank" >🧬 Remix</a></p></body>
</html>