From 5a2d39293d8eb4967219db851d7217f99d074c69 Mon Sep 17 00:00:00 2001
From: ChuXun <70203584+ChuXunYu@users.noreply.github.com>
Date: Sun, 7 Dec 2025 22:53:46 +0800
Subject: [PATCH] Initial commit
---
.gitattributes | 2 +
README.md | 103 ++++
app.js | 12 +
app.json | 15 +
app.wxss | 48 ++
components/HistoryModal/HistoryModal.js | 35 ++
components/HistoryModal/HistoryModal.json | 4 +
components/HistoryModal/HistoryModal.wxml | 17 +
components/HistoryModal/HistoryModal.wxss | 111 ++++
data/crisisEvents.json | 74 +++
data/strategies.json | 98 ++++
pages/index/index.js | 199 +++++++
pages/index/index.json | 4 +
pages/index/index.wxml | 58 ++
pages/index/index.wxss | 151 ++++++
pages/result/result.js | 252 +++++++++
pages/result/result.json | 4 +
pages/result/result.wxml | 83 +++
pages/result/result.wxss | 479 +++++++++++++++++
pages/strategy/strategy.js | 419 +++++++++++++++
pages/strategy/strategy.json | 6 +
pages/strategy/strategy.wxml | 133 +++++
pages/strategy/strategy.wxss | 625 ++++++++++++++++++++++
project.config.json | 59 ++
project.private.config.json | 24 +
sitemap.json | 7 +
内容.md | 166 ++++++
27 files changed, 3188 insertions(+)
create mode 100644 .gitattributes
create mode 100644 README.md
create mode 100644 app.js
create mode 100644 app.json
create mode 100644 app.wxss
create mode 100644 components/HistoryModal/HistoryModal.js
create mode 100644 components/HistoryModal/HistoryModal.json
create mode 100644 components/HistoryModal/HistoryModal.wxml
create mode 100644 components/HistoryModal/HistoryModal.wxss
create mode 100644 data/crisisEvents.json
create mode 100644 data/strategies.json
create mode 100644 pages/index/index.js
create mode 100644 pages/index/index.json
create mode 100644 pages/index/index.wxml
create mode 100644 pages/index/index.wxss
create mode 100644 pages/result/result.js
create mode 100644 pages/result/result.json
create mode 100644 pages/result/result.wxml
create mode 100644 pages/result/result.wxss
create mode 100644 pages/strategy/strategy.js
create mode 100644 pages/strategy/strategy.json
create mode 100644 pages/strategy/strategy.wxml
create mode 100644 pages/strategy/strategy.wxss
create mode 100644 project.config.json
create mode 100644 project.private.config.json
create mode 100644 sitemap.json
create mode 100644 内容.md
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..dfe0770
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..98b6909
--- /dev/null
+++ b/README.md
@@ -0,0 +1,103 @@
+# 边区危机应对策略小游戏
+
+## 项目介绍
+
+"边区危机应对策略小游戏"是一款基于微信小程序平台开发的教育类游戏,旨在模拟抗日战争时期根据地经济危机管理的历史决策场景。游戏通过交互式的方式,让用户扮演历史决策者的角色,面对不同类型的经济危机(如伪币冲击、物资短缺、汇率波动等),制定和实施多轮战略决策,并基于历史经验进行评价与反馈。
+
+## 功能特点
+
+- **多轮策略选择**:玩家可以分三轮选择不同类型的策略(经济手段、行政手段、群众动员),每轮选择后会获得历史案例参考
+- **策略标记系统**:已使用的策略会被标记,防止重复选择,确保决策多样性
+- **实时反馈机制**:每选择一个策略后,会立即展示相关历史案例,提供学习参考
+- **结果评估系统**:基于选择的策略组合进行综合评分,展示不同程度的结果(完美应对、有效应对、基本应对、应对失败)
+- **历史经验总结**:结果页面提供基于事件类型和所选策略的历史经验总结,加深用户对历史的理解
+- **优化的用户体验**:精心设计的界面动效、交互反馈和视觉效果,让学习过程更加生动有趣
+
+## 技术架构
+
+本项目基于微信小程序原生框架开发,主要技术特点包括:
+
+- **WXML/WXSS/JS结构**:采用微信小程序标准的组件化开发方式
+- **数据驱动视图**:基于小程序的数据绑定机制,实现界面与数据的同步更新
+- **自定义动画效果**:通过CSS3动画提升用户体验
+- **事件驱动逻辑**:基于事件处理实现交互逻辑
+- **全局状态管理**:使用App全局数据存储游戏进程信息
+
+## 项目结构
+
+```
+war/
+│
+├── app.js # 应用程序入口文件
+├── app.json # 应用程序配置文件
+├── app.wxss # 应用程序全局样式
+│
+├── pages/ # 页面目录
+│ ├── index/ # 首页(事件选择)
+│ ├── strategy/ # 策略选择页面
+│ └── result/ # 结果评估页面
+│
+├── images/ # 图片资源
+└── utils/ # 工具函数
+```
+
+## 使用方法
+
+1. **选择危机事件**:在首页选择面临的危机事件类型(伪币冲击、物资短缺或汇率波动)
+2. **多轮策略选择**:
+ - 第一轮选择"初期应对"策略
+ - 第二轮选择"中期调整"策略
+ - 第三轮选择"后期加强"策略
+3. **查看历史案例**:每选择一个策略后,会弹出相关历史案例供学习参考
+4. **查看评估结果**:完成三轮策略选择后,系统会综合评估决策效果,显示分数和历史经验总结
+
+## 核心算法
+
+策略评估算法考虑了以下因素:
+
+1. **策略适用性**:所选策略是否适用于当前危机类型
+2. **策略组合**:是否采用了多种类型的策略(经济、行政、群众动员)
+3. **策略时机**:某些策略在危机早期使用效果更佳
+4. **历史借鉴**:策略是否符合历史经验
+
+根据以上因素计算综合得分,并给出相应的评价结果。
+
+## 开发与优化
+
+项目进行了以下优化:
+
+1. **性能优化**:
+ - 使用延迟加载和状态处理,减少不必要的渲染
+ - 优化页面切换动画效果,提高流畅度
+
+2. **用户体验优化**:
+ - 添加加载状态提示
+ - 优化按钮反馈效果
+ - 丰富动画交互效果
+ - 增加操作引导和提示
+
+3. **代码优化**:
+ - 模块化设计,提高代码复用性
+ - 统一样式管理,保持界面风格一致性
+
+## 历史背景
+
+本游戏基于抗日战争时期各抗日民主根据地的实际历史经验开发。在艰苦的战争环境下,根据地面临各种经济危机,如敌人封锁、伪币冲击、物资短缺等。边区政府采取了灵活多样的经济政策和措施,成功应对了这些危机,保障了军民基本生活需求和抗战的持续进行。
+
+这段历史经验是中国共产党领导经济建设的重要实践,也是我党在复杂环境下进行经济治理的宝贵经验。
+
+## 未来计划
+
+1. 增加更多类型的历史危机事件
+2. 添加更详细的历史案例资料
+3. 引入排行榜和分享功能
+4. 优化界面设计和用户体验
+5. 增加更多的历史照片和资料
+
+## 反馈与联系
+
+如有任何问题或建议,欢迎联系我们。感谢您对历史教育游戏的支持!
+
+---
+
+© 2023 边区危机应对策略小游戏 - 历史教育游戏项目
\ No newline at end of file
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..d0074d0
--- /dev/null
+++ b/app.js
@@ -0,0 +1,12 @@
+// app.js
+App({
+ onLaunch: function () {
+ console.log('应用启动');
+ },
+ globalData: {
+ selectedEvent: null,
+ selectedStrategies: [],
+ currentRound: 0,
+ maxRounds: 3
+ }
+})
\ No newline at end of file
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..73c2dc5
--- /dev/null
+++ b/app.json
@@ -0,0 +1,15 @@
+{
+ "pages": [
+ "pages/index/index",
+ "pages/strategy/strategy",
+ "pages/result/result"
+ ],
+ "window": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#8B0000",
+ "navigationBarTitleText": "边币战争",
+ "navigationBarTextStyle": "white"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json"
+}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..df3863c
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,48 @@
+/**app.wxss**/
+page {
+ font-family: 'Microsoft YaHei', Arial, sans-serif;
+ background-color: #F8F8F8;
+ font-size: 16px;
+ color: #333;
+}
+
+.container {
+ padding: 20rpx;
+ box-sizing: border-box;
+}
+
+.card {
+ background: #fff;
+ border-radius: 8rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ margin-bottom: 20rpx;
+ padding: 20rpx;
+}
+
+.title {
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 20rpx;
+ color: #8B0000;
+}
+
+.btn {
+ background: #8B0000;
+ color: #fff;
+ border-radius: 8rpx;
+ padding: 20rpx 0;
+ text-align: center;
+ font-size: 16px;
+ margin: 20rpx 0;
+}
+
+.btn-outline {
+ background: #fff;
+ color: #8B0000;
+ border: 1px solid #8B0000;
+}
+
+.vintage-bg {
+ background-color: #F9F2E6;
+ background-image: url("data:image/svg+xml,%3Csvg width='100' height='100' viewBox='0 0 100 100' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11 18c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm48 25c3.866 0 7-3.134 7-7s-3.134-7-7-7-7 3.134-7 7 3.134 7 7 7zm-43-7c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm63 31c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM34 90c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zm56-76c1.657 0 3-1.343 3-3s-1.343-3-3-3-3 1.343-3 3 1.343 3 3 3zM12 86c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm28-65c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm23-11c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-6 60c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm29 22c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zM32 63c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm57-13c2.76 0 5-2.24 5-5s-2.24-5-5-5-5 2.24-5 5 2.24 5 5 5zm-9-21c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM60 91c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM35 41c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2zM12 60c1.105 0 2-.895 2-2s-.895-2-2-2-2 .895-2 2 .895 2 2 2z' fill='%238b0000' fill-opacity='0.05' fill-rule='evenodd'/%3E%3C/svg%3E");
+}
\ No newline at end of file
diff --git a/components/HistoryModal/HistoryModal.js b/components/HistoryModal/HistoryModal.js
new file mode 100644
index 0000000..156a12f
--- /dev/null
+++ b/components/HistoryModal/HistoryModal.js
@@ -0,0 +1,35 @@
+Component({
+ /**
+ * 组件的属性列表
+ */
+ properties: {
+ show: {
+ type: Boolean,
+ value: false
+ },
+ historyCase: {
+ type: Object,
+ value: null
+ }
+ },
+
+ /**
+ * 组件的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 组件的方法列表
+ */
+ methods: {
+ closeModal: function() {
+ this.triggerEvent('close');
+ },
+
+ preventBubble: function(e) {
+ // 阻止冒泡,防止点击内容区域关闭模态框
+ }
+ }
+})
\ No newline at end of file
diff --git a/components/HistoryModal/HistoryModal.json b/components/HistoryModal/HistoryModal.json
new file mode 100644
index 0000000..b8c1f40
--- /dev/null
+++ b/components/HistoryModal/HistoryModal.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/components/HistoryModal/HistoryModal.wxml b/components/HistoryModal/HistoryModal.wxml
new file mode 100644
index 0000000..946cd22
--- /dev/null
+++ b/components/HistoryModal/HistoryModal.wxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+ {{historyCase.title}}
+
+ {{historyCase.description}}
+
+
+
+
\ No newline at end of file
diff --git a/components/HistoryModal/HistoryModal.wxss b/components/HistoryModal/HistoryModal.wxss
new file mode 100644
index 0000000..83277ea
--- /dev/null
+++ b/components/HistoryModal/HistoryModal.wxss
@@ -0,0 +1,111 @@
+/* components/HistoryModal/HistoryModal.wxss */
+.modal-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.6);
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ z-index: 999;
+}
+
+.modal-content {
+ width: 80%;
+ background: #fff;
+ border-radius: 10rpx;
+ overflow: hidden;
+ box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.2);
+ animation: modalShow 0.3s ease;
+}
+
+@keyframes modalShow {
+ from {
+ opacity: 0;
+ transform: scale(0.9);
+ }
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+.modal-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 20rpx;
+ border-bottom: 1px solid #eee;
+ background-color: #F9F2E6;
+}
+
+.modal-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #8B0000;
+}
+
+.modal-close {
+ font-size: 36rpx;
+ color: #999;
+ width: 60rpx;
+ height: 60rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.modal-body {
+ padding: 30rpx;
+}
+
+.case-title {
+ font-size: 30rpx;
+ font-weight: bold;
+ margin-bottom: 20rpx;
+ text-align: center;
+ color: #333;
+}
+
+.case-image {
+ width: 100%;
+ height: 320rpx;
+ margin-bottom: 20rpx;
+ background-color: #f0f0f0;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ position: relative;
+}
+
+.case-image::after {
+ content: "历史案例图片";
+ color: #999;
+ font-size: 28rpx;
+}
+
+.case-desc {
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.5;
+ text-align: justify;
+}
+
+.modal-footer {
+ padding: 20rpx;
+ display: flex;
+ justify-content: center;
+ border-top: 1px solid #eee;
+ background-color: #F9F2E6;
+}
+
+.btn {
+ background: #8B0000;
+ color: #fff;
+ border-radius: 8rpx;
+ padding: 20rpx 60rpx;
+ text-align: center;
+ font-size: 28rpx;
+}
\ No newline at end of file
diff --git a/data/crisisEvents.json b/data/crisisEvents.json
new file mode 100644
index 0000000..abd04a5
--- /dev/null
+++ b/data/crisisEvents.json
@@ -0,0 +1,74 @@
+[
+ {
+ "id": "fake_currency_1",
+ "type": "fakeCurrency",
+ "title": "伪币冲击:初级",
+ "description": "敌方在根据地周边地区投放少量伪造边币,市场上开始出现伪币流通现象",
+ "level": 1,
+ "impact": "市场信心轻微下降,边币贬值风险较小"
+ },
+ {
+ "id": "fake_currency_2",
+ "type": "fakeCurrency",
+ "title": "伪币冲击:中级",
+ "description": "敌方增加伪造边币投放力度,市场上伪币数量明显增加,造成一定混乱",
+ "level": 2,
+ "impact": "市场交易受阻,边币信任度下降,贸易活动减少"
+ },
+ {
+ "id": "fake_currency_3",
+ "type": "fakeCurrency",
+ "title": "伪币冲击:高级",
+ "description": "敌方大规模投放高仿真度伪币,市场已难以分辨真伪,货币混乱严重",
+ "level": 3,
+ "impact": "边币严重贬值,市场恐慌,经济活动受到重创"
+ },
+ {
+ "id": "shortage_1",
+ "type": "shortage",
+ "title": "物资短缺:初级",
+ "description": "部分生活必需品供应不足,市场价格开始上涨",
+ "level": 1,
+ "impact": "物价小幅上涨,边币购买力略有下降"
+ },
+ {
+ "id": "shortage_2",
+ "type": "shortage",
+ "title": "物资短缺:中级",
+ "description": "多种生活必需品严重短缺,黑市交易开始活跃",
+ "level": 2,
+ "impact": "物价大幅上涨,边币购买力明显下降,民众不满情绪增加"
+ },
+ {
+ "id": "shortage_3",
+ "type": "shortage",
+ "title": "物资短缺:高级",
+ "description": "根据地被敌军封锁,几乎所有物资都极度匮乏",
+ "level": 3,
+ "impact": "物价飞涨,边币几近崩溃,根据地经济面临瘫痪"
+ },
+ {
+ "id": "exchange_1",
+ "type": "exchange",
+ "title": "汇率波动:初级",
+ "description": "边币对法币汇率小幅波动,交易活动受到轻微影响",
+ "level": 1,
+ "impact": "边币信心略有动摇,边区与外界贸易略受影响"
+ },
+ {
+ "id": "exchange_2",
+ "type": "exchange",
+ "title": "汇率波动:中级",
+ "description": "边币对法币汇率大幅下跌,边区与外界贸易受阻",
+ "level": 2,
+ "impact": "边币信心受挫,边区经济受到较大冲击"
+ },
+ {
+ "id": "exchange_3",
+ "type": "exchange",
+ "title": "汇率波动:高级",
+ "description": "边币对法币汇率暴跌,边区与外界经济联系几乎中断",
+ "level": 3,
+ "impact": "边币信心崩溃,边区经济面临严重危机"
+ }
+]
\ No newline at end of file
diff --git a/data/strategies.json b/data/strategies.json
new file mode 100644
index 0000000..1d295d2
--- /dev/null
+++ b/data/strategies.json
@@ -0,0 +1,98 @@
+{
+ "economic": [
+ {
+ "id": "economic_1",
+ "title": "调整边币兑换率",
+ "description": "通过合理调整边币与法币的兑换率,稳定币值",
+ "applicable": ["exchange", "fakeCurrency"],
+ "historyCase": {
+ "title": "1943年陕甘宁边区调整币值案例",
+ "description": "1943年初,陕甘宁边区政府面对法币贬值和边币信任危机,通过灵活调整边币与法币的兑换率,维护了边币的市场地位。边区银行在延安、安塞等地设立汇兑所,按照新兑换率进行操作,确保边区经济稳定运行,有效应对了币值波动,保障了边区军民的日常生活需求。"
+ }
+ },
+ {
+ "id": "economic_2",
+ "title": "紧缩货币发行",
+ "description": "减少边币发行量,提高现有边币价值",
+ "applicable": ["exchange", "fakeCurrency", "shortage"],
+ "historyCase": {
+ "title": "1944年晋察冀边区紧缩货币政策",
+ "description": "1944年,晋察冀边区面临严重的通货膨胀威胁,决定实施紧缩货币政策。边区政府减少新币发行,严格控制财政支出,同时鼓励民众储蓄。这些措施有效控制了货币流通量,提高了边币价值,稳定了物价,为边区经济发展和军事斗争提供了有力的后方支持。"
+ }
+ },
+ {
+ "id": "economic_3",
+ "title": "建立物资储备",
+ "description": "组织经济战备,储备重要物资以稳定物价",
+ "applicable": ["shortage", "exchange"],
+ "historyCase": {
+ "title": "1942年晋察冀边区物资储备计划",
+ "description": "1942年,晋察冀边区政府实施了系统的物资储备计划,建立了多处秘密仓库储存粮食、食盐、药品等战略物资。这些储备在国民党经济封锁期间发挥了关键作用,通过适时投放市场,有效平抑了物价波动,维护了边币价值,保障了军民基本生活,增强了边区人民对党和政府的信任。"
+ }
+ }
+ ],
+ "administrative": [
+ {
+ "id": "admin_1",
+ "title": "查抄伪币窝点",
+ "description": "派出工作组和武装力量,打击伪造边币的犯罪活动",
+ "applicable": ["fakeCurrency"],
+ "historyCase": {
+ "title": "1941年晋冀鲁豫边区打击伪币行动",
+ "description": "1941年,晋冀鲁豫边区政府针对敌人大量制造伪币的行为,组织了一次大规模的打击行动。公安部门与地方武装配合,经过缜密侦查,成功捣毁多个伪币制造点,逮捕制造伪币的敌特分子,缴获大量制币工具和伪造的边币。这次行动极大地打击了敌人的伪币活动,维护了边币的信誉和流通秩序。"
+ }
+ },
+ {
+ "id": "admin_2",
+ "title": "实施物资配给",
+ "description": "对关键物资实行统一配给制度,确保公平分配",
+ "applicable": ["shortage"],
+ "historyCase": {
+ "title": "1945年山东解放区物资配给制度",
+ "description": "1945年,山东解放区在物资极度匮乏的情况下,建立了完善的物资配给制度。政府按照家庭人口和特殊需求,公平分配粮食、布匹等生活必需品,防止市场投机和物价暴涨。同时,对军队、医院和学校等重点单位给予优先保障。这一制度不仅保障了军民基本生活,还稳定了边币价值,维护了社会稳定。"
+ }
+ },
+ {
+ "id": "admin_3",
+ "title": "设立边币管理委员会",
+ "description": "成立专门机构,统一协调货币政策和币值稳定措施",
+ "applicable": ["fakeCurrency", "exchange", "shortage"],
+ "historyCase": {
+ "title": "1940年陕甘宁边区货币管理委员会",
+ "description": "1940年,陕甘宁边区成立了货币管理委员会,由财政、银行、贸易等部门负责人组成,统一协调边区货币政策。委员会制定了边币流通范围、兑换标准和防伪措施,定期研究解决货币流通中的问题,监控物价变化。这一机构的设立,使边区货币管理更加科学规范,有力支持了抗战和经济建设,成为其他解放区的借鉴。"
+ }
+ }
+ ],
+ "mobilization": [
+ {
+ "id": "mob_1",
+ "title": "开展拒用伪币宣传",
+ "description": "通过各种渠道向民众普及伪币识别知识,动员群众拒绝使用伪币",
+ "applicable": ["fakeCurrency"],
+ "historyCase": {
+ "title": "1943年冀中群众性反伪币运动",
+ "description": "1943年,冀中地区开展了声势浩大的反伪币宣传运动。边区政府印制了大量图文并茂的宣传品,详细介绍真伪边币的区别;组织文艺队编排快板、小戏进行巡回演出;在集市上设立辨别真伪币展示点。通过这些群众喜闻乐见的方式,使民众掌握了识别伪币的技能,自觉抵制伪币流通,大大减少了伪币对边区经济的危害。"
+ }
+ },
+ {
+ "id": "mob_2",
+ "title": "组织互助合作",
+ "description": "发动群众组建互助组和合作社,共同应对物资短缺",
+ "applicable": ["shortage"],
+ "historyCase": {
+ "title": "1942年抗日民主根据地互助合作运动",
+ "description": "1942年,面对严重的物资短缺,多个抗日根据地广泛开展了互助合作运动。农民组成互助组共同生产,村与村之间建立物资交换网络,根据地还成立了消费合作社,统一采购和分配生活必需品。这些自下而上的组织形式,有效整合了有限资源,提高了生产效率,缓解了物资短缺问题,增强了民众的团结协作精神。"
+ }
+ },
+ {
+ "id": "mob_3",
+ "title": "开展爱用边币运动",
+ "description": "动员群众积极使用边币,增强对根据地货币的信心",
+ "applicable": ["exchange", "fakeCurrency"],
+ "historyCase": {
+ "title": "1944年晋冀鲁豫边区爱用边币运动",
+ "description": "1944年,晋冀鲁豫边区开展了广泛的爱用边币运动。政府机关带头使用边币发放工资和采购物资;商会组织商户签订自觉使用边币公约;学校教育学生了解边币的重要性。通过这场运动,边币的使用范围不断扩大,民众对边币的信心显著增强,有力抵制了敌人破坏边区金融的图谋,为根据地经济稳定和军事斗争提供了有力支持。"
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..52523b4
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,199 @@
+const app = getApp()
+
+Page({
+ data: {
+ crisisEvents: []
+ },
+
+ onLoad: function() {
+ const that = this;
+ // 加载危机事件数据
+ wx.getFileSystemManager().readFile({
+ filePath: `${wx.env.USER_DATA_PATH}/data/crisisEvents.json`,
+ encoding: 'utf-8',
+ success: res => {
+ try {
+ const data = JSON.parse(res.data);
+ that.setData({
+ crisisEvents: data
+ });
+ } catch (e) {
+ console.error('解析危机事件数据失败', e);
+ // 如果读取本地失败,则使用示例数据
+ that.setData({
+ crisisEvents: [
+ {
+ id: 'fake_currency_1',
+ type: 'fakeCurrency',
+ title: '伪币冲击:初级',
+ description: '敌方在根据地周边地区投放少量伪造边币,市场上开始出现伪币流通现象',
+ level: 1,
+ impact: '市场信心轻微下降,边币贬值风险较小'
+ },
+ {
+ id: 'fake_currency_2',
+ type: 'fakeCurrency',
+ title: '伪币冲击:中级',
+ description: '敌方增加伪造边币投放力度,市场上伪币数量明显增加,造成一定混乱',
+ level: 2,
+ impact: '市场交易受阻,边币信任度下降,贸易活动减少'
+ },
+ {
+ id: 'fake_currency_3',
+ type: 'fakeCurrency',
+ title: '伪币冲击:高级',
+ description: '敌方大规模投放高仿真度伪币,市场已难以分辨真伪,货币混乱严重',
+ level: 3,
+ impact: '边币严重贬值,市场恐慌,经济活动受到重创'
+ },
+ {
+ id: 'shortage_1',
+ type: 'shortage',
+ title: '物资短缺:初级',
+ description: '部分生活必需品供应不足,市场价格开始上涨',
+ level: 1,
+ impact: '物价小幅上涨,边币购买力略有下降'
+ },
+ {
+ id: 'shortage_2',
+ type: 'shortage',
+ title: '物资短缺:中级',
+ description: '多种生活必需品严重短缺,黑市交易开始活跃',
+ level: 2,
+ impact: '物价大幅上涨,边币购买力明显下降,民众不满情绪增加'
+ },
+ {
+ id: 'shortage_3',
+ type: 'shortage',
+ title: '物资短缺:高级',
+ description: '根据地被敌军封锁,几乎所有物资都极度匮乏',
+ level: 3,
+ impact: '物价飞涨,边币几近崩溃,根据地经济面临瘫痪'
+ },
+ {
+ id: 'exchange_1',
+ type: 'exchange',
+ title: '汇率波动:初级',
+ description: '边币对法币汇率小幅波动,交易活动受到轻微影响',
+ level: 1,
+ impact: '边币信心略有动摇,边区与外界贸易略受影响'
+ },
+ {
+ id: 'exchange_2',
+ type: 'exchange',
+ title: '汇率波动:中级',
+ description: '边币对法币汇率大幅下跌,边区与外界贸易受阻',
+ level: 2,
+ impact: '边币信心受挫,边区经济受到较大冲击'
+ },
+ {
+ id: 'exchange_3',
+ type: 'exchange',
+ title: '汇率波动:高级',
+ description: '边币对法币汇率暴跌,边区与外界经济联系几乎中断',
+ level: 3,
+ impact: '边币信心崩溃,边区经济面临严重危机'
+ }
+ ]
+ });
+ }
+ },
+ fail: () => {
+ console.log('读取本地文件失败,使用示例数据');
+ // 使用示例数据
+ that.setData({
+ crisisEvents: [
+ {
+ id: 'fake_currency_1',
+ type: 'fakeCurrency',
+ title: '伪币冲击:初级',
+ description: '敌方在根据地周边地区投放少量伪造边币,市场上开始出现伪币流通现象',
+ level: 1,
+ impact: '市场信心轻微下降,边币贬值风险较小'
+ },
+ {
+ id: 'fake_currency_2',
+ type: 'fakeCurrency',
+ title: '伪币冲击:中级',
+ description: '敌方增加伪造边币投放力度,市场上伪币数量明显增加,造成一定混乱',
+ level: 2,
+ impact: '市场交易受阻,边币信任度下降,贸易活动减少'
+ },
+ {
+ id: 'fake_currency_3',
+ type: 'fakeCurrency',
+ title: '伪币冲击:高级',
+ description: '敌方大规模投放高仿真度伪币,市场已难以分辨真伪,货币混乱严重',
+ level: 3,
+ impact: '边币严重贬值,市场恐慌,经济活动受到重创'
+ },
+ {
+ id: 'shortage_1',
+ type: 'shortage',
+ title: '物资短缺:初级',
+ description: '部分生活必需品供应不足,市场价格开始上涨',
+ level: 1,
+ impact: '物价小幅上涨,边币购买力略有下降'
+ },
+ {
+ id: 'shortage_2',
+ type: 'shortage',
+ title: '物资短缺:中级',
+ description: '多种生活必需品严重短缺,黑市交易开始活跃',
+ level: 2,
+ impact: '物价大幅上涨,边币购买力明显下降,民众不满情绪增加'
+ },
+ {
+ id: 'shortage_3',
+ type: 'shortage',
+ title: '物资短缺:高级',
+ description: '根据地被敌军封锁,几乎所有物资都极度匮乏',
+ level: 3,
+ impact: '物价飞涨,边币几近崩溃,根据地经济面临瘫痪'
+ },
+ {
+ id: 'exchange_1',
+ type: 'exchange',
+ title: '汇率波动:初级',
+ description: '边币对法币汇率小幅波动,交易活动受到轻微影响',
+ level: 1,
+ impact: '边币信心略有动摇,边区与外界贸易略受影响'
+ },
+ {
+ id: 'exchange_2',
+ type: 'exchange',
+ title: '汇率波动:中级',
+ description: '边币对法币汇率大幅下跌,边区与外界贸易受阻',
+ level: 2,
+ impact: '边币信心受挫,边区经济受到较大冲击'
+ },
+ {
+ id: 'exchange_3',
+ type: 'exchange',
+ title: '汇率波动:高级',
+ description: '边币对法币汇率暴跌,边区与外界经济联系几乎中断',
+ level: 3,
+ impact: '边币信心崩溃,边区经济面临严重危机'
+ }
+ ]
+ });
+ }
+ });
+ },
+
+ handleEventSelect: function(e) {
+ const eventId = e.currentTarget.dataset.id;
+ const selectedEvent = this.data.crisisEvents.find(item => item.id === eventId);
+
+ if (selectedEvent) {
+ // 将选中事件保存到全局数据
+ const app = getApp();
+ app.globalData.selectedEvent = selectedEvent;
+
+ // 跳转到策略选择页面
+ wx.navigateTo({
+ url: '/pages/strategy/strategy'
+ });
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/index/index.json b/pages/index/index.json
new file mode 100644
index 0000000..f05f2ac
--- /dev/null
+++ b/pages/index/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "边币战争 - 事件选择"
+}
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..1162551
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,58 @@
+
+
+
+
+
+ 欢迎来到"边币战争",您将扮演边区政府决策者,应对各种货币危机,选择最合适的策略保卫边币,维护根据地经济安全。
+
+
+ 选择危机事件
+
+
+
+ 伪币冲击
+
+
+ {{item.title}}
+ {{item.description}}
+ 影响:{{item.impact}}
+
+
+
+
+
+ 物资短缺
+
+
+ {{item.title}}
+ {{item.description}}
+ 影响:{{item.impact}}
+
+
+
+
+
+ 汇率波动
+
+
+ {{item.title}}
+ {{item.description}}
+ 影响:{{item.impact}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..61f941a
--- /dev/null
+++ b/pages/index/index.wxss
@@ -0,0 +1,151 @@
+/**index.wxss**/
+.header {
+ display: flex;
+ align-items: center;
+ padding: 30rpx 0;
+}
+
+.logo {
+ width: 100rpx;
+ height: 100rpx;
+ margin-right: 20rpx;
+ background-color: #f0f0f0;
+ border-radius: 50%;
+ position: relative;
+}
+
+.logo::after {
+ content: "LOGO";
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ color: #999;
+ font-size: 24rpx;
+}
+
+.title-box {
+ display: flex;
+ flex-direction: column;
+}
+
+.main-title {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #8B0000;
+}
+
+.sub-title {
+ font-size: 24rpx;
+ color: #666;
+}
+
+.intro-card {
+ margin: 20rpx 0 40rpx;
+ padding: 30rpx;
+ border-left: 4px solid #8B0000;
+}
+
+.intro-text {
+ font-size: 28rpx;
+ line-height: 1.6;
+}
+
+.section-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ margin: 20rpx 0;
+ color: #333;
+ border-bottom: 1px solid #ddd;
+ padding-bottom: 10rpx;
+}
+
+.event-type {
+ margin-bottom: 40rpx;
+}
+
+.type-title {
+ font-size: 30rpx;
+ font-weight: bold;
+ margin: 10rpx 0;
+ color: #555;
+}
+
+.events {
+ display: flex;
+ flex-direction: column;
+}
+
+.event-card {
+ padding: 20rpx;
+ margin: 10rpx 0;
+ position: relative;
+ overflow: hidden;
+}
+
+.event-card.level-1 {
+ border-left: 4px solid #4CAF50;
+}
+
+.event-card.level-2 {
+ border-left: 4px solid #FFC107;
+}
+
+.event-card.level-3 {
+ border-left: 4px solid #F44336;
+}
+
+.event-card::after {
+ content: "";
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 0;
+ height: 0;
+ border-style: solid;
+}
+
+.event-card.level-1::after {
+ border-width: 0 20px 20px 0;
+ border-color: transparent #4CAF50 transparent transparent;
+}
+
+.event-card.level-2::after {
+ border-width: 0 20px 20px 0;
+ border-color: transparent #FFC107 transparent transparent;
+}
+
+.event-card.level-3::after {
+ border-width: 0 20px 20px 0;
+ border-color: transparent #F44336 transparent transparent;
+}
+
+.event-title {
+ font-size: 28rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+}
+
+.event-desc {
+ font-size: 26rpx;
+ color: #666;
+ margin-bottom: 10rpx;
+ line-height: 1.4;
+}
+
+.event-impact {
+ font-size: 24rpx;
+ color: #888;
+}
+
+.footer {
+ margin-top: 40rpx;
+ padding: 20rpx;
+ text-align: center;
+ border-top: 1px solid #eee;
+}
+
+.footer-text {
+ font-size: 24rpx;
+ color: #999;
+}
\ No newline at end of file
diff --git a/pages/result/result.js b/pages/result/result.js
new file mode 100644
index 0000000..1a74ac5
--- /dev/null
+++ b/pages/result/result.js
@@ -0,0 +1,252 @@
+// result.js
+const app = getApp()
+
+Page({
+ data: {
+ event: null,
+ selectedStrategies: [],
+ result: {
+ title: "",
+ description: "",
+ score: 0,
+ scoreText: "",
+ imageClass: ""
+ },
+ historyLessons: [],
+ isLoading: true,
+ showShareTip: false
+ },
+
+ onLoad: function() {
+ wx.showLoading({
+ title: '分析结果中...',
+ mask: true
+ });
+
+ const selectedEvent = app.globalData.selectedEvent;
+ const selectedStrategies = app.globalData.selectedStrategies;
+
+ if (!selectedEvent || !selectedStrategies || selectedStrategies.length === 0) {
+ wx.showToast({
+ title: '缺少必要数据',
+ icon: 'none',
+ duration: 2000
+ });
+ setTimeout(() => {
+ wx.navigateBack();
+ }, 2000);
+ return;
+ }
+
+ // 模拟结果计算延迟,增强体验
+ setTimeout(() => {
+ // 计算结果
+ const result = this.calculateResult(selectedEvent, selectedStrategies);
+ const lessons = this.generateHistoryLessons(selectedEvent, selectedStrategies);
+
+ this.setData({
+ event: selectedEvent,
+ selectedStrategies: selectedStrategies,
+ result: result,
+ historyLessons: lessons,
+ isLoading: false
+ });
+
+ wx.hideLoading();
+ }, 1500);
+ },
+
+ calculateResult: function(event, strategies) {
+ // 基础分数,根据策略数量和适用性计算
+ let score = 0;
+ const maxScore = 100;
+ const strategiesCount = strategies.length;
+
+ // 针对每个策略评分
+ strategies.forEach(item => {
+ const strategy = item.strategy;
+
+ // 策略是否适用于当前事件类型
+ if (strategy.applicable && strategy.applicable.includes(event.type)) {
+ // 基础加分
+ score += 20;
+
+ // 根据危机等级和策略类型给予额外加分
+ if (event.level === 3) { // 高级危机
+ if (strategiesCount >= 3) { // 多种策略组合应对高级危机
+ score += 10;
+ }
+ } else if (event.level === 2) { // 中级危机
+ if (strategiesCount >= 2) { // 至少两种策略
+ score += 5;
+ }
+ }
+
+ // 根据策略选择的轮次给予不同评分
+ // 某些危机类型在早期应对更有效
+ if (item.round === 1 && (event.type === 'fakeCurrency' || event.type === 'exchange')) {
+ score += 5; // 早期应对金融类危机更有效
+ }
+
+ // 组合策略加分(比如经济+行政双管齐下)
+ const typeCount = this.countStrategyTypes(strategies);
+ if (typeCount >= 2) { // 如果使用了至少两种不同类型的策略
+ score += 5;
+ }
+ } else {
+ // 使用了不适用的策略
+ score -= 10;
+ }
+ });
+
+ // 最终得分不超过100,不低于0
+ score = Math.min(Math.max(score, 0), maxScore);
+
+ // 根据得分确定结果文本
+ let title = "";
+ let description = "";
+ let scoreText = "";
+ let imageClass = "";
+
+ if (score >= 90) {
+ title = "完美应对!";
+ description = "您的策略组合非常出色,充分借鉴了历史经验,有效应对了" + event.title + "。根据地经济形势明显好转,边币稳定流通,人民生活得到保障。";
+ scoreText = "卓越";
+ imageClass = "result-excellent";
+ } else if (score >= 70) {
+ title = "有效应对";
+ description = "您的策略组合较为合理,基本控制了" + event.title + "带来的影响。根据地经济形势稳定,边币信任度维持,保障了基本生活需求。";
+ scoreText = "良好";
+ imageClass = "result-good";
+ } else if (score >= 40) {
+ title = "基本应对";
+ description = "您的部分策略发挥了作用,但面对" + event.title + "仍有不足。根据地经济受到一定冲击,边币价值有所波动,生活水平略有下降。";
+ scoreText = "一般";
+ imageClass = "result-average";
+ } else {
+ title = "应对失败";
+ description = "您的策略未能有效应对" + event.title + "。根据地经济遭受重创,边币严重贬值,人民生活陷入困境。建议重新思考策略组合。";
+ scoreText = "不佳";
+ imageClass = "result-poor";
+ }
+
+ return {
+ title: title,
+ description: description,
+ score: score,
+ scoreText: scoreText,
+ imageClass: imageClass
+ };
+ },
+
+ // 统计策略类型数量
+ countStrategyTypes: function(strategies) {
+ const types = new Set();
+ strategies.forEach(item => {
+ if (item.strategy.id.startsWith('economic')) {
+ types.add('economic');
+ } else if (item.strategy.id.startsWith('admin')) {
+ types.add('administrative');
+ } else if (item.strategy.id.startsWith('mob')) {
+ types.add('mobilization');
+ }
+ });
+ return types.size;
+ },
+
+ // 生成历史经验教训
+ generateHistoryLessons: function(event, strategies) {
+ const lessons = [];
+
+ // 根据事件类型和策略选择生成相关历史经验
+ if (event.type === 'fakeCurrency') {
+ lessons.push({
+ title: "货币稳定的关键经验",
+ content: "历史上,边区政府通过加强金融制度建设和稳定物价,有效维护了边币流通秩序。"
+ });
+ } else if (event.type === 'shortage') {
+ lessons.push({
+ title: "应对物资短缺的经验",
+ content: "各根据地在物资匮乏时期,通过发展生产、精简机构、厉行节约等多种方式度过难关。"
+ });
+ } else if (event.type === 'exchange') {
+ lessons.push({
+ title: "汇率稳定的历史借鉴",
+ content: "边区政府曾通过调整法币与边币比价、加强市场监管等措施,保障币值稳定。"
+ });
+ }
+
+ // 根据策略选择添加具体历史案例
+ const hasEconomic = strategies.some(item => item.strategy.id.startsWith('economic'));
+ const hasAdmin = strategies.some(item => item.strategy.id.startsWith('admin'));
+ const hasMob = strategies.some(item => item.strategy.id.startsWith('mob'));
+
+ if (hasEconomic && hasAdmin) {
+ lessons.push({
+ title: "经济与行政措施协同",
+ content: "历史经验表明,经济措施与行政手段相结合,能形成系统性解决方案,效果优于单一策略。"
+ });
+ }
+
+ if (hasMob) {
+ lessons.push({
+ title: "群众基础的重要性",
+ content: "边区政府的各项政策能够成功实施,离不开广大人民群众的支持与参与。动员群众是解决危机的基础。"
+ });
+ }
+
+ return lessons;
+ },
+
+ // 重新应对按钮点击事件
+ handleRestart: function() {
+ wx.showLoading({
+ title: '准备中...',
+ mask: true
+ });
+
+ setTimeout(() => {
+ wx.hideLoading();
+ wx.navigateBack({
+ delta: 1
+ });
+ }, 800);
+ },
+
+ // 返回首页按钮点击事件
+ handleBackToHome: function() {
+ wx.showLoading({
+ title: '返回首页...',
+ mask: true
+ });
+
+ setTimeout(() => {
+ wx.hideLoading();
+ wx.navigateBack({
+ delta: 2
+ });
+ }, 800);
+ },
+
+ // 分享按钮点击事件
+ handleShare: function() {
+ this.setData({
+ showShareTip: true
+ });
+
+ setTimeout(() => {
+ this.setData({
+ showShareTip: false
+ });
+ }, 3000);
+ },
+
+ // 生命周期函数
+ onShareAppMessage: function() {
+ return {
+ title: `我在边区危机中获得了${this.data.result.score}分的评价!`,
+ path: '/pages/index/index',
+ imageUrl: '/images/share-img.jpg' // 需要提供分享图片
+ };
+ }
+})
\ No newline at end of file
diff --git a/pages/result/result.json b/pages/result/result.json
new file mode 100644
index 0000000..2ab81b3
--- /dev/null
+++ b/pages/result/result.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "边币战争 - 应对结果"
+}
\ No newline at end of file
diff --git a/pages/result/result.wxml b/pages/result/result.wxml
new file mode 100644
index 0000000..d7fe942
--- /dev/null
+++ b/pages/result/result.wxml
@@ -0,0 +1,83 @@
+
+
+
+
+
+ 分析战略成效...
+
+
+
+
+
+
+
+
+ {{result.title}}
+
+ 效果评估:{{result.scoreText}}
+
+ {{result.score}}/100
+
+
+ {{result.description}}
+
+
+
+
+ 您采取的策略
+
+
+ 第{{item.round}}轮
+ {{item.strategy.title}}
+ {{item.strategy.description}}
+
+
+
+
+
+ 历史经验总结
+
+
+
+
+ {{item.title}}
+ {{item.content}}
+
+
+
+
+ 面对{{event.title}}类型的危机,历史上的根据地通常采取综合策略,既有经济手段,也有行政举措,更注重发动群众。应对此类危机的关键在于迅速行动、多管齐下,特别是在危机等级较高时,需要各种措施协同配合。在实际历史中,那些成功渡过经济危机的根据地,往往能够灵活运用各种资源,并且得到人民的广泛支持。
+
+
+
+
+
+ 重新应对
+ 返回首页
+
+
+
+ 分享结果
+
+
+
+
+
+ 点击右上角"..."按钮分享给好友
+
+
+
+
\ No newline at end of file
diff --git a/pages/result/result.wxss b/pages/result/result.wxss
new file mode 100644
index 0000000..af68305
--- /dev/null
+++ b/pages/result/result.wxss
@@ -0,0 +1,479 @@
+/**result.wxss**/
+.container {
+ padding: 30rpx;
+ min-height: 100vh;
+}
+
+.vintage-bg {
+ background-color: #f8f6f1;
+ background-image: url('data:image/png;base64,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');
+ position: relative;
+}
+
+.page-transition {
+ animation: fadeIn 0.5s ease-in-out;
+}
+
+@keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+/* 加载状态 */
+.loading-overlay {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(248, 246, 241, 0.9);
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ z-index: 999;
+}
+
+.loading-spinner {
+ width: 80rpx;
+ height: 80rpx;
+ border: 6rpx solid rgba(92, 184, 92, 0.2);
+ border-left-color: #5cb85c;
+ border-radius: 50%;
+ animation: spin 1s linear infinite;
+}
+
+.loading-text {
+ margin-top: 30rpx;
+ font-size: 32rpx;
+ color: #5cb85c;
+ font-weight: bold;
+}
+
+@keyframes spin {
+ to { transform: rotate(360deg); }
+}
+
+.content-area {
+ animation: slideUp 0.8s ease-out;
+}
+
+@keyframes slideUp {
+ from {
+ transform: translateY(50rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+.result-header {
+ margin-bottom: 30rpx;
+}
+
+.result-title {
+ font-size: 40rpx;
+ font-weight: bold;
+ color: #333;
+ text-align: center;
+ margin-bottom: 20rpx;
+ position: relative;
+ display: inline-block;
+}
+
+.result-title::after {
+ content: '';
+ position: absolute;
+ bottom: -10rpx;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 120rpx;
+ height: 4rpx;
+ background-color: #8B0000;
+}
+
+.event-info {
+ background-color: #fff;
+ padding: 20rpx;
+ border-radius: 10rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ margin-top: 20rpx;
+}
+
+.event-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+ margin-bottom: 10rpx;
+}
+
+.event-level {
+ display: flex;
+ align-items: center;
+ font-size: 28rpx;
+ color: #666;
+}
+
+.level-dots {
+ display: flex;
+ margin-left: 10rpx;
+}
+
+.level-dot {
+ width: 20rpx;
+ height: 20rpx;
+ border-radius: 50%;
+ background-color: #ddd;
+ margin-right: 5rpx;
+ transition: all 0.3s ease;
+}
+
+.level-dot.active {
+ background-color: #d9534f;
+ animation: pulseDot 2s infinite;
+}
+
+@keyframes pulseDot {
+ 0% { opacity: 1; }
+ 50% { opacity: 0.6; }
+ 100% { opacity: 1; }
+}
+
+.card {
+ background-color: #fff;
+ border-radius: 10rpx;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ margin-bottom: 30rpx;
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
+ padding: 20rpx;
+}
+
+.card:hover {
+ transform: translateY(-5rpx);
+ box-shadow: 0 5rpx 15rpx rgba(0, 0, 0, 0.15);
+}
+
+.result-card {
+ overflow: hidden;
+ animation: scaleIn 0.8s ease;
+ padding: 0;
+}
+
+@keyframes scaleIn {
+ 0% {
+ transform: scale(0.95);
+ opacity: 0;
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 1;
+ }
+}
+
+.result-image {
+ height: 200rpx;
+ background-size: cover;
+ background-position: center;
+}
+
+.result-excellent {
+ background-image: linear-gradient(45deg, #2ecc71, #27ae60);
+}
+
+.result-good {
+ background-image: linear-gradient(45deg, #3498db, #2980b9);
+}
+
+.result-average {
+ background-image: linear-gradient(45deg, #f1c40f, #f39c12);
+}
+
+.result-poor {
+ background-image: linear-gradient(45deg, #e74c3c, #c0392b);
+}
+
+.result-content {
+ padding: 20rpx;
+}
+
+.result-outcome {
+ font-size: 36rpx;
+ font-weight: bold;
+ color: #333;
+ margin-bottom: 15rpx;
+}
+
+.result-score {
+ font-size: 28rpx;
+ color: #666;
+ margin-bottom: 15rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+
+.score-text {
+ color: #5cb85c;
+ font-weight: bold;
+}
+
+.score-value {
+ background-color: #f8f9fa;
+ padding: 10rpx 20rpx;
+ border-radius: 20rpx;
+ text-align: center;
+}
+
+.score-number {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #8B0000;
+}
+
+.result-description {
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.5;
+}
+
+.strategies-summary {
+ margin-bottom: 30rpx;
+ animation: slideInRight 1s ease-out;
+ animation-fill-mode: both;
+ animation-delay: 0.3s;
+}
+
+@keyframes slideInRight {
+ from {
+ transform: translateX(30rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+}
+
+.summary-title, .lesson-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ margin-bottom: 20rpx;
+ color: #333;
+ position: relative;
+ padding-bottom: 10rpx;
+}
+
+.summary-title::after, .lesson-title::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 80rpx;
+ height: 4rpx;
+ background-color: #8B0000;
+ transition: width 0.3s ease;
+}
+
+.summary-title:hover::after, .lesson-title:hover::after {
+ width: 160rpx;
+}
+
+.strategies-list {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+}
+
+.strategy-item {
+ position: relative;
+ border-left: 8rpx solid #5cb85c;
+ transition: all 0.3s ease;
+}
+
+.strategy-round {
+ font-size: 24rpx;
+ color: #888;
+ margin-bottom: 10rpx;
+}
+
+.strategy-title {
+ font-size: 30rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ color: #333;
+}
+
+.strategy-desc {
+ font-size: 26rpx;
+ color: #666;
+ line-height: 1.5;
+}
+
+.historical-lesson {
+ margin-bottom: 40rpx;
+ animation: slideInLeft 1s ease-out;
+ animation-fill-mode: both;
+ animation-delay: 0.6s;
+}
+
+@keyframes slideInLeft {
+ from {
+ transform: translateX(-30rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+}
+
+.lessons-list {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+ margin-bottom: 20rpx;
+}
+
+.lesson-card {
+ border-left: 8rpx solid #f0ad4e;
+ animation: fadeInUp 0.6s ease-out;
+ animation-fill-mode: both;
+}
+
+.lesson-card:nth-child(2) {
+ animation-delay: 0.2s;
+}
+
+.lesson-card:nth-child(3) {
+ animation-delay: 0.4s;
+}
+
+@keyframes fadeInUp {
+ from {
+ transform: translateY(20rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+.lesson-card-title {
+ font-size: 28rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ color: #333;
+}
+
+.lesson-card-content {
+ font-size: 26rpx;
+ color: #666;
+ line-height: 1.5;
+}
+
+.lesson-content {
+ font-size: 28rpx;
+ color: #666;
+ line-height: 1.6;
+ border-left: 8rpx solid #5bc0de;
+}
+
+.action-buttons {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+ margin: 30rpx 0;
+}
+
+.btn-row {
+ display: flex;
+ justify-content: space-between;
+}
+
+.btn {
+ padding: 20rpx 40rpx;
+ border-radius: 50rpx;
+ font-size: 30rpx;
+ text-align: center;
+ background-color: #5cb85c;
+ color: #fff;
+ flex: 1;
+ margin: 0 10rpx;
+ transition: all 0.3s ease;
+ position: relative;
+ overflow: hidden;
+}
+
+.btn:active {
+ transform: scale(0.98);
+ background-color: #4cae4c;
+}
+
+.btn-outline {
+ background-color: transparent;
+ border: 2rpx solid #5cb85c;
+ color: #5cb85c;
+}
+
+.btn-outline:active {
+ background-color: rgba(92, 184, 92, 0.1);
+}
+
+.share-btn {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 20rpx;
+ border-radius: 50rpx;
+ background-color: #f8f9fa;
+ color: #333;
+ font-size: 28rpx;
+ margin-top: 10rpx;
+ transition: all 0.3s ease;
+}
+
+.share-icon {
+ width: 40rpx;
+ height: 40rpx;
+ margin-right: 10rpx;
+}
+
+.share-btn:active {
+ background-color: #e9ecef;
+ transform: scale(0.98);
+}
+
+/* 分享提示 */
+.share-tip {
+ position: fixed;
+ top: 20rpx;
+ right: 30rpx;
+ background-color: rgba(0, 0, 0, 0.7);
+ color: #fff;
+ padding: 15rpx 30rpx;
+ border-radius: 10rpx;
+ font-size: 26rpx;
+ opacity: 0;
+ transform: translateY(-20rpx);
+ transition: all 0.3s ease;
+ z-index: 999;
+}
+
+.share-tip.show {
+ opacity: 1;
+ transform: translateY(0);
+}
+
+.share-tip-arrow {
+ position: absolute;
+ top: -16rpx;
+ right: 30rpx;
+ width: 0;
+ height: 0;
+ border-left: 16rpx solid transparent;
+ border-right: 16rpx solid transparent;
+ border-bottom: 16rpx solid rgba(0, 0, 0, 0.7);
+}
\ No newline at end of file
diff --git a/pages/strategy/strategy.js b/pages/strategy/strategy.js
new file mode 100644
index 0000000..6cb7c2a
--- /dev/null
+++ b/pages/strategy/strategy.js
@@ -0,0 +1,419 @@
+// strategy.js
+const app = getApp()
+
+Page({
+ data: {
+ event: null,
+ strategies: {
+ economic: [
+ {
+ id: 'economic_1',
+ title: '调整边币兑换率',
+ description: '通过合理调整边币与法币的兑换率,稳定币值',
+ applicable: ['exchange', 'fakeCurrency'],
+ historyCase: {
+ title: '1943年陕甘宁边区调整币值案例',
+ description: '1943年初,陕甘宁边区政府通过调整边币与法币兑换率,有效应对了币值波动'
+ }
+ },
+ {
+ id: 'economic_2',
+ title: '紧缩货币发行',
+ description: '减少边币发行量,提高现有边币价值',
+ applicable: ['exchange', 'fakeCurrency', 'shortage'],
+ historyCase: {
+ title: '1944年某根据地紧缩货币政策',
+ description: '1944年,某根据地实施紧缩货币政策,有效控制了通货膨胀'
+ }
+ },
+ {
+ id: 'economic_3',
+ title: '建立物资储备',
+ description: '组织经济战备,储备重要物资以稳定物价',
+ applicable: ['shortage', 'exchange'],
+ historyCase: {
+ title: '1942年晋察冀边区物资储备计划',
+ description: '1942年,晋察冀边区政府建立战略物资储备,有效应对了国民党经济封锁'
+ }
+ }
+ ],
+ administrative: [
+ {
+ id: 'admin_1',
+ title: '查抄伪币窝点',
+ description: '派出工作组和武装力量,打击伪造边币的犯罪活动',
+ applicable: ['fakeCurrency'],
+ historyCase: {
+ title: '1941年晋冀鲁豫边区打击伪币行动',
+ description: '1941年,晋冀鲁豫边区政府开展了大规模打击伪币活动,摧毁多个伪币制造点'
+ }
+ },
+ {
+ id: 'admin_2',
+ title: '实施物资配给',
+ description: '对关键物资实行统一配给制度,确保公平分配',
+ applicable: ['shortage'],
+ historyCase: {
+ title: '1945年山东解放区物资配给制度',
+ description: '1945年,山东解放区实施关键物资配给制度,保障了军民基本生活需求'
+ }
+ },
+ {
+ id: 'admin_3',
+ title: '设立边币管理委员会',
+ description: '成立专门机构,统一协调货币政策和币值稳定措施',
+ applicable: ['fakeCurrency', 'exchange', 'shortage'],
+ historyCase: {
+ title: '1940年陕甘宁边区货币管理委员会',
+ description: '1940年,陕甘宁边区成立货币管理委员会,统一协调金融政策,保障了经济发展'
+ }
+ }
+ ],
+ mobilization: [
+ {
+ id: 'mob_1',
+ title: '开展拒用伪币宣传',
+ description: '通过各种渠道向民众普及伪币识别知识,动员群众拒绝使用伪币',
+ applicable: ['fakeCurrency'],
+ historyCase: {
+ title: '1943年冀中群众性反伪币运动',
+ description: '1943年,冀中地区开展了声势浩大的反伪币宣传运动,有效减少了伪币流通'
+ }
+ },
+ {
+ id: 'mob_2',
+ title: '组织互助合作',
+ description: '发动群众组建互助组和合作社,共同应对物资短缺',
+ applicable: ['shortage'],
+ historyCase: {
+ title: '1942年抗日民主根据地互助合作运动',
+ description: '1942年,多个抗日根据地开展互助合作运动,有效缓解了物资短缺问题'
+ }
+ },
+ {
+ id: 'mob_3',
+ title: '开展爱用边币运动',
+ description: '动员群众积极使用边币,增强对根据地货币的信心',
+ applicable: ['exchange', 'fakeCurrency'],
+ historyCase: {
+ title: '1944年晋冀鲁豫边区爱用边币运动',
+ description: '1944年,晋冀鲁豫边区开展爱用边币运动,提高了边币的公信力和使用范围'
+ }
+ }
+ ]
+ },
+ showModal: false,
+ currentHistoryCase: null,
+ currentRound: 0,
+ maxRounds: 3,
+ selectedStrategies: [],
+ strategiesUsed: {},
+ roundTitle: "第1轮 - 初期应对",
+ isProcessing: false, // 处理状态防止重复点击
+ isLoading: true, // 加载状态
+ selectableCount: 0, // 当前可选择的策略数
+ roundDescriptions: [
+ "初期应对 - 选择最紧急的措施",
+ "中期调整 - 加强应对效果",
+ "后期加强 - 巩固已有成果"
+ ]
+ },
+
+ onLoad: function() {
+ wx.showLoading({
+ title: '加载中...',
+ mask: true
+ });
+
+ try {
+ // 从全局数据获取选中的事件
+ const selectedEvent = app.globalData.selectedEvent;
+
+ if (selectedEvent) {
+ // 重置全局状态
+ app.globalData.selectedStrategies = [];
+ app.globalData.currentRound = 0;
+
+ this.initData(selectedEvent);
+ } else {
+ // 如果没有选中事件,创建一个测试事件(用于调试)
+ const testEvent = {
+ id: 'fake_currency_1',
+ type: 'fakeCurrency',
+ title: '伪币冲击:初级',
+ description: '敌方在根据地周边地区投放少量伪造边币,市场上开始出现伪币流通现象',
+ level: 1,
+ impact: '市场信心轻微下降,边币贬值风险较小'
+ };
+
+ this.initData(testEvent);
+ wx.showToast({
+ title: '使用测试数据',
+ icon: 'none',
+ duration: 2000
+ });
+ }
+ } catch (error) {
+ console.error('初始化数据出错:', error);
+ wx.hideLoading();
+ wx.showToast({
+ title: '加载失败,请重试',
+ icon: 'none',
+ duration: 2000
+ });
+ }
+ },
+
+ // 初始化数据和计算可选择的策略数量
+ initData: function(eventData) {
+ try {
+ // 设置基本数据
+ this.setData({
+ event: eventData,
+ currentRound: 0,
+ selectedStrategies: [],
+ strategiesUsed: {},
+ roundTitle: "第1轮 - 初期应对",
+ isProcessing: false
+ });
+
+ // 计算可选择的策略数量
+ let count = 0;
+ const eventType = eventData.type;
+
+ // 遍历所有策略类别
+ for (const category in this.data.strategies) {
+ this.data.strategies[category].forEach(strategy => {
+ if (strategy.applicable && strategy.applicable.indexOf(eventType) > -1) {
+ count++;
+ }
+ });
+ }
+
+ this.setData({
+ selectableCount: count,
+ isLoading: false
+ });
+
+ wx.hideLoading();
+ } catch (error) {
+ console.error('初始化数据出错:', error);
+ wx.hideLoading();
+ wx.showToast({
+ title: '数据初始化失败',
+ icon: 'none',
+ duration: 2000
+ });
+ }
+ },
+
+ handleStrategySelect: function(e) {
+ // 防止重复处理
+ if (this.data.isProcessing || this.data.showModal) {
+ return;
+ }
+
+ try {
+ const strategyType = e.currentTarget.dataset.type;
+ const strategyId = e.currentTarget.dataset.id;
+ const isApplicable = e.currentTarget.dataset.applicable;
+ const isUsed = e.currentTarget.dataset.used;
+
+ // 如果不适用或已使用,不处理
+ if (isApplicable === 'false' || isUsed === 'true') {
+ wx.vibrateShort(); // 轻微震动提示无法选择
+ return;
+ }
+
+ // 找到选中的策略
+ const selectedStrategy = this.data.strategies[strategyType].find(item => item.id === strategyId);
+
+ if (selectedStrategy) {
+ // 设置处理中状态
+ this.setData({
+ isProcessing: true
+ });
+
+ // 轻微振动反馈
+ wx.vibrateShort({
+ type: 'light'
+ });
+
+ // 标记该策略已使用
+ let newStrategiesUsed = {...this.data.strategiesUsed};
+ newStrategiesUsed[selectedStrategy.id] = true;
+
+ // 添加到已选策略列表
+ let newSelectedStrategies = [...this.data.selectedStrategies];
+ newSelectedStrategies.push({
+ round: this.data.currentRound + 1,
+ strategy: selectedStrategy
+ });
+
+ // 更新到全局数据
+ app.globalData.selectedStrategies = newSelectedStrategies;
+
+ // 显示历史案例模态框
+ this.setData({
+ showModal: true,
+ currentHistoryCase: selectedStrategy.historyCase,
+ strategiesUsed: newStrategiesUsed,
+ selectedStrategies: newSelectedStrategies
+ });
+ }
+ } catch (error) {
+ console.error('选择策略出错:', error);
+ this.setData({
+ isProcessing: false
+ });
+ wx.showToast({
+ title: '操作失败,请重试',
+ icon: 'none',
+ duration: 2000
+ });
+ }
+ },
+
+ closeModal: function() {
+ // 如果还在处理中,防止重复点击
+ if (!this.data.showModal) {
+ return;
+ }
+
+ try {
+ // 先关闭模态框
+ this.setData({
+ showModal: false,
+ currentHistoryCase: null
+ });
+
+ // 增加轮次
+ const newRound = this.data.currentRound + 1;
+ app.globalData.currentRound = newRound;
+
+ // 如果达到最大轮次,跳转到结果页面
+ if (newRound >= this.data.maxRounds) {
+ wx.showToast({
+ title: '策略选择完成',
+ icon: 'success',
+ duration: 1000,
+ mask: true
+ });
+
+ setTimeout(() => {
+ this.navigateToResults();
+ }, 1000);
+ } else {
+ // 否则继续下一轮
+ let roundTitle = "";
+ if (newRound === 1) {
+ roundTitle = "第2轮 - 中期调整";
+ } else if (newRound === 2) {
+ roundTitle = "第3轮 - 后期加强";
+ }
+
+ // 更新当前轮次状态
+ this.setData({
+ currentRound: newRound,
+ roundTitle: roundTitle,
+ isProcessing: false // 重置处理状态
+ });
+
+ wx.showToast({
+ title: `进入${roundTitle}`,
+ icon: 'none',
+ duration: 1500
+ });
+ }
+ } catch (error) {
+ console.error('关闭模态框出错:', error);
+ this.setData({
+ isProcessing: false
+ });
+ wx.showToast({
+ title: '操作失败,请重试',
+ icon: 'none',
+ duration: 2000
+ });
+ }
+ },
+
+ // 添加返回首页的函数
+ navigateBack: function() {
+ wx.showModal({
+ title: '确认返回',
+ content: '返回将丢失当前已选择的策略,确定返回吗?',
+ success: (res) => {
+ if (res.confirm) {
+ wx.navigateBack();
+ }
+ }
+ });
+ },
+
+ preventBubble: function(e) {
+ // 阻止冒泡,防止点击内容区域关闭模态框
+ return;
+ },
+
+ // 提前结束,直接查看结果
+ finishEarly: function() {
+ if (this.data.selectedStrategies.length > 0) {
+ wx.showModal({
+ title: '确认完成',
+ content: '确定结束当前决策过程,直接查看结果吗?',
+ success: (res) => {
+ if (res.confirm) {
+ this.navigateToResults();
+ }
+ }
+ });
+ } else {
+ wx.showToast({
+ title: '请至少选择一个策略',
+ icon: 'none'
+ });
+ }
+ },
+
+ // 跳转到结果页面的统一方法
+ navigateToResults: function() {
+ wx.navigateTo({
+ url: '/pages/result/result',
+ success: () => {
+ console.log('跳转到结果页面');
+ // 跳转成功后重置处理状态
+ this.setData({
+ isProcessing: false
+ });
+ },
+ fail: (err) => {
+ console.error('跳转失败', err);
+ wx.showToast({
+ title: '跳转失败,请重试',
+ icon: 'none'
+ });
+ this.setData({
+ isProcessing: false
+ });
+ }
+ });
+ },
+
+ // 生命周期函数
+ onShareAppMessage: function() {
+ return {
+ title: '边区危机应对策略小游戏',
+ path: '/pages/index/index',
+ imageUrl: '/images/share-img.jpg' // 需要提供分享图片
+ };
+ },
+
+ // 页面卸载时清理
+ onUnload: function() {
+ // 取消可能存在的定时器
+ if (this.navigateTimer) {
+ clearTimeout(this.navigateTimer);
+ }
+ }
+})
\ No newline at end of file
diff --git a/pages/strategy/strategy.json b/pages/strategy/strategy.json
new file mode 100644
index 0000000..67c1c89
--- /dev/null
+++ b/pages/strategy/strategy.json
@@ -0,0 +1,6 @@
+{
+ "usingComponents": {
+ "history-modal": "/components/HistoryModal/HistoryModal"
+ },
+ "navigationBarTitleText": "边币战争 - 策略选择"
+}
\ No newline at end of file
diff --git a/pages/strategy/strategy.wxml b/pages/strategy/strategy.wxml
new file mode 100644
index 0000000..3ef5b52
--- /dev/null
+++ b/pages/strategy/strategy.wxml
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已选择的策略
+
+
+ 第{{item.round}}轮
+ {{item.strategy.title}}
+
+
+
+
+
+ {{roundTitle}}
+
+ 选择一个适用于当前危机的策略,不可选择已使用过的策略
+
+
+
+ 当前事件没有可用的应对策略,请返回选择其他事件。
+
+
+
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.description}}
+ 不适用于当前危机
+ 已经使用
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.description}}
+ 不适用于当前危机
+ 已经使用
+
+
+
+
+
+
+
+
+ {{item.title}}
+ {{item.description}}
+ 不适用于当前危机
+ 已经使用
+
+
+
+
+
+
+ 返回事件选择
+ 查看最终结果
+
+
+
+
+
+
+
+ {{currentHistoryCase.title}}
+
+ {{currentHistoryCase.description}}
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/strategy/strategy.wxss b/pages/strategy/strategy.wxss
new file mode 100644
index 0000000..2d3193a
--- /dev/null
+++ b/pages/strategy/strategy.wxss
@@ -0,0 +1,625 @@
+/**strategy.wxss**/
+.container {
+ padding: 30rpx;
+ min-height: 100vh;
+}
+
+.vintage-bg {
+ background-color: #f8f6f1;
+ background-image: url('data:image/png;base64,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');
+ position: relative;
+ overflow-x: hidden;
+}
+
+/* 添加页面切换动画 */
+.page-transition {
+ animation: fadeIn 0.5s ease-in-out;
+}
+
+@keyframes fadeIn {
+ from { opacity: 0; }
+ to { opacity: 1; }
+}
+
+.event-header {
+ margin-bottom: 30rpx;
+ padding: 20rpx;
+ border-radius: 10rpx;
+ background-color: #fff;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ animation: slideDown 0.5s ease-out;
+ transition: transform 0.3s ease;
+}
+
+.event-header:active {
+ transform: scale(0.98);
+}
+
+@keyframes slideDown {
+ from {
+ transform: translateY(-30rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+.event-title {
+ font-size: 36rpx;
+ font-weight: bold;
+ margin-bottom: 15rpx;
+ color: #333;
+}
+
+.event-desc {
+ font-size: 28rpx;
+ color: #666;
+ margin-bottom: 15rpx;
+ line-height: 1.5;
+}
+
+.event-impact {
+ font-size: 26rpx;
+ color: #d9534f;
+ margin-bottom: 15rpx;
+}
+
+.level-indicator {
+ display: flex;
+ align-items: center;
+}
+
+.level-dots {
+ display: flex;
+ margin-left: 10rpx;
+}
+
+.level-dot {
+ width: 20rpx;
+ height: 20rpx;
+ border-radius: 50%;
+ background-color: #ddd;
+ margin-right: 5rpx;
+ transition: background-color 0.5s ease;
+}
+
+.level-dot.active {
+ background-color: #d9534f;
+ animation: pulseDot 2s infinite;
+}
+
+@keyframes pulseDot {
+ 0% { opacity: 1; }
+ 50% { opacity: 0.6; }
+ 100% { opacity: 1; }
+}
+
+.section-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ margin: 20rpx 0;
+ color: #333;
+ position: relative;
+ padding-bottom: 10rpx;
+}
+
+.section-title::after {
+ content: '';
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ width: 60rpx;
+ height: 4rpx;
+ background-color: #5cb85c;
+ transition: width 0.3s ease;
+}
+
+.section-title:hover::after {
+ width: 120rpx;
+}
+
+.strategy-category {
+ margin-bottom: 40rpx;
+ animation: fadeInUp 0.6s ease-out;
+ animation-fill-mode: both;
+}
+
+.strategy-category:nth-child(2) {
+ animation-delay: 0.2s;
+}
+
+.strategy-category:nth-child(3) {
+ animation-delay: 0.4s;
+}
+
+@keyframes fadeInUp {
+ from {
+ transform: translateY(20rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateY(0);
+ opacity: 1;
+ }
+}
+
+.category-header {
+ display: flex;
+ align-items: center;
+ margin-bottom: 15rpx;
+}
+
+.category-icon {
+ width: 40rpx;
+ height: 40rpx;
+ margin-right: 10rpx;
+ border-radius: 50%;
+ transition: transform 0.3s ease;
+}
+
+.category-header:hover .category-icon {
+ transform: scale(1.2);
+}
+
+.economic-icon {
+ background-color: #5bc0de;
+}
+
+.admin-icon {
+ background-color: #f0ad4e;
+}
+
+.mob-icon {
+ background-color: #5cb85c;
+}
+
+.category-title {
+ font-size: 30rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.strategy-list {
+ display: flex;
+ flex-direction: column;
+ gap: 20rpx;
+}
+
+.strategy-item {
+ position: relative;
+ padding: 20rpx;
+ border-radius: 10rpx;
+ background-color: #fff;
+ transition: all 0.3s;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ border-left: 8rpx solid transparent;
+ transform-origin: center;
+}
+
+.strategy-item.disabled {
+ opacity: 0.6;
+ background-color: #f5f5f5;
+ cursor: not-allowed;
+ color: #999;
+}
+
+.strategy-item.used {
+ opacity: 0.6;
+ border-left-color: #999;
+ background-color: #f5f5f5;
+}
+
+/* 非禁用状态下的策略项高亮效果 */
+.strategy-item:not(.disabled):not(.used) {
+ background-color: #fff;
+ border-left-color: #5cb85c;
+ color: #333;
+ opacity: 1;
+ animation: pulse 2s infinite;
+}
+
+@keyframes pulse {
+ 0% {
+ box-shadow: 0 0 0 0 rgba(92, 184, 92, 0.4);
+ }
+ 70% {
+ box-shadow: 0 0 0 6rpx rgba(92, 184, 92, 0);
+ }
+ 100% {
+ box-shadow: 0 0 0 0 rgba(92, 184, 92, 0);
+ }
+}
+
+.strategy-item:not(.disabled):not(.used):active {
+ transform: scale(0.98);
+ background-color: #f9f9f9;
+}
+
+.strategy-title {
+ font-size: 30rpx;
+ font-weight: bold;
+ margin-bottom: 10rpx;
+ color: inherit;
+}
+
+.strategy-desc {
+ font-size: 26rpx;
+ line-height: 1.5;
+ color: inherit;
+ margin-bottom: 15rpx;
+}
+
+.not-applicable, .already-used {
+ font-size: 24rpx;
+ padding: 4rpx 10rpx;
+ border-radius: 4rpx;
+ display: inline-block;
+ margin-top: 10rpx;
+}
+
+.not-applicable {
+ background-color: #f8d7da;
+ color: #721c24;
+}
+
+.already-used {
+ background-color: #d1ecf1;
+ color: #0c5460;
+}
+
+.selected-strategies {
+ margin-bottom: 30rpx;
+ padding: 20rpx;
+ border-radius: 10rpx;
+ background-color: #fff;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+ animation: slideIn 0.5s ease-out;
+}
+
+@keyframes slideIn {
+ from {
+ transform: translateX(-30rpx);
+ opacity: 0;
+ }
+ to {
+ transform: translateX(0);
+ opacity: 1;
+ }
+}
+
+.strategies-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 15rpx;
+}
+
+.selected-strategy-item {
+ background-color: #f0f8ff;
+ border-radius: 8rpx;
+ padding: 15rpx;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ min-width: 150rpx;
+ transition: all 0.3s ease;
+ animation: popIn 0.5s ease-out;
+ box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+.selected-strategy-item:hover {
+ transform: translateY(-5rpx);
+ box-shadow: 0 5rpx 15rpx rgba(0, 0, 0, 0.1);
+}
+
+@keyframes popIn {
+ 0% {
+ transform: scale(0.8);
+ opacity: 0;
+ }
+ 70% {
+ transform: scale(1.1);
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 1;
+ }
+}
+
+.round-label {
+ font-size: 22rpx;
+ color: #666;
+ margin-bottom: 5rpx;
+ background-color: #f5f5f5;
+ padding: 2rpx 8rpx;
+ border-radius: 10rpx;
+}
+
+.strategy-name {
+ font-size: 26rpx;
+ color: #333;
+ text-align: center;
+ font-weight: bold;
+}
+
+.action-buttons {
+ display: flex;
+ justify-content: space-between;
+ margin-top: 40rpx;
+ padding: 20rpx 0;
+ animation: fadeInUp 0.5s ease-out;
+ animation-delay: 0.8s;
+ animation-fill-mode: both;
+}
+
+.back-btn, .finish-btn {
+ padding: 15rpx 30rpx;
+ border-radius: 50rpx;
+ font-size: 28rpx;
+ text-align: center;
+ transition: all 0.3s ease;
+}
+
+.back-btn {
+ background-color: #f8f9fa;
+ color: #6c757d;
+ border: 1rpx solid #dee2e6;
+}
+
+.back-btn:active {
+ background-color: #e9ecef;
+ transform: scale(0.98);
+}
+
+.finish-btn {
+ background-color: #5cb85c;
+ color: white;
+ position: relative;
+ overflow: hidden;
+}
+
+.finish-btn:active {
+ background-color: #4cae4c;
+ transform: scale(0.98);
+}
+
+.finish-btn::after {
+ content: '';
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ width: 5rpx;
+ height: 5rpx;
+ background: rgba(255, 255, 255, 0.5);
+ opacity: 0;
+ border-radius: 100%;
+ transform: scale(1, 1) translate(-50%);
+ transform-origin: 50% 50%;
+}
+
+.finish-btn:active::after {
+ animation: ripple 1s ease-out;
+}
+
+@keyframes ripple {
+ 0% {
+ transform: scale(0, 0);
+ opacity: 0.5;
+ }
+ 100% {
+ transform: scale(20, 20);
+ opacity: 0;
+ }
+}
+
+/* 模态框样式 */
+.modal-mask {
+ position: fixed;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: rgba(0, 0, 0, 0.6);
+ z-index: 999;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ animation: fadeIn 0.3s ease;
+}
+
+.modal-content {
+ width: 85%;
+ background: #fff;
+ border-radius: 10rpx;
+ overflow: hidden;
+ max-height: 90vh;
+ display: flex;
+ flex-direction: column;
+ animation: scaleIn 0.3s ease;
+ transform-origin: center;
+}
+
+@keyframes scaleIn {
+ 0% {
+ transform: scale(0.9);
+ opacity: 0;
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 1;
+ }
+}
+
+.modal-header {
+ padding: 20rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ border-bottom: 1rpx solid #eee;
+ background-color: #f5f5f5;
+}
+
+.modal-title {
+ font-size: 32rpx;
+ font-weight: bold;
+ color: #333;
+}
+
+.modal-close {
+ font-size: 40rpx;
+ color: #999;
+ cursor: pointer;
+ transition: all 0.3s ease;
+ width: 50rpx;
+ height: 50rpx;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ border-radius: 50%;
+}
+
+.modal-close:hover {
+ background-color: #f5f5f5;
+ color: #666;
+}
+
+.modal-body {
+ padding: 30rpx;
+ max-height: 60vh;
+ overflow-y: auto;
+}
+
+.case-title {
+ font-size: 30rpx;
+ font-weight: bold;
+ margin-bottom: 20rpx;
+ color: #333;
+ border-left: 4rpx solid #5cb85c;
+ padding-left: 15rpx;
+}
+
+.case-image {
+ width: 100%;
+ height: 300rpx;
+ background-color: #f8f9fa;
+ margin-bottom: 20rpx;
+ border-radius: 8rpx;
+ background-image: url('https://placeholder.pics/svg/400x150/DEDEDE/555555/历史案例');
+ background-size: cover;
+ background-position: center;
+ transition: transform 0.5s ease;
+ box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.1);
+}
+
+.case-image:hover {
+ transform: scale(1.02);
+}
+
+.case-desc {
+ font-size: 28rpx;
+ line-height: 1.6;
+ color: #666;
+ text-indent: 2em;
+}
+
+.modal-footer {
+ padding: 20rpx;
+ display: flex;
+ justify-content: flex-end;
+ border-top: 1rpx solid #eee;
+ background-color: #f5f5f5;
+}
+
+.btn {
+ padding: 15rpx 30rpx;
+ border-radius: 50rpx;
+ font-size: 28rpx;
+ background-color: #5cb85c;
+ color: white;
+ text-align: center;
+ transition: all 0.3s ease;
+ position: relative;
+ overflow: hidden;
+}
+
+.btn:active {
+ transform: scale(0.98);
+ background-color: #4cae4c;
+}
+
+/* 加载状态 */
+.loading-container {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 100rpx;
+ margin: 20rpx 0;
+}
+
+.loading-spinner {
+ width: 50rpx;
+ height: 50rpx;
+ border: 4rpx solid rgba(0, 0, 0, 0.1);
+ border-left-color: #5cb85c;
+ border-radius: 50%;
+ animation: spin 1s linear infinite;
+}
+
+@keyframes spin {
+ to { transform: rotate(360deg); }
+}
+
+/* 提示性样式 */
+.tip-container {
+ margin: 20rpx 0;
+ padding: 15rpx;
+ background-color: #fff3cd;
+ border-left: 4rpx solid #ffc107;
+ border-radius: 4rpx;
+ font-size: 26rpx;
+ color: #856404;
+ animation: fadeIn 0.5s ease-in-out;
+}
+
+.round-indicator {
+ display: flex;
+ justify-content: center;
+ margin: 20rpx 0;
+ padding: 15rpx;
+ background-color: rgba(255, 255, 255, 0.8);
+ border-radius: 20rpx;
+ box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
+}
+
+.round-dot {
+ width: 20rpx;
+ height: 20rpx;
+ border-radius: 50%;
+ background-color: #ddd;
+ margin: 0 10rpx;
+ transition: all 0.3s ease;
+}
+
+.round-dot.active {
+ background-color: #5cb85c;
+ transform: scale(1.2);
+ box-shadow: 0 0 8rpx rgba(92, 184, 92, 0.5);
+}
+
+.round-dot.completed {
+ background-color: #28a745;
+}
+
+/* 策略选择提示文字 */
+.selection-help {
+ font-size: 24rpx;
+ color: #6c757d;
+ text-align: center;
+ margin: 10rpx 0 30rpx;
+ font-style: italic;
+ animation: fadeIn 0.8s ease-in-out;
+ background-color: rgba(255, 255, 255, 0.7);
+ padding: 10rpx;
+ border-radius: 20rpx;
+}
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..66be015
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,59 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "setting": {
+ "bundle": false,
+ "userConfirmedBundleSwitch": false,
+ "urlCheck": true,
+ "scopeDataCheck": false,
+ "coverView": true,
+ "es6": true,
+ "postcss": true,
+ "compileHotReLoad": false,
+ "lazyloadPlaceholderEnable": false,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "autoAudits": false,
+ "newFeature": false,
+ "uglifyFileName": false,
+ "uploadWithSourceMap": true,
+ "useIsolateContext": true,
+ "nodeModules": false,
+ "enhance": true,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "showShadowRootInWxmlPanel": true,
+ "packNpmManually": false,
+ "enableEngineNative": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true,
+ "showES6CompileOption": false,
+ "minifyWXML": true,
+ "compileWorklet": false,
+ "localPlugins": false,
+ "disableUseStrict": false,
+ "useCompilerPlugins": false,
+ "condition": false,
+ "swc": false,
+ "disableSWC": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ }
+ },
+ "compileType": "miniprogram",
+ "libVersion": "3.8.3",
+ "appid": "wxe347c18d44e9073c",
+ "projectname": "边币战争",
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ },
+ "simulatorPluginLibVersion": {}
+}
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
new file mode 100644
index 0000000..7073b3a
--- /dev/null
+++ b/project.private.config.json
@@ -0,0 +1,24 @@
+{
+ "libVersion": "3.8.3",
+ "projectname": "%E8%BE%B9%E5%B8%81%E6%88%98%E4%BA%893",
+ "condition": {},
+ "setting": {
+ "urlCheck": true,
+ "coverView": true,
+ "lazyloadPlaceholderEnable": false,
+ "skylineRenderEnable": false,
+ "preloadBackgroundData": false,
+ "autoAudits": false,
+ "useApiHook": true,
+ "useApiHostProcess": true,
+ "showShadowRootInWxmlPanel": true,
+ "useStaticServer": false,
+ "useLanDebug": false,
+ "showES6CompileOption": false,
+ "compileHotReLoad": true,
+ "checkInvalidKey": true,
+ "ignoreDevUnusedFiles": true,
+ "bigPackageSizeSupport": false,
+ "useIsolateContext": true
+ }
+}
\ No newline at end of file
diff --git a/sitemap.json b/sitemap.json
new file mode 100644
index 0000000..7f0b5db
--- /dev/null
+++ b/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "边币战争小程序的sitemap文件",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/内容.md b/内容.md
new file mode 100644
index 0000000..2ddad0b
--- /dev/null
+++ b/内容.md
@@ -0,0 +1,166 @@
+# 边区危机应对策略游戏内容详解
+
+## 一、游戏背景
+
+本游戏模拟抗日战争时期(1937-1945年)中国共产党领导的抗日根据地在面临各种经济危机时的决策过程。在艰苦的战争环境下,根据地面临敌人封锁、伪币冲击、物资短缺和汇率波动等多重经济挑战。玩家将扮演根据地领导者,运用经济手段、行政措施和群众动员三大类策略,应对不同类型的经济危机。
+
+## 二、游戏流程
+
+1. **选择危机事件**:在首页选择面临的经济危机类型
+2. **多轮策略选择**:
+ - 第一轮:初期应对 - 选择最紧急的措施
+ - 第二轮:中期调整 - 加强应对效果
+ - 第三轮:后期加强 - 巩固已有成果
+3. **查看历史案例**:每选择一个策略后,会显示相关历史案例
+4. **查看结果评估**:完成策略选择后,系统评估决策效果并展示得分
+
+## 三、危机事件类型
+
+### 1. 伪币冲击
+- **初级事件**:敌方在根据地周边地区投放少量伪造边币,市场上开始出现伪币流通现象
+ - 影响:市场信心轻微下降,边币贬值风险较小
+ - 危机等级:★
+
+- **中级事件**:敌方组织大规模伪造边币活动,伪币在市场上广泛流通
+ - 影响:市场混乱,边币信任度下降,物价波动明显
+ - 危机等级:★★
+
+- **高级事件**:敌方使用先进技术大量制造高仿真伪币,并通过多种渠道投放到根据地
+ - 影响:边币信任危机,民众拒绝使用边币,市场交易困难
+ - 危机等级:★★★
+
+### 2. 物资短缺
+- **初级事件**:敌方开始对根据地实行经济封锁,部分生活必需品供应减少
+ - 影响:生活必需品价格上涨,民众生活受到轻微影响
+ - 危机等级:★
+
+- **中级事件**:敌方加强封锁,生活必需品和生产材料严重不足
+ - 影响:物价飞涨,生产活动受阻,民众生活困难
+ - 危机等级:★★
+
+- **高级事件**:敌方全面封锁,同时破坏根据地生产设施,物资极度匮乏
+ - 影响:严重的物资危机,生产停滞,民众基本生活难以保障
+ - 危机等级:★★★
+
+### 3. 汇率波动
+- **初级事件**:国统区法币贬值,引起边币汇率小幅波动
+ - 影响:贸易活动受到轻微影响,市场信心略有下降
+ - 危机等级:★
+
+- **中级事件**:国际环境变化导致各类货币剧烈波动,边币汇率不稳
+ - 影响:外部贸易困难,物价波动明显,经济活动受阻
+ - 危机等级:★★
+
+- **高级事件**:敌方操纵汇率市场,联合投机商大规模做空边币
+ - 影响:边币大幅贬值,通货膨胀严重,市场混乱
+ - 危机等级:★★★
+
+## 四、策略选择
+
+### 1. 经济手段
+
+#### 调整边币兑换率
+- **描述**:通过合理调整边币与法币的兑换率,稳定币值
+- **适用事件**:汇率波动、伪币冲击
+- **历史案例**:1943年陕甘宁边区调整币值案例
+ - 1943年初,陕甘宁边区政府通过调整边币与法币兑换率,有效应对了币值波动
+
+#### 紧缩货币发行
+- **描述**:减少边币发行量,提高现有边币价值
+- **适用事件**:汇率波动、伪币冲击、物资短缺
+- **历史案例**:1944年某根据地紧缩货币政策
+ - 1944年,某根据地实施紧缩货币政策,有效控制了通货膨胀
+
+#### 建立物资储备
+- **描述**:组织经济战备,储备重要物资以稳定物价
+- **适用事件**:物资短缺、汇率波动
+- **历史案例**:1942年晋察冀边区物资储备计划
+ - 1942年,晋察冀边区政府建立战略物资储备,有效应对了国民党经济封锁
+
+### 2. 行政手段
+
+#### 查抄伪币窝点
+- **描述**:派出工作组和武装力量,打击伪造边币的犯罪活动
+- **适用事件**:伪币冲击
+- **历史案例**:1941年晋冀鲁豫边区打击伪币行动
+ - 1941年,晋冀鲁豫边区政府开展了大规模打击伪币活动,摧毁多个伪币制造点
+
+#### 实施物资配给
+- **描述**:对关键物资实行统一配给制度,确保公平分配
+- **适用事件**:物资短缺
+- **历史案例**:1945年山东解放区物资配给制度
+ - 1945年,山东解放区实施关键物资配给制度,保障了军民基本生活需求
+
+#### 设立边币管理委员会
+- **描述**:成立专门机构,统一协调货币政策和币值稳定措施
+- **适用事件**:伪币冲击、汇率波动、物资短缺
+- **历史案例**:1940年陕甘宁边区货币管理委员会
+ - 1940年,陕甘宁边区成立货币管理委员会,统一协调金融政策,保障了经济发展
+
+### 3. 群众动员
+
+#### 开展拒用伪币宣传
+- **描述**:通过各种渠道向民众普及伪币识别知识,动员群众拒绝使用伪币
+- **适用事件**:伪币冲击
+- **历史案例**:1943年冀中群众性反伪币运动
+ - 1943年,冀中地区开展了声势浩大的反伪币宣传运动,有效减少了伪币流通
+
+#### 组织互助合作
+- **描述**:发动群众组建互助组和合作社,共同应对物资短缺
+- **适用事件**:物资短缺
+- **历史案例**:1942年抗日民主根据地互助合作运动
+ - 1942年,多个抗日根据地开展互助合作运动,有效缓解了物资短缺问题
+
+#### 开展爱用边币运动
+- **描述**:动员群众积极使用边币,增强对根据地货币的信心
+- **适用事件**:汇率波动、伪币冲击
+- **历史案例**:1944年晋冀鲁豫边区爱用边币运动
+ - 1944年,晋冀鲁豫边区开展爱用边币运动,提高了边币的公信力和使用范围
+
+## 五、结果评估系统
+
+### 评分标准
+1. **策略适用性**:所选策略是否适用于当前危机类型
+2. **策略组合**:是否采用了多种类型的策略(经济、行政、群众动员)
+3. **策略时机**:某些策略在危机早期使用效果更佳
+4. **历史借鉴**:策略是否符合历史经验
+
+### 结果等级
+1. **完美应对**(90-100分)
+ - 选择了最适合的策略组合,完全解决危机
+ - 历史经验:类似决策在抗战时期取得了显著成效
+
+2. **有效应对**(75-89分)
+ - 选择了较为合适的策略组合,基本解决危机
+ - 历史经验:类似决策在抗战时期取得了良好效果,但仍有改进空间
+
+3. **基本应对**(60-74分)
+ - 选择的策略组合部分适用,减轻了危机但未彻底解决
+ - 历史经验:类似决策在抗战时期取得了部分成效,但面临较多挑战
+
+4. **应对失败**(0-59分)
+ - 选择的策略组合不适用或效果有限,未能解决危机
+ - 历史经验:类似决策在抗战时期曾导致危机加剧或产生新问题
+
+## 六、历史经验总结
+
+### 伪币冲击应对经验
+1. 结合经济手段和行政措施是应对伪币冲击的有效方式
+2. 群众动员对于减少伪币流通起到关键作用
+3. 加强金融监管和提高币值稳定性是长期解决方案
+
+### 物资短缺应对经验
+1. 建立物资储备是应对短期短缺的有效手段
+2. 群众互助合作可缓解物资分配不均问题
+3. 发展自给自足的经济模式是根本解决之道
+
+### 汇率波动应对经验
+1. 及时调整币值是稳定汇率的直接手段
+2. 加强对市场的管理监督有助于防止投机炒作
+3. 增强民众对本币信心是稳定币值的基础
+
+## 七、历史背景资料
+
+抗日战争时期,中国共产党领导的抗日根据地面临极其复杂的经济环境。根据地经济建设实行"公私兼顾、军民兼顾、统筹兼顾"的方针,在极端困难的条件下,通过灵活多样的经济政策,有效应对了各种经济危机。
+
+这些宝贵经验不仅支撑了抗战的胜利,也为中国共产党领导经济建设积累了重要实践,形成了在复杂困难环境下进行经济治理的独特智慧,体现了中国共产党实事求是、群众路线和自力更生的工作方法。