HUST Online Judge WebBoard
Problem 114514 >> deebseek的顶级out 1
qianzixuan @ 2025-09-21 19:11:41
[ Quote ] [ Edit ] [ Delete ] 1#
wait........................
qianzixuan @ 2025-09-30 17:32:03
[ Quote ] [ Edit ] [ Delete ] 2#
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>古代战争模拟器 - 帝国崛起</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Microsoft YaHei', sans-serif;
}

body {
background: linear-gradient(to bottom, #1a2a6c, #b21f1f, #fdbb2d);
color: #fff;
min-height: 100vh;
padding: 20px;
background-attachment: fixed;
}

.container {
max-width: 1200px;
margin: 0 auto;
background: rgba(0, 0, 0, 0.7);
border-radius: 15px;
padding: 20px;
box-shadow: 0 0 25px rgba(0, 0, 0, 0.8);
}

header {
text-align: center;
padding: 20px 0;
border-bottom: 2px solid #d4af37;
margin-bottom: 30px;
}
qianzixuan @ 2025-09-30 17:32:16
[ Quote ] [ Edit ] [ Delete ] 3#
h1 {
font-size: 3rem;
color: #d4af37;
text-shadow: 3px 3px 5px rgba(0, 0, 0, 0.8);
margin-bottom: 10px;
}

.subtitle {
font-size: 1.2rem;
color: #f8f9fa;
margin-bottom: 20px;
}

.game-container {
display: grid;
grid-template-columns: 3fr 1fr;
gap: 20px;
}

.main-content {
display: grid;
grid-template-rows: auto 1fr;
gap: 20px;
}

.player-info {
background: rgba(139, 0, 0, 0.6);
padding: 15px;
border-radius: 10px;
display: flex;
justify-content: space-between;
align-items: center;
}

.player-stats {
display: flex;
gap: 20px;
}

.stat {
text-align: center;
}

.stat-value {
font-size: 1.5rem;
font-weight: bold;
color: #ffd700;
}

.stat-label {
font-size: 0.9rem;
color: #f8f9fa;
}
qianzixuan @ 2025-09-30 17:32:46
[ Quote ] [ Edit ] [ Delete ] 4#
.game-tabs {
display: flex;
gap: 10px;
margin-bottom: 15px;
}

.tab {
padding: 10px 20px;
background: rgba(139, 0, 0, 0.7);
border-radius: 5px;
cursor: pointer;
transition: background 0.3s;
}

.tab.active {
background: rgba(184, 134, 11, 0.9);
}

.tab-content {
background: rgba(0, 0, 0, 0.6);
padding: 20px;
border-radius: 10px;
min-height: 400px;
}

.tab-pane {
display: none;
}

.tab-pane.active {
display: block;
}

.army-management {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
qianzixuan @ 2025-09-30 17:32:59
[ Quote ] [ Edit ] [ Delete ] 5#
.unit-card {
background: rgba(139, 0, 0, 0.5);
padding: 15px;
border-radius: 8px;
margin-bottom: 15px;
}

.unit-header {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
}

.unit-name {
font-weight: bold;
color: #ffd700;
}

.unit-count {
font-weight: bold;
}

.unit-controls {
display: flex;
gap: 10px;
margin-top: 10px;
}

.btn {
padding: 8px 15px;
background: linear-gradient(to bottom, #8b0000, #660000);
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
transition: all 0.3s;
}

.btn:hover {
background: linear-gradient(to bottom, #a52a2a, #8b0000);
transform: translateY(-2px);
}
qianzixuan @ 2025-09-30 17:33:10
[ Quote ] [ Edit ] [ Delete ] 6#
.btn-small {
padding: 5px 10px;
font-size: 0.9rem;
}

.battle-interface {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
text-align: center;
}

.army-display {
background: rgba(139, 0, 0, 0.5);
padding: 15px;
border-radius: 8px;
}

.battle-log {
background: rgba(0, 0, 0, 0.7);
padding: 15px;
border-radius: 8px;
height: 200px;
overflow-y: auto;
margin-top: 20px;
text-align: left;
font-family: 'Courier New', monospace;
}

.log-entry {
margin-bottom: 5px;
padding-bottom: 5px;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
white-space: nowrap;
overflow: hidden;
}
qianzixuan @ 2025-09-30 17:33:24
[ Quote ] [ Edit ] [ Delete ] 7#
.typing-cursor {
display: inline-block;
background-color: #ffd700;
width: 8px;
height: 1em;
margin-left: 2px;
animation: blink 1s infinite;
}

@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0; }
}

.victory {
color: #90ee90;
}

.defeat {
color: #ff6b6b;
}

.event {
color: #ffd700;
}

.sidebar {
display: flex;
flex-direction: column;
gap: 20px;
}

.card {
background: rgba(139, 0, 0, 0.6);
padding: 15px;
border-radius: 10px;
}

.card-title {
font-size: 1.2rem;
color: #ffd700;
margin-bottom: 15px;
text-align: center;
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
padding-bottom: 8px;
}
qianzixuan @ 2025-09-30 17:33:36
[ Quote ] [ Edit ] [ Delete ] 8#
.event-log {
height: 200px;
overflow-y: auto;
font-family: 'Courier New', monospace;
}

.tech-tree {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
}

.tech {
background: rgba(0, 0, 0, 0.4);
padding: 10px;
border-radius: 5px;
text-align: center;
cursor: pointer;
transition: all 0.3s;
}

.tech:hover {
background: rgba(184, 134, 11, 0.4);
}

.tech.unlocked {
background: rgba(0, 100, 0, 0.4);
}

.progress-bar {
height: 20px;
background: rgba(0, 0, 0, 0.5);
border-radius: 10px;
margin: 10px 0;
overflow: hidden;
}

.progress {
height: 100%;
background: linear-gradient(to right, #8b0000, #d4af37);
border-radius: 10px;
transition: width 0.5s;
}

.modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.8);
z-index: 1000;
justify-content: center;
align-items: center;
}
qianzixuan @ 2025-09-30 17:34:44
[ Quote ] [ Edit ] [ Delete ] 9#
.modal-content {
background: linear-gradient(to bottom, #2c3e50, #4a235a);
padding: 30px;
border-radius: 15px;
width: 500px;
max-width: 90%;
text-align: center;
font-family: 'Courier New', monospace;
}

.modal-title {
font-size: 2rem;
color: #d4af37;
margin-bottom: 20px;
}

.modal-btn {
padding: 12px 25px;
background: linear-gradient(to bottom, #8b0000, #660000);
color: white;
border: none;
border-radius: 5px;
font-size: 1.1rem;
cursor: pointer;
margin-top: 20px;
transition: all 0.3s;
}

.modal-btn:hover {
background: linear-gradient(to bottom, #a52a2a, #8b0000);
transform: scale(1.05);
}

.typewriter-text {
white-space: nowrap;
overflow: hidden;
}
qianzixuan @ 2025-09-30 17:34:59
[ Quote ] [ Edit ] [ Delete ] 10#
.narrator {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
width: 80%;
max-width: 800px;
background: rgba(0, 0, 0, 0.8);
padding: 15px;
border-radius: 10px;
border-left: 4px solid #d4af37;
font-family: 'Courier New', monospace;
display: none;
z-index: 100;
}

.narrator-text {
min-height: 1.5em;
}

@media (max-width: 900px) {
.game-container {
grid-template-columns: 1fr;
}

.army-management, .battle-interface {
grid-template-columns: 1fr;
}

.narrator {
width: 90%;
font-size: 0.9rem;
}
}

qianzixuan @ 2025-09-30 17:35:19
[ Quote ] [ Edit ] [ Delete ] 11#
.controls {
display: flex;
justify-content: center;
gap: 10px;
margin-top: 10px;
}

.control-btn {
padding: 5px 10px;
background: rgba(139, 0, 0, 0.7);
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}

.sound-control {
position: absolute;
top: 20px;
right: 20px;
background: rgba(0, 0, 0, 0.5);
padding: 8px;
border-radius: 50%;
cursor: pointer;
z-index: 10;
}
</style>
</head>
<body>
qianzixuan @ 2025-09-30 17:35:49
[ Quote ] [ Edit ] [ Delete ] 12#
<div class="sound-control" onclick="toggleSound()">??</div>

<div class="container">
<header>
<h1>古代战争模拟器</h1>
<div class="subtitle">建立你的帝国,征服已知世界!</div>
</header>

<div class="player-info">
<div class="player-identity">
<h2>指挥官: <span id="commander-name">亚历山大大帝</span></h2>
<p>文明: <span id="civilization">马其顿帝国</span></p>
</div>
<div class="player-stats">
<div class="stat">
<div class="stat-value" id="gold-value">1000</div>
<div class="stat-label">黄金</div>
</div>
<div class="stat">
<div class="stat-value" id="food-value">500</div>
<div class="stat-label">食物</div>
</div>
<div class="stat">
<div class="stat-value" id="renown-value">50</div>
<div class="stat-label">声望</div>
</div>
<div class="stat">
<div class="stat-value" id="turn-value">1</div>
<div class="stat-label">回合</div>
</div>
</div>
</div>

<div class="game-container">
<div class="main-content">
<div class="game-tabs">
<div class="tab active" data-tab="army">军队管理</div>
<div class="tab" data-tab="battle">军事行动</div>
<div class="tab" data-tab="kingdom">王国发展</div>
<div class="tab" data-tab="diplomacy">外交关系</div>
</div>

<div class="tab-content">
<div class="tab-pane active" id="army-tab">
<h3>你的军队</h3>
<p>招募和训练军队,为征服做准备</p>

<div class="army-management">
<div class="unit-list">
<div class="unit-card">
<div class="unit-header">
<span class="unit-name">步兵军团</span>
<span class="unit-count">数量: <span id="infantry-count">100</span></span>
</div>
<div class="progress-bar">
<div class="progress" style="width: 60%"></div>
</div>
<p>训练水平: 经验丰富</p>
<div class="unit-controls">
<button class="btn btn-small" onclick="recruitUnit('infantry')">招募 (+10)</button>
<button class="btn btn-small" onclick="trainUnit('infantry')">训练</button>
</div>
</div>

<div class="unit-card">
<div class="unit-header">
<span class="unit-name">骑兵部队</span>
<span class="unit-count">数量: <span id="cavalry-count">50</span></span>
</div>
<div class="progress-bar">
<div class="progress" style="width: 40%"></div>
</div>
<p>训练水平: 受过训练</p>
<div class="unit-controls">
<button class="btn btn-small" onclick="recruitUnit('cavalry')">招募 (+5)</button>
<button class="btn btn-small" onclick="trainUnit('cavalry')">训练</button>
</div>
</div>
</div>

<div class="unit-list">
<div class="unit-card">
<div class="unit-header">
<span class="unit-name">弓箭手</span>
<span class="unit-count">数量: <span id="archers-count">75</span></span>
qianzixuan @ 2025-09-30 17:35:58
[ Quote ] [ Edit ] [ Delete ] 13#
</div>
<div class="progress-bar">
<div class="progress" style="width: 50%"></div>
</div>
<p>训练水平: 受过训练</p>
<div class="unit-controls">
<button class="btn btn-small" onclick="recruitUnit('archers')">招募 (+8)</button>
<button class="btn btn-small" onclick="trainUnit('archers')">训练</button>
</div>
</div>

<div class="unit-card">
<div class="unit-header">
<span class="unit-name">攻城武器</span>
<span class="unit-count">数量: <span id="siege-count">5</span></span>
qianzixuan @ 2025-09-30 17:36:13
[ Quote ] [ Edit ] [ Delete ] 14#
</div>
<div class="progress-bar">
<div class="progress" style="width: 20%"></div>
</div>
<p>训练水平: 新手</p>
<div class="unit-controls">
<button class="btn btn-small" onclick="recruitUnit('siege')">建造 (+1)</button>
<button class="btn btn-small" onclick="trainUnit('siege')">训练</button>
</div>
</div>
</div>
</div>
</div>

<div class="tab-pane" id="battle-tab">
<h3>军事行动</h3>
<p>选择你的作战目标</p>

<div class="battle-interface">
<div class="army-display">
<h4>你的军队</h4>
<div class="unit-stats">
<p>总兵力: <span id="total-troops">230</span></p>
<p>军队士气: <span id="army-morale">75</span>/100</p>
<p>攻击力: <span id="army-attack">145</span></p>
<p>防御力: <span id="army-defense">120</span></p>
</div>
<button class="btn" onclick="startBattle()">发动攻击</button>
</div>

<div class="army-display">
<h4>敌方情报</h4>
<div class="unit-stats">
<p>波斯守军</p>
<p>兵力: 约 180-220 人</p>
<p>防御工事: 中等</p>
<p>资源: 丰富</p>
</div>
<button class="btn" onclick="scoutEnemy()">侦察敌军</button>
</div>
</div>

<div class="battle-log" id="battle-log">
<div class="log-entry">军事顾问: 陛下,我们的军队已准备就绪,请选择攻击目标。</div>
</div>
</div>

<div class="tab-pane" id="kingdom-tab">
<h3>王国发展</h3>
<p>建设你的帝国,提升国力</p>

<div class="tech-tree">
<div class="tech unlocked">
<h4>农业改良</h4>
<p>+10% 食物生产</p>
<p>已研发</p>
</div>
<div class="tech">
<h4>军事训练</h4>
<p>+15% 军队经验</p>
<p>需要: 200黄金</p>
qianzixuan @ 2025-09-30 17:36:28
[ Quote ] [ Edit ] [ Delete ] 15#
</div>
<div class="tech">
<h4>冶金术</h4>
<p>+20% 武器强度</p>
<p>需要: 300黄金</p>
</div>
<div class="tech">
<h4>防御工事</h4>
<p>+25% 城市防御</p>
<p>需要: 400黄金</p>
</div>
</div>
</div>

<div class="tab-pane" id="diplomacy-tab">
<h3>外交关系</h3>
<p>与其他势力互动,建立联盟或宣战</p>

<div class="diplomacy-options">
<div class="nation-card">
<h4>罗马共和国</h4>
<p>关系: 中立</p>
<p>态度: 谨慎</p>
<button class="btn btn-small">派遣使者</button>
<button class="btn btn-small">提出贸易</button>
</div>

<div class="nation-card">
<h4>波斯帝国</h4>
<p>关系: 敌对</p>
<p>态度: 侵略性</p>
<button class="btn btn-small">提出停战</button>
<button class="btn btn-small">最后通牒</button>
</div>
</div>
</div>
</div>
</div>

<div class="sidebar">
<div class="card">
<div class="card-title">事件日志</div>
<div class="event-log" id="event-log">
<div class="log-entry">纪元开始: 你继承了马其顿的王位</div>
<div class="log-entry">农业丰收: 食物产量增加</div>
<div class="log-entry event">边境冲突: 波斯军队袭击了北部村庄</div>
<div class="log-entry">贸易协议: 与雅典建立了贸易路线</div>
<div class="log-entry">招募完成: 新增50名步兵</div>
</div>
</div>

<div class="card">
qianzixuan @ 2025-09-30 17:36:41
[ Quote ] [ Edit ] [ Delete ] 16#
<div class="card-title">任务目标</div>
<ul>
<li>征服波斯省份 (0/5)</li>
<li>建立3座城市 (1/3)</li>
<li>发展5项科技 (1/5)</li>
<li>积累1000声望 (50/1000)</li>
</ul>
</div>

<div class="card">
<div class="card-title">世界地图</div>
<div class="mini-map">
<p>已知世界:</p>
<p>马其顿 - 你的领土</p>
<p>希腊 - 盟友</p>
<p>波斯 - 敌对</p>
<p>埃及 - 未探索</p>
</div>
</div>
</div>
</div>
</div>

<div class="modal" id="battle-modal">
<div class="modal-content">
<div class="modal-title">战斗结果</div>
<div id="battle-result">
<p>你的军队与波斯守军激烈交战!</p>
<p>马其顿方损失: 45 士兵</p>
<p>波斯方损失: 78 士兵</p>
<p class="victory">胜利!你成功占领了波斯要塞</p>
<p>获得战利品: 黄金 +200, 食物 +150</p>
</div>
<button class="modal-btn" onclick="closeModal()">继续</button>
</div>
</div>

<div class="narrator" id="narrator">
<div class="narrator-text" id="narrator-text"></div>
<div class="controls">
<button class="control-btn" onclick="typewriterSpeed('faster')">加速</button>
<button class="control-btn" onclick="typewriterSpeed('slower')">减速</button>
<button class="control-btn" onclick="skipTypewriter()">跳过</button>
</div>
</div>
qianzixuan @ 2025-09-30 17:36:51
[ Quote ] [ Edit ] [ Delete ] 17#
<script>
// 游戏数据
const gameState = {
gold: 1000,
food: 500,
renown: 50,
turn: 1,
army: {
infantry: 100,
cavalry: 50,
archers: 75,
siege: 5
},
technologies: ['agriculture'],
relations: {
rome: 'neutral',
persia: 'hostile',
egypt: 'unknown'
}
};

// 打字机效果设置
const typewriterSettings = {
speed: 30, // 字符之间的延迟(毫秒)
enabled: true,
currentText: '',
currentIndex: 0,
timer: null,
targetElement: null,
callback: null,
soundEnabled: true
};

// 初始化游戏
function initializeGame() {
updateResourcesDisplay();
updateArmyDisplay();

// 设置标签页切换
document.querySelectorAll('.tab').forEach(tab => {
tab.addEventListener('click', () => {
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.tab-pane').forEach(p => p.classList.remove('active'));

tab.classList.add('active');
document.getElementById(`${tab.dataset.tab}-tab`).classList.add('active');
});
});
qianzixuan @ 2025-09-30 17:37:05
[ Quote ] [ Edit ] [ Delete ] 18#
// 初始旁白
setTimeout(() => {
showNarrator("公元前356年,你作为马其顿的新王,肩负着征服已知世界的使命。你的军队已准备就绪,陛下,请下达命令。");
}, 1000);
}

// 打字机效果函数
function typeText(element, text, callback = null) {
if (!typewriterSettings.enabled) {
element.innerHTML = text;
if (callback) callback();
return;
}

// 清除现有打字效果
if (typewriterSettings.timer) {
clearTimeout(typewriterSettings.timer);
}

typewriterSettings.currentText = text;
typewriterSettings.currentIndex = 0;
typewriterSettings.targetElement = element;
typewriterSettings.callback = callback;

element.innerHTML = '';

// 开始打字效果
typeNextCharacter();
}

function typeNextCharacter() {
if (typewriterSettings.currentIndex < typewriterSettings.currentText.length) {
// 添加下一个字符
const char = typewriterSettings.currentText.charAt(typewriterSettings.currentIndex);
typewriterSettings.targetElement.innerHTML += char;
typewriterSettings.currentIndex++;

// 播放打字音效
if (typewriterSettings.soundEnabled) {
playTypewriterSound();
}

// 设置下一个字符的延迟
typewriterSettings.timer = setTimeout(typeNextCharacter, typewriterSettings.speed);
} else {
// 打字完成,添加光标
typewriterSettings.targetElement.innerHTML += '<span class="typing-cursor"></span>';
if (typewriterSettings.callback) {
typewriterSettings.callback();
}
}
}

function playTypewriterSound() {
// 简单模拟打字机声音
const context = new (window.AudioContext || window.webkitAudioContext)();
const oscillator = context.createOscillator();
const gainNode = context.createGain();

oscillator.type = 'square';
oscillator.frequency.setValueAtTime(100 + Math.random() * 300, context.currentTime);
gainNode.gain.setValueAtTime(0.1, context.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.001, context.currentTime + 0.05);

oscillator.connect(gainNode);
gainNode.connect(context.destination);
qianzixuan @ 2025-09-30 17:37:26
[ Quote ] [ Edit ] [ Delete ] 19#
oscillator.start();
oscillator.stop(context.currentTime + 0.05);
}

function typewriterSpeed(direction) {
if (direction === 'faster') {
typewriterSettings.speed = Math.max(10, typewriterSettings.speed - 10);
} else {
typewriterSettings.speed = Math.min(100, typewriterSettings.speed + 10);
}
}

function skipTypewriter() {
if (typewriterSettings.timer) {
clearTimeout(typewriterSettings.timer);
}

if (typewriterSettings.targetElement) {
typewriterSettings.targetElement.innerHTML = typewriterSettings.currentText;
typewriterSettings.targetElement.innerHTML += '<span class="typing-cursor"></span>';

if (typewriterSettings.callback) {
typewriterSettings.callback();
}
}
}

function toggleSound() {
typewriterSettings.soundEnabled = !typewriterSettings.soundEnabled;
document.querySelector('.sound-control').textContent = typewriterSettings.soundEnabled ? '??' : '??';
}

function showNarrator(text) {
const narrator = document.getElementById('narrator');
const narratorText = document.getElementById('narrator-text');

narrator.style.display = 'block';
typeText(narratorText, text, () => {
// 打字完成后显示控制按钮
document.querySelector('.controls').style.display = 'flex';
});
}

function hideNarrator() {
document.getElementById('narrator').style.display = 'none';
}

// 更新资源显示
function updateResourcesDisplay() {
document.getElementById('gold-value').textContent = gameState.gold;
document.getElementById('food-value').textContent = gameState.food;
document.getElementById('renown-value').textContent = gameState.renown;
document.getElementById('turn-value').textContent = gameState.turn;
}

// 更新军队显示
function updateArmyDisplay() {
document.getElementById('infantry-count').textContent = gameState.army.infantry;
document.getElementById('cavalry-count').textContent = gameState.army.cavalry;
document.getElementById('archers-count').textContent = gameState.army.archers;
document.getElementById('siege-count').textContent = gameState.army.siege;

const totalTroops = gameState.army.infantry + gameState.army.cavalry +
gameState.army.archers + gameState.army.siege;
document.getElementById('total-troops').textContent = totalTroops;
}

// 招募单位
function recruitUnit(type) {
const cost = {
infantry: { gold: 5, food: 2 },
cavalry: { gold: 10, food: 4 },
archers: { gold: 7, food: 3 },
siege: { gold: 50, food: 20 }
};

if (gameState.gold >= cost[type].gold && gameState.food >= cost[type].food) {
gameState.gold -= cost[type].gold;
gameState.food -= cost[type].food;

const increment = {
infantry: 10,
cavalry: 5,
archers: 8,
siege: 1
};
qianzixuan @ 2025-09-30 17:38:34
[ Quote ] [ Edit ] [ Delete ] 20#
gameState.army[type] += increment[type];

updateResourcesDisplay();
updateArmyDisplay();

// 添加到事件日志
addEventLog(`招募完成: 新增${increment[type]}名${getUnitName(type)}`);
} else {
showNarrator("陛下,我们的资源不足以招募更多士兵。请先确保有足够的黄金和食物。");
}
}

// 训练单位
function trainUnit(type) {
const cost = {
infantry: { gold: 3, food: 1 },
cavalry: { gold: 5, food: 2 },
archers: { gold: 4, food: 1 },
siege: { gold: 20, food: 10 }
};

if (gameState.gold >= cost[type].gold && gameState.food >= cost[type].food) {
gameState.gold -= cost[type].gold;
gameState.food -= cost[type].food;

updateResourcesDisplay();

// 添加到事件日志
addEventLog(`训练完成: ${getUnitName(type)}战斗力提升`);
} else {
showNarrator("陛下,我们的资源不足以进行训练。请确保有足够的黄金和食物。");
}
}

// 获取单位名称
function getUnitName(type) {
const names = {
infantry: '步兵',
cavalry: '骑兵',
archers: '弓箭手',
siege: '攻城武器'
};

return names[type];
}

// 开始战斗
function startBattle() {
// 模拟战斗计算
const playerPower = calculateArmyPower();
const enemyPower = Math.floor(playerPower * (0.7 + Math.random() * 0.4));

let playerLosses = 0;
let enemyLosses = 0;

// 清空战斗日志
const battleLog = document.getElementById('battle-log');
battleLog.innerHTML = '';

// 显示战斗开始信息
addBattleLog("战报: 我军开始向波斯要塞进军...");

// 模拟战斗过程
setTimeout(() => {
addBattleLog("我军先锋部队与波斯前哨发生冲突...");

setTimeout(() => {
addBattleLog("双方主力部队正在集结...");

setTimeout(() => {
if (playerPower > enemyPower) {
// 玩家胜利
const victoryMargin = (playerPower - enemyPower) / playerPower;
playerLosses = Math.floor(gameState.army.infantry * 0.1 * (1 - victoryMargin));
enemyLosses = Math.floor(enemyPower * 0.7 * (1 + victoryMargin));

// 更新军队
gameState.army.infantry -= playerLosses;
if (gameState.army.infantry < 0) gameState.army.infantry = 0;

// 获得战利品
const goldGain = Math.floor(enemyLosses * 2.5);
const foodGain = Math.floor(enemyLosses * 2);

gameState.gold += goldGain;
gameState.food += foodGain;
gameState.renown += 20;

// 添加战斗日志
addBattleLog("我军突破敌方防线!波斯军队开始溃败...", "victory");
addBattleLog(`我军损失: ${playerLosses}人,敌军损失: ${enemyLosses}人`);
addBattleLog(`获得战利品: 黄金 +${goldGain}, 食物 +${foodGain}`);

// 更新战斗结果显示
document.getElementById('battle-result').innerHTML = `
<p>你的军队与波斯守军激烈交战!</p>
<p>马其顿方损失: ${playerLosses} 士兵</p>
<p>波斯方损失: ${enemyLosses} 士兵</p>
<p class="victory">胜利!你成功占领了波斯要塞</p>
<p>获得战利品: 黄金 +${goldGain}, 食物 +${foodGain}</p>
`;

qianzixuan @ 2025-09-30 17:38:48
[ Quote ] [ Edit ] [ Delete ] 21#
// 添加到事件日志
addEventLog(`战斗胜利: 击败波斯军队,获得${goldGain}黄金`);

// 显示胜利旁白
showNarrator("辉煌的胜利!陛下,您的战略眼光无人能及。波斯要塞现已落入我们手中,通往东方的道路已经打开。");
} else {
// 玩家失败
playerLosses = Math.floor(gameState.army.infantry * 0.3);
enemyLosses = Math.floor(enemyPower * 0.2);

// 更新军队
gameState.army.infantry -= playerLosses;
if (gameState.army.infantry < 0) gameState.army.infantry = 0;

gameState.renown -= 10;

// 添加战斗日志
addBattleLog("我军遭到顽强抵抗!形势不利...", "defeat");
addBattleLog(`我军损失: ${playerLosses}人,敌军损失: ${enemyLosses}人`);
addBattleLog("不得不下令撤退...");

// 更新战斗结果显示
document.getElementById('battle-result').innerHTML = `
<p>你的军队与波斯守军激烈交战!</p>
<p>马其顿方损失: ${playerLosses} 士兵</p>
<p>波斯方损失: ${enemyLosses} 士兵</p>
<p class="defeat">战败!你的军队被迫撤退</p>
<p>声望: -10</p>
`;
qianzixuan @ 2025-09-30 17:39:07
[ Quote ] [ Edit ] [ Delete ] 22#
// 添加到事件日志
addEventLog(`战斗失败: 被波斯军队击败,损失${playerLosses}名士兵`, "defeat");

// 显示失败旁白
showNarrator("陛下,波斯人的防御比预期更坚固。我们需要重新评估战略,加强军队后再作打算。");
}

updateResourcesDisplay();
updateArmyDisplay();

// 显示战斗结果模态框
document.getElementById('battle-modal').style.display = 'flex';
}, 2000);
}, 2000);
}, 2000);
}

// 侦察敌军
function scoutEnemy() {
// 模拟侦察结果
const successChance = 0.7;
const success = Math.random() < successChance;

addBattleLog("派出侦察队探查敌情...");

setTimeout(() => {
if (success) {
addBattleLog("侦察成功: 获得了波斯军队的详细布防信息", "event");
showNarrator("陛下,我们的侦察兵带回了宝贵的情报。波斯要塞守军约有200人,防御工事中等,但储备资源丰富。");
} else {
addBattleLog("侦察失败: 侦察队被敌人发现并驱赶", "defeat");
showNarrator("陛下,我们的侦察行动被波斯人发现了。他们加强了警戒,短期内可能难以再次侦察。");
}
}, 1500);
}

// 计算军队力量
function calculateArmyPower() {
return gameState.army.infantry * 1 +
gameState.army.cavalry * 1.5 +
gameState.army.archers * 1.2 +
gameState.army.siege * 4;
}

// 添加事件日志(带打字效果)
function addEventLog(message, type = 'normal') {
const logEntry = document.createElement('div');
logEntry.className = `log-entry ${type}`;

document.getElementById('event-log').appendChild(logEntry);
typeText(logEntry, message);
qianzixuan @ 2025-09-30 17:39:29
[ Quote ] [ Edit ] [ Delete ] 23#
// 自动滚动到底部
const eventLog = document.getElementById('event-log');
eventLog.scrollTop = eventLog.scrollHeight;
}

// 添加战斗日志(带打字效果)
function addBattleLog(message, type = 'normal') {
const logEntry = document.createElement('div');
logEntry.className = `log-entry ${type}`;

document.getElementById('battle-log').appendChild(logEntry);
typeText(logEntry, message);

// 自动滚动到底部
const battleLog = document.getElementById('battle-log');
battleLog.scrollTop = battleLog.scrollHeight;
}

// 关闭模态框
function closeModal() {
document.getElementById('battle-modal').style.display = 'none';
hideNarrator();
}

// 初始化游戏
window.onload = initializeGame;
</script>
</body>
</html>
yuzihao @ 2025-10-01 18:15:52
[ Quote ] [ Edit ] [ Delete ] 24#
12
chenyuxiang @ 2025-10-01 18:25:09
[ Quote ] [ Edit ] [ Delete ] 25#
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

class Solution {
public:
int countValidPurchases(int n, int k, string& flowers) {
int result = 0;

// 遍历所有可能的连续子串
for (int left = 0; left < n; left++) {
unordered_map<char, int> count;

// 尝试不同长度的子串
for (int right = left; right < n; right++) {
// 统计当前子串中各种花的数量
count[flowers[right]]++;

// 检查是否符合条件:每种花恰好k枝
if (isValidPurchase(count, k)) {
result++;
}
}
}

return result;
}

private:
// 检查当前子串是否符合要求
bool isValidPurchase(unordered_map<char, int>& count, int k) {
for (auto& pair : count) {
// 如果有品种数量不等于k,返回false
if (pair.second != k && pair.second != 0) {
return false;
}
}

// 检查是否至少有一种花的数量为k
for (auto& pair : count) {
if (pair.second == k) {
return true;
}
}

return false;
}
};

int main() {
int n, k;
string flowers;

// 读取输入
cin >> n >> k;
cin >> flowers;

Solution solution;
cout << solution.countValidPurchases(n, k, flowers) << endl;

return 0;
}
yuzihao @ 2025-10-02 17:20:56
[ Quote ] [ Edit ] [ Delete ] 26#
666
dingyonghang @ 2025-10-03 16:03:39
[ Quote ] [ Edit ] [ Delete ] 27#
666
yuzihao @ 2025-10-03 17:26:04
[ Quote ] [ Edit ] [ Delete ] 28#
agdagfda
lizhicheng @ 2025-10-03 18:06:48
[ Quote ] [ Edit ] [ Delete ] 29#
666