mirror of
https://github.com/ChuXunYu/warOfCoins.git
synced 2026-01-30 16:11:26 +00:00
Initial commit
This commit is contained in:
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
103
README.md
Normal file
103
README.md
Normal file
@@ -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 边区危机应对策略小游戏 - 历史教育游戏项目
|
||||
12
app.js
Normal file
12
app.js
Normal file
@@ -0,0 +1,12 @@
|
||||
// app.js
|
||||
App({
|
||||
onLaunch: function () {
|
||||
console.log('应用启动');
|
||||
},
|
||||
globalData: {
|
||||
selectedEvent: null,
|
||||
selectedStrategies: [],
|
||||
currentRound: 0,
|
||||
maxRounds: 3
|
||||
}
|
||||
})
|
||||
15
app.json
Normal file
15
app.json
Normal file
@@ -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"
|
||||
}
|
||||
48
app.wxss
Normal file
48
app.wxss
Normal file
@@ -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");
|
||||
}
|
||||
35
components/HistoryModal/HistoryModal.js
Normal file
35
components/HistoryModal/HistoryModal.js
Normal file
@@ -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) {
|
||||
// 阻止冒泡,防止点击内容区域关闭模态框
|
||||
}
|
||||
}
|
||||
})
|
||||
4
components/HistoryModal/HistoryModal.json
Normal file
4
components/HistoryModal/HistoryModal.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"component": true,
|
||||
"usingComponents": {}
|
||||
}
|
||||
17
components/HistoryModal/HistoryModal.wxml
Normal file
17
components/HistoryModal/HistoryModal.wxml
Normal file
@@ -0,0 +1,17 @@
|
||||
<!--components/HistoryModal/HistoryModal.wxml-->
|
||||
<view class="modal-mask" wx:if="{{show}}" bindtap="closeModal">
|
||||
<view class="modal-content" catchtap="preventBubble">
|
||||
<view class="modal-header">
|
||||
<text class="modal-title">历史案例参考</text>
|
||||
<view class="modal-close" bindtap="closeModal">×</view>
|
||||
</view>
|
||||
<view class="modal-body">
|
||||
<view class="case-title">{{historyCase.title}}</view>
|
||||
<view class="case-image"></view>
|
||||
<view class="case-desc">{{historyCase.description}}</view>
|
||||
</view>
|
||||
<view class="modal-footer">
|
||||
<view class="btn" bindtap="closeModal">了解了</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
111
components/HistoryModal/HistoryModal.wxss
Normal file
111
components/HistoryModal/HistoryModal.wxss
Normal file
@@ -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;
|
||||
}
|
||||
74
data/crisisEvents.json
Normal file
74
data/crisisEvents.json
Normal file
@@ -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": "边币信心崩溃,边区经济面临严重危机"
|
||||
}
|
||||
]
|
||||
98
data/strategies.json
Normal file
98
data/strategies.json
Normal file
@@ -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年,晋冀鲁豫边区开展了广泛的爱用边币运动。政府机关带头使用边币发放工资和采购物资;商会组织商户签订自觉使用边币公约;学校教育学生了解边币的重要性。通过这场运动,边币的使用范围不断扩大,民众对边币的信心显著增强,有力抵制了敌人破坏边区金融的图谋,为根据地经济稳定和军事斗争提供了有力支持。"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
199
pages/index/index.js
Normal file
199
pages/index/index.js
Normal file
@@ -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'
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
4
pages/index/index.json
Normal file
4
pages/index/index.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "边币战争 - 事件选择"
|
||||
}
|
||||
58
pages/index/index.wxml
Normal file
58
pages/index/index.wxml
Normal file
@@ -0,0 +1,58 @@
|
||||
<!--index.wxml-->
|
||||
<view class="container vintage-bg">
|
||||
<view class="header">
|
||||
<view class="logo"></view>
|
||||
<view class="title-box">
|
||||
<text class="main-title">边币战争</text>
|
||||
<text class="sub-title">重温根据地金融斗争历史</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="intro-card card">
|
||||
<text class="intro-text">欢迎来到"边币战争",您将扮演边区政府决策者,应对各种货币危机,选择最合适的策略保卫边币,维护根据地经济安全。</text>
|
||||
</view>
|
||||
|
||||
<view class="section-title">选择危机事件</view>
|
||||
|
||||
<view class="event-list">
|
||||
<view class="event-type">
|
||||
<view class="type-title">伪币冲击</view>
|
||||
<view class="events">
|
||||
<view wx:for="{{crisisEvents}}" wx:key="id" wx:if="{{item.type === 'fakeCurrency'}}"
|
||||
class="event-card card level-{{item.level}}" bindtap="handleEventSelect" data-id="{{item.id}}">
|
||||
<view class="event-title">{{item.title}}</view>
|
||||
<view class="event-desc">{{item.description}}</view>
|
||||
<view class="event-impact">影响:{{item.impact}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="event-type">
|
||||
<view class="type-title">物资短缺</view>
|
||||
<view class="events">
|
||||
<view wx:for="{{crisisEvents}}" wx:key="id" wx:if="{{item.type === 'shortage'}}"
|
||||
class="event-card card level-{{item.level}}" bindtap="handleEventSelect" data-id="{{item.id}}">
|
||||
<view class="event-title">{{item.title}}</view>
|
||||
<view class="event-desc">{{item.description}}</view>
|
||||
<view class="event-impact">影响:{{item.impact}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="event-type">
|
||||
<view class="type-title">汇率波动</view>
|
||||
<view class="events">
|
||||
<view wx:for="{{crisisEvents}}" wx:key="id" wx:if="{{item.type === 'exchange'}}"
|
||||
class="event-card card level-{{item.level}}" bindtap="handleEventSelect" data-id="{{item.id}}">
|
||||
<view class="event-title">{{item.title}}</view>
|
||||
<view class="event-desc">{{item.description}}</view>
|
||||
<view class="event-impact">影响:{{item.impact}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="footer">
|
||||
<text class="footer-text">根据史实改编,仅供学习参考</text>
|
||||
</view>
|
||||
</view>
|
||||
151
pages/index/index.wxss
Normal file
151
pages/index/index.wxss
Normal file
@@ -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;
|
||||
}
|
||||
252
pages/result/result.js
Normal file
252
pages/result/result.js
Normal file
@@ -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' // 需要提供分享图片
|
||||
};
|
||||
}
|
||||
})
|
||||
4
pages/result/result.json
Normal file
4
pages/result/result.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"usingComponents": {},
|
||||
"navigationBarTitleText": "边币战争 - 应对结果"
|
||||
}
|
||||
83
pages/result/result.wxml
Normal file
83
pages/result/result.wxml
Normal file
@@ -0,0 +1,83 @@
|
||||
<!--result.wxml-->
|
||||
<view class="container vintage-bg page-transition">
|
||||
<!-- 加载状态 -->
|
||||
<view class="loading-overlay" wx:if="{{isLoading}}">
|
||||
<view class="loading-spinner"></view>
|
||||
<view class="loading-text">分析战略成效...</view>
|
||||
</view>
|
||||
|
||||
<view class="content-area" wx:if="{{!isLoading}}">
|
||||
<view class="result-header">
|
||||
<view class="result-title">应对结果</view>
|
||||
<view class="event-info">
|
||||
<view class="event-title">危机事件:{{event.title}}</view>
|
||||
<view class="event-level">
|
||||
危机等级:
|
||||
<view class="level-dots">
|
||||
<view class="level-dot {{event.level >= 1 ? 'active' : ''}}"></view>
|
||||
<view class="level-dot {{event.level >= 2 ? 'active' : ''}}"></view>
|
||||
<view class="level-dot {{event.level >= 3 ? 'active' : ''}}"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="result-card card">
|
||||
<view class="result-image {{result.imageClass}}"></view>
|
||||
<view class="result-content">
|
||||
<view class="result-outcome">{{result.title}}</view>
|
||||
<view class="result-score">
|
||||
效果评估:<text class="score-text">{{result.scoreText}}</text>
|
||||
<view class="score-value">
|
||||
<text class="score-number">{{result.score}}</text>/100
|
||||
</view>
|
||||
</view>
|
||||
<view class="result-description">{{result.description}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="strategies-summary">
|
||||
<view class="summary-title">您采取的策略</view>
|
||||
<view class="strategies-list">
|
||||
<view wx:for="{{selectedStrategies}}" wx:key="index" class="strategy-item card">
|
||||
<view class="strategy-round">第{{item.round}}轮</view>
|
||||
<view class="strategy-title">{{item.strategy.title}}</view>
|
||||
<view class="strategy-desc">{{item.strategy.description}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="historical-lesson">
|
||||
<view class="lesson-title">历史经验总结</view>
|
||||
|
||||
<!-- 动态生成的历史教训 -->
|
||||
<view class="lessons-list">
|
||||
<view wx:for="{{historyLessons}}" wx:key="index" class="lesson-card card">
|
||||
<view class="lesson-card-title">{{item.title}}</view>
|
||||
<view class="lesson-card-content">{{item.content}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="lesson-content card">
|
||||
面对{{event.title}}类型的危机,历史上的根据地通常采取综合策略,既有经济手段,也有行政举措,更注重发动群众。应对此类危机的关键在于迅速行动、多管齐下,特别是在危机等级较高时,需要各种措施协同配合。在实际历史中,那些成功渡过经济危机的根据地,往往能够灵活运用各种资源,并且得到人民的广泛支持。
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="action-buttons">
|
||||
<view class="btn-row">
|
||||
<view class="btn btn-outline" bindtap="handleRestart">重新应对</view>
|
||||
<view class="btn" bindtap="handleBackToHome">返回首页</view>
|
||||
</view>
|
||||
<view class="share-btn" bindtap="handleShare">
|
||||
<image class="share-icon" src="/images/share.png" mode="aspectFit"></image>
|
||||
分享结果
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 分享提示 -->
|
||||
<view class="share-tip {{showShareTip ? 'show' : ''}}" wx:if="{{showShareTip}}">
|
||||
点击右上角"..."按钮分享给好友
|
||||
<view class="share-tip-arrow"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
479
pages/result/result.wxss
Normal file
479
pages/result/result.wxss
Normal file
@@ -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);
|
||||
}
|
||||
419
pages/strategy/strategy.js
Normal file
419
pages/strategy/strategy.js
Normal file
@@ -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);
|
||||
}
|
||||
}
|
||||
})
|
||||
6
pages/strategy/strategy.json
Normal file
6
pages/strategy/strategy.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"usingComponents": {
|
||||
"history-modal": "/components/HistoryModal/HistoryModal"
|
||||
},
|
||||
"navigationBarTitleText": "边币战争 - 策略选择"
|
||||
}
|
||||
133
pages/strategy/strategy.wxml
Normal file
133
pages/strategy/strategy.wxml
Normal file
@@ -0,0 +1,133 @@
|
||||
<!--strategy.wxml-->
|
||||
<view class="container vintage-bg page-transition">
|
||||
<view class="event-header card">
|
||||
<view class="event-title">{{event.title}}</view>
|
||||
<view class="event-desc">{{event.description}}</view>
|
||||
<view class="event-impact">影响:{{event.impact}}</view>
|
||||
<view class="level-indicator">
|
||||
<text>危机等级:</text>
|
||||
<view class="level-dots">
|
||||
<view class="level-dot {{event.level >= 1 ? 'active' : ''}}"></view>
|
||||
<view class="level-dot {{event.level >= 2 ? 'active' : ''}}"></view>
|
||||
<view class="level-dot {{event.level >= 3 ? 'active' : ''}}"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 轮次指示器 -->
|
||||
<view class="round-indicator">
|
||||
<view class="round-dot {{currentRound >= 0 ? 'active' : ''}} {{currentRound > 0 ? 'completed' : ''}}"></view>
|
||||
<view class="round-dot {{currentRound >= 1 ? 'active' : ''}} {{currentRound > 1 ? 'completed' : ''}}"></view>
|
||||
<view class="round-dot {{currentRound >= 2 ? 'active' : ''}} {{currentRound > 2 ? 'completed' : ''}}"></view>
|
||||
</view>
|
||||
|
||||
<!-- 已选策略显示区域 -->
|
||||
<view class="selected-strategies" wx:if="{{selectedStrategies.length > 0}}">
|
||||
<view class="section-title">已选择的策略</view>
|
||||
<view class="strategies-list">
|
||||
<view wx:for="{{selectedStrategies}}" wx:key="index" class="selected-strategy-item">
|
||||
<view class="round-label">第{{item.round}}轮</view>
|
||||
<view class="strategy-name">{{item.strategy.title}}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="strategy-section">
|
||||
<view class="section-title">{{roundTitle}}</view>
|
||||
|
||||
<view class="selection-help">选择一个适用于当前危机的策略,不可选择已使用过的策略</view>
|
||||
|
||||
<!-- 可选策略数量提示 -->
|
||||
<view class="tip-container" wx:if="{{selectableCount === 0}}">
|
||||
当前事件没有可用的应对策略,请返回选择其他事件。
|
||||
</view>
|
||||
|
||||
<!-- 加载状态显示 -->
|
||||
<view class="loading-container" wx:if="{{isLoading}}">
|
||||
<view class="loading-spinner"></view>
|
||||
</view>
|
||||
|
||||
<view class="strategy-category" wx:if="{{!isLoading}}">
|
||||
<view class="category-header">
|
||||
<view class="category-icon economic-icon"></view>
|
||||
<view class="category-title">经济手段</view>
|
||||
</view>
|
||||
<view class="strategy-list">
|
||||
<view wx:for="{{strategies.economic}}" wx:key="id"
|
||||
class="strategy-item card {{item.applicable.indexOf(event.type) > -1 ? '' : 'disabled'}} {{strategiesUsed[item.id] ? 'used' : ''}}"
|
||||
bindtap="handleStrategySelect"
|
||||
data-type="economic" data-id="{{item.id}}"
|
||||
data-applicable="{{item.applicable.indexOf(event.type) > -1}}"
|
||||
data-used="{{strategiesUsed[item.id]}}">
|
||||
<view class="strategy-title">{{item.title}}</view>
|
||||
<view class="strategy-desc">{{item.description}}</view>
|
||||
<view wx:if="{{item.applicable.indexOf(event.type) === -1}}" class="not-applicable">不适用于当前危机</view>
|
||||
<view wx:elif="{{strategiesUsed[item.id]}}" class="already-used">已经使用</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="strategy-category" wx:if="{{!isLoading}}">
|
||||
<view class="category-header">
|
||||
<view class="category-icon admin-icon"></view>
|
||||
<view class="category-title">行政手段</view>
|
||||
</view>
|
||||
<view class="strategy-list">
|
||||
<view wx:for="{{strategies.administrative}}" wx:key="id"
|
||||
class="strategy-item card {{item.applicable.indexOf(event.type) > -1 ? '' : 'disabled'}} {{strategiesUsed[item.id] ? 'used' : ''}}"
|
||||
bindtap="handleStrategySelect"
|
||||
data-type="administrative" data-id="{{item.id}}"
|
||||
data-applicable="{{item.applicable.indexOf(event.type) > -1}}"
|
||||
data-used="{{strategiesUsed[item.id]}}">
|
||||
<view class="strategy-title">{{item.title}}</view>
|
||||
<view class="strategy-desc">{{item.description}}</view>
|
||||
<view wx:if="{{item.applicable.indexOf(event.type) === -1}}" class="not-applicable">不适用于当前危机</view>
|
||||
<view wx:elif="{{strategiesUsed[item.id]}}" class="already-used">已经使用</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="strategy-category" wx:if="{{!isLoading}}">
|
||||
<view class="category-header">
|
||||
<view class="category-icon mob-icon"></view>
|
||||
<view class="category-title">群众动员</view>
|
||||
</view>
|
||||
<view class="strategy-list">
|
||||
<view wx:for="{{strategies.mobilization}}" wx:key="id"
|
||||
class="strategy-item card {{item.applicable.indexOf(event.type) > -1 ? '' : 'disabled'}} {{strategiesUsed[item.id] ? 'used' : ''}}"
|
||||
bindtap="handleStrategySelect"
|
||||
data-type="mobilization" data-id="{{item.id}}"
|
||||
data-applicable="{{item.applicable.indexOf(event.type) > -1}}"
|
||||
data-used="{{strategiesUsed[item.id]}}">
|
||||
<view class="strategy-title">{{item.title}}</view>
|
||||
<view class="strategy-desc">{{item.description}}</view>
|
||||
<view wx:if="{{item.applicable.indexOf(event.type) === -1}}" class="not-applicable">不适用于当前危机</view>
|
||||
<view wx:elif="{{strategiesUsed[item.id]}}" class="already-used">已经使用</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="action-buttons">
|
||||
<view class="back-btn" bindtap="navigateBack">返回事件选择</view>
|
||||
<view wx:if="{{selectedStrategies.length > 0}}" class="finish-btn" bindtap="finishEarly">查看最终结果</view>
|
||||
</view>
|
||||
|
||||
<!-- 历史案例模态框 -->
|
||||
<view class="modal-mask" wx:if="{{showModal}}" catchtap="preventBubble">
|
||||
<view class="modal-content">
|
||||
<view class="modal-header">
|
||||
<text class="modal-title">历史案例参考</text>
|
||||
<view class="modal-close" catchtap="closeModal">×</view>
|
||||
</view>
|
||||
<view class="modal-body">
|
||||
<view class="case-title">{{currentHistoryCase.title}}</view>
|
||||
<view class="case-image"></view>
|
||||
<view class="case-desc">{{currentHistoryCase.description}}</view>
|
||||
</view>
|
||||
<view class="modal-footer">
|
||||
<view class="btn" catchtap="closeModal">了解了,继续</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
625
pages/strategy/strategy.wxss
Normal file
625
pages/strategy/strategy.wxss
Normal file
@@ -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;
|
||||
}
|
||||
59
project.config.json
Normal file
59
project.config.json
Normal file
@@ -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": {}
|
||||
}
|
||||
24
project.private.config.json
Normal file
24
project.private.config.json
Normal file
@@ -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
|
||||
}
|
||||
}
|
||||
7
sitemap.json
Normal file
7
sitemap.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"desc": "边币战争小程序的sitemap文件",
|
||||
"rules": [{
|
||||
"action": "allow",
|
||||
"page": "*"
|
||||
}]
|
||||
}
|
||||
166
内容.md
Normal file
166
内容.md
Normal file
@@ -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. 增强民众对本币信心是稳定币值的基础
|
||||
|
||||
## 七、历史背景资料
|
||||
|
||||
抗日战争时期,中国共产党领导的抗日根据地面临极其复杂的经济环境。根据地经济建设实行"公私兼顾、军民兼顾、统筹兼顾"的方针,在极端困难的条件下,通过灵活多样的经济政策,有效应对了各种经济危机。
|
||||
|
||||
这些宝贵经验不仅支撑了抗战的胜利,也为中国共产党领导经济建设积累了重要实践,形成了在复杂困难环境下进行经济治理的独特智慧,体现了中国共产党实事求是、群众路线和自力更生的工作方法。
|
||||
Reference in New Issue
Block a user