方块传奇1.13版本流畅版,可存档
2025-07-30 19:04:56
发布于:上海
做的最新版实在在这里装不下了,
想要来我的团队的文件里面下载正式完整版
由于作者动力不足,本游戏将停更一段时间,作者将开发新游戏
支持改编
本人自己做的游戏
第一次做游戏,有些劣质,只会用if , else
有bug必改!
希望点赞
尽管已经努力做优化了
下面是流畅版
#include<bits/stdc++.h>
#include<windows.h>
#include<time.h>
#include <tchar.h>
using namespace std;
// 全局变量定义(核心:使用全局变量追踪数量,所有场景共享)
int u = 1; // 当前使用英雄
int p = 1; // 游戏进度
int h[6] = {1,1,0,0,0,0}; // 英雄拥有状态(0-虚无,1-行者,2-杰森,3-星辰)
int m = 100; // 方块币
int s1=1, s2=1, s3=100, s4=100; // 商品剩余购买次数
int s5=1, s6=1, s7=1, s8=1; // 新增技能道具剩余购买次数
int pot = 0; // 体力药剂数量(全局唯一计数)
int atk = 0; // 攻击强化次数(全局唯一计数)
int js_p = 0; // 杰森故事进度标记
int js_l = 0; // 杰森关卡进度
// 战斗参数结构体(新增level字段存储关卡编号)
struct BattleParam {
string stage_name; // 关卡名称
string enemy_name; // 敌人名称
int enemy_hp; // 敌人血量
int player_max_hp; // 玩家最大血量
string story[5]; // 关卡剧情
int story_len; // 剧情长度
bool has_special; // 是否有特殊机制
int special_type; // 特殊机制类型
int level; // 关卡编号(用于进度计算)
};
// 新增:存档函数(保存所有全局状态变量)
void saveGame() {
ofstream fout("save.dat", ios::out);
if (fout.is_open()) {
// 保存英雄拥有状态
for (int i = 0; i < 6; i++) {
fout << h[i] << " ";
}
fout << endl;
// 保存方块币和商品次数
fout << m << endl;
fout << s1 << " " << s2 << " " << s3 << " " << s4 << endl;
fout << s5 << " " << s6 << " " << s7 << " " << s8 << endl;
// 保存道具数量
fout << pot << endl;
fout << atk << endl;
// 保存杰森故事进度
fout << js_p << endl;
fout << js_l << endl;
// 保存游戏进度和当前英雄
fout << p << endl;
fout << u << endl;
fout.close();
cout << "存档成功!文件已保存为 save.dat" << endl;
} else {
cout << "存档失败!无法创建文件" << endl;
}
Sleep(1500);
system("cls");
}
// 新增:读档函数(加载所有全局状态变量)
void loadGame() {
ifstream fin("save.dat", ios::in);
if (fin.is_open()) {
// 读取英雄拥有状态
for (int i = 0; i < 6; i++) {
fin >> h[i];
}
// 读取方块币和商品次数
fin >> m;
fin >> s1 >> s2 >> s3 >> s4;
fin >> s5 >> s6 >> s7 >> s8;
// 读取道具数量
fin >> pot;
fin >> atk;
// 读取杰森故事进度
fin >> js_p;
fin >> js_l;
// 读取游戏进度和当前英雄
fin >> p;
fin >> u;
fin.close();
cout << "读档成功!已恢复游戏状态" << endl;
} else {
cout << "读档失败!未找到存档文件 save.dat" << endl;
}
Sleep(1500);
system("cls");
}
// 战斗函数(修复核心:严格同步全局变量)
void battle(const BattleParam ¶m) {
// 选择英雄
cout << "【战前准备】请选择出战英雄 \n";
cout << "1. 虚无(已拥有) 2. 行者(已拥有) 3. 杰森(";
if (h[2] == 1) cout << "已拥有)";
else cout << "未拥有)";
cout << " 4. 星辰(";
if (h[3] == 1) cout << "已拥有)";
else cout << "未拥有)";
cout << "\n 输入数字选择:\n";
int s;
bool v = false;
while (!v) {
cin >> s;
if (s == 1 || s == 2 || (s == 3 && h[2] == 1) || (s == 4 && h[3] == 1)) {
v = true;
} else {
cout << "该英雄不可选,请重新输入:\n";
}
}
u = s;
system("cls");
// 显示剧情
cout << "【" << param.stage_name << "】\n\n";
for (int i = 0; i < param.story_len; i++) {
cout << param.story[i] << "\n";
Sleep(1200);
}
cout << "\n按任意键继续...\n";
system("pause>nul");
system("cls");
// 初始化战斗参数(本地变量仅作为显示用,实际修改全局变量)
int pm = param.player_max_hp;
int ph = pm;
int eh = param.enemy_hp;
int new_skill_used_total = 0; // 新增技能全局计数器
bool has_clone = false;
int clone_hp = 0;
int shield_turns = 0;
int ps = 0;
int dfs = 0;
int ep = 1;
int phase = 1;
int form = 1;
while (eh > 0 && ph > 0) {
int new_skill_used = 0; // 每回合新增技能计数器
// 特殊机制处理
if (param.special_type == 1 && eh < 350 && !has_clone) { // 幽影编织者分身
has_clone = true;
clone_hp = 200;
cout << param.enemy_name << "分裂出影子分身!需要先击破分身才能攻击本体!\n";
Sleep(1000);
}
if (param.special_type == 2) { // 量子守卫护盾
if (shield_turns > 0) {
shield_turns--;
cout << param.enemy_name << "处于量子护盾保护中,受到伤害减少50%!剩余" << shield_turns << "回合\n";
Sleep(800);
} else if (rand()%4 == 0) {
shield_turns = 2;
cout << param.enemy_name << "激活量子护盾!接下来2回合受到伤害减少50%!\n";
Sleep(800);
}
}
if (param.special_type == 3 && ps > 0) { // 瘟疫散播者中毒
int p_dmg = 5;
ph -= p_dmg;
cout << "你处于中毒状态,受到" << p_dmg << "点伤害!剩余" << ps << "回合\n";
ps--;
Sleep(800);
}
if (param.special_type == 4) { // 机械毁灭者防御
if (dfs > 0) {
dfs--;
if (dfs == 0) cout << param.enemy_name << "的防御状态解除!\n";
else cout << param.enemy_name << "处于防御状态,受到伤害减少!剩余" << dfs << "回合\n";
Sleep(800);
}
}
if (param.special_type == 5) { // 虚空收割者阶段
if (eh < 120 && ep == 1) {
ep = 2;
cout << "【警告】虚空收割者吸收了周围的暗影能量,进入狂暴状态!\n";
Sleep(1200);
system("cls");
}
}
if (param.special_type == 6) { // 元素主宰形态
if (eh < 600 && ep == 1) ep = 2;
if (eh < 400 && ep == 2) ep = 3;
if (eh < 200 && ep == 3) ep = 4;
}
if (param.special_type == 7) { // 混沌之源阶段
if (eh < 350 && phase == 2) phase = 3;
else if (eh < 700 && phase == 1) phase = 2;
form = (form == 1) ? 2 : 1;
if (phase >= 2) {
cout << "混沌之源切换为" << (form == 1 ? "【能量形态】" : "【物质形态】") << "\n";
Sleep(800);
}
}
// 显示战斗信息(直接显示全局变量当前值)
cout << "【战斗中】对阵 " << param.enemy_name << (has_clone ? "(分身存在)" : "") << "\n";
cout << "我方血量:" << ph << "/" << pm << "\n";
cout << param.enemy_name << " 血量:" << eh << "\n";
if (has_clone) cout << "影子分身 血量:" << clone_hp << "\n";
cout << "当前道具:体力药剂 x" << pot << " 攻击强化 x" << atk << "\n"; // 关键:显示全局实时值
cout << "请选择操作:1. 技能1 2. 技能2 3. 使用体力药剂 4. 使用攻击强化 5. 新增技能(若已购买)\n";
// 操作选择(严格校验全局变量数量)
int a;
bool av = false;
while (!av) {
cin >> a;
if (a == 3 && pot <= 0) {
cout << "体力药剂数量不足(当前x" << pot << "),请选择其他操作:\n";
} else if (a == 4 && atk <= 0) {
cout << "攻击强化次数不足(当前x" << atk << "),请选择其他操作:\n";
} else if ((a >= 1 && a <= 4) ||
(a == 5 && ((u == 1 && s5 < 1) || (u == 2 && s6 < 1) ||
(u == 3 && s7 < 1) || (u == 4 && s8 < 1)) && new_skill_used < 2 && new_skill_used_total < 2)) {
av = true;
} else if (a == 5) {
if (new_skill_used >= 2) cout << "每回合最多使用2次新增技能!\n";
else if (new_skill_used_total >= 2) cout << "本局最多使用2次新增技能!\n";
else cout << "未购买对应新增技能道具!\n";
} else {
cout << "请输入1-5选择操作:\n";
}
}
// 处理玩家行动(直接修改全局变量)
int db = 0;
bool invincible = false;
int enemy_atk_down = 0;
if (a == 3) { // 使用体力药剂(直接修改全局变量)
ph = min(ph + 50, pm);
pot--; // 核心修复:强制减少全局计数
cout << "使用体力药剂!剩余x" << pot << ",恢复50点生命值,当前血量:" << ph << "\n";
if (param.special_type == 3) ps = 0; // 解除中毒
} else if (a == 4) { // 使用攻击强化(直接修改全局变量)
db = 10;
atk--; // 核心修复:强制减少全局计数
cout << "使用攻击强化!剩余x" << atk << ",本回合伤害+10\n";
} else if (a == 5) { // 新增技能
new_skill_used++;
new_skill_used_total++;
if (u == 1) {
int dmg = 40 + (param.stage_name == "混沌奇点" ? 45 : 0);
if (has_clone) {
clone_hp -= dmg;
if (clone_hp <= 0) { clone_hp = 0; has_clone = false; cout << "击破影子分身!"; }
cout << "使用【破碎之触】!对影子分身造成 " << dmg << " 伤害\n";
} else {
eh -= dmg;
ph = min(ph + 30 + (param.stage_name == "混沌奇点" ? 40 : 0), pm);
cout << "使用【破碎之触】!对" << param.enemy_name << "造成 " << dmg << " 伤害,回血至" << ph << "\n";
}
} else if (u == 2) {
int dmg = 45 + (param.stage_name == "混沌奇点" ? 45 : 0);
if (has_clone) {
clone_hp -= dmg;
eh -= dmg * 0.5;
if (clone_hp <= 0) { clone_hp = 0; has_clone = false; cout << "击破影子分身!"; }
cout << "使用【光能聚焦】!对影子分身造成 " << dmg << " 伤害\n";
} else {
eh -= dmg;
cout << "使用【光能聚焦】!对" << param.enemy_name << "造成 " << dmg << " 伤害\n";
}
} else if (u == 3) {
int dmg = 50 + (param.stage_name == "混沌奇点" ? 45 : 0);
if (has_clone) {
clone_hp -= dmg;
if (clone_hp <= 0) { clone_hp = 0; has_clone = false; cout << "击破影子分身!"; }
cout << "使用【次元斩】!对影子分身造成 " << dmg << " 伤害\n";
} else {
eh -= dmg;
invincible = true;
cout << "使用【次元斩】!对" << param.enemy_name << "造成 " << dmg << " 伤害\n";
}
} else if (u == 4) {
int dmg = 42 + (param.stage_name == "混沌奇点" ? 45 : 0);
if (has_clone) {
clone_hp -= dmg;
if (clone_hp <= 0) { clone_hp = 0; has_clone = false; cout << "击破影子分身!"; }
cout << "使用【星辉坠落】!对影子分身造成 " << dmg << " 伤害\n";
} else {
eh -= dmg;
enemy_atk_down = 5 + (param.stage_name == "混沌奇点" ? 15 : 0);
cout << "使用【星辉坠落】!对" << param.enemy_name << "造成 " << dmg << " 伤害\n";
}
}
} else { // 普通技能
int sk = a;
int dmg = 0;
int wf = (form == 1 && u == 2) ? 15 : (form == 2 && u == 1) ? 15 : 0;
if (u == 1) {
dmg = (param.special_type == 7 ? (phase == 1 ? 41 : (phase == 2 ? 45 : 48)) : 28) + wf + db;
if (sk == 1) {
ph = min(ph + 12 + (param.special_type == 7 ? 5 : 0), pm);
cout << "使用【虚无血手】!造成 " << dmg << " 伤,回血至" << ph << "\n";
} else {
cout << "使用【虚空之剑】!造成 " << dmg << " 伤\n";
}
} else if (u == 2) {
dmg = (param.special_type == 7 ? (phase == 1 ? 51 : (phase == 2 ? 55 : 58)) : 38) + wf + db;
cout << "使用【" << (sk == 1 ? "头脑风暴" : "高能激光") << "】!造成 " << dmg << " 伤\n";
} else if (u == 3) {
dmg = (param.special_type == 7 ? (phase == 1 ? 46 : (phase == 2 ? 50 : 53)) : 23) + wf + db;
if (sk == 1) {
ph = min(ph + 7 + (param.special_type == 7 ? 5 : 0), pm);
cout << "使用【异界回荡】!造成 " << dmg << " 伤,回血至" << ph << "\n";
} else {
cout << "使用【漩涡之术】!造成 " << dmg << " 伤\n";
}
} else {
dmg = (param.special_type == 7 ? (phase == 1 ? 49 : (phase == 2 ? 53 : 56)) : 28) + wf + db;
if (sk == 1) {
if (rand()%5 == 0) {
int cr = 7 + (param.special_type == 7 ? 11 : 0);
dmg += cr;
cout << "使用【星尘箭】!触发暴击!造成 " << dmg << " 伤\n";
} else {
cout << "使用【星尘箭】!造成 " << dmg << " 伤\n";
}
} else {
cout << "使用【星光盾】!造成 " << dmg << " 伤,获得护盾\n";
}
}
// 应用伤害
if (has_clone) {
clone_hp -= dmg;
if (clone_hp <= 0) { clone_hp = 0; has_clone = false; cout << "击破影子分身!"; }
} else {
if (shield_turns > 0 && u != 2) dmg /= 2;
if (dfs > 0) dmg = max(1, dmg * 7 / 10);
eh -= dmg;
}
}
// 敌方行动
if (eh > 0 && a != 3 && a != 4) {
int ea = 0;
string atk_name = "攻击";
// 根据敌人类型设置攻击参数
if (param.enemy_name == "腐爪蠕虫") ea = 15 - enemy_atk_down;
else if (param.enemy_name == "铁壳拾荒者") ea = (eh < 60 ? 30 : 22) - enemy_atk_down;
else if (param.enemy_name == "虚空收割者") ea = (ep == 1 ? (rand()%2 ? 25 : 20) : (rand()%3 ? 30 : 28)) - enemy_atk_down;
else if (param.enemy_name == "瘟疫散播者") ea = (rand()%2 ? 25 : 30) - enemy_atk_down;
else if (param.enemy_name == "机械毁灭者") ea = (rand()%3 ? 35 : (rand()%3 ? 25 : 20)) - enemy_atk_down;
else if (param.enemy_name == "元素主宰") {
switch(ep) {
case 1: ea = (rand()%2 ? 30 : 25) - enemy_atk_down; break;
case 2: ea = (rand()%2 ? 28 : 22) - enemy_atk_down; break;
case 3: ea = (rand()%2 ? 32 : 20) - enemy_atk_down; break;
case 4: ea = (rand()%2 ? 35 : 25) - enemy_atk_down; break;
}
} else if (param.enemy_name == "幽影编织者") ea = has_clone ? 20 + 15 : (rand()%2 ? 30 : 25) - enemy_atk_down;
else if (param.enemy_name == "量子守卫") ea = (rand()%3 ? 32 : (rand()%3 ? 28 : 25)) - enemy_atk_down;
else if (param.enemy_name == "混沌之源") ea = (rand()%3 ? 35 : (rand()%3 ? 28 : 25)) - enemy_atk_down;
// 计算防御
int df = 0;
if (u == 1) df = 6 + (param.special_type == 7 ? 4 : 0);
else if (u == 2) df = 3 + (param.special_type == 7 ? 4 : 0);
else if (u == 3) df = 8 + (param.special_type == 7 ? 4 : 0);
else df = 5 + (param.special_type == 7 ? 4 : 0);
// 应用伤害
if (invincible) {
cout << "杰森处于无敌状态,免疫所有伤害!\n";
} else {
int dmg = max(1, ea - df);
ph -= dmg;
cout << param.enemy_name << "使用" << atk_name << "!受到" << dmg << "点伤害\n";
}
// 特殊状态附加
if (param.special_type == 3 && rand()%2 == 0) ps = 3;
if (param.special_type == 4 && rand()%5 == 0 && dfs == 0) dfs = 2;
} else if (eh > 0) {
cout << param.enemy_name << "在凝聚能量...\n";
}
Sleep(900);
system("cls");
}
// 战斗结果(修复核心:使用param.level更新进度)
if (ph > 0) {
cout << "恭喜击败" << param.enemy_name << ",通关" << param.stage_name << "!\n";
int reward[] = {50, 80, 150, 120, 180, 300, 150, 180, 350};
int level = param.level - 1; // 使用结构体中存储的关卡编号
m += reward[level];
p = param.level + 1; // 进度更新为当前关卡+1
} else {
cout << "被" << param.enemy_name << "击败,战斗失败,可重新挑战\n";
}
Sleep(1500);
system("cls");
}
// 杰森故事模式关卡
void js_1() {
if (h[2] != 1) {
cout << "你需要杰森才能开启故事!\n";
Sleep(1500);
system("cls");
return;
}
cout << "【杰森的回忆 - 空间裂隙】\n\n";
cout << "那是一场突如其来的空间风暴...\n";
Sleep(1200);
cout << "我的商船正在泽尔星系进行例行贸易,却被一股未知力量吸入异空间...\n";
Sleep(1500);
cout << "船体在扭曲的空间中发出刺耳的金属撕裂声...\n";
Sleep(1200);
cout << "杰森紧握着祖传的古刃,这是家族流传的唯一遗物...\n\n";
Sleep(1500);
cout << "按任意键继续...\n";
system("pause>nul");
system("cls");
int pm = 200, ph = pm, eh = 150;
string en = "空间寄生虫";
while (eh > 0 && ph > 0) {
cout << "【杰森的回忆】对阵 " << en << "\n";
cout << "杰森血量:" << ph << "/" << pm << "\n" << en << " 血量:" << eh << "\n";
cout << "当前体力药剂:x" << pot << "\n"; // 显示全局实时值
cout << "请选择操作:1. 异界回荡 2. 漩涡之术 3. 使用体力药剂\n";
int a;
bool v = false;
while (!v) {
cin >> a;
if (a == 3 && pot <= 0) {
cout << "体力药剂数量不足(当前x" << pot << "),请选择技能:\n";
} else if ((a >= 1 && a <= 2) || (a == 3 && pot > 0)) {
v = true;
} else {
cout << "请输入1-3选择操作:\n";
}
}
if (a == 3) { // 使用体力药剂(修改全局变量)
ph = min(ph + 50, pm);
pot--; // 核心修复
cout << "使用体力药剂!剩余x" << pot << ",恢复50点生命值,当前血量:" << ph << "\n";
} else {
int d = (a == 1) ? 25 : 30;
eh -= d;
if (a == 1) ph = min(ph + 8, pm);
cout << "使用【" << (a == 1 ? "异界回荡" : "漩涡之术") << "】!造成 " << d << " 伤害\n";
}
if (eh > 0) {
int dmg = max(1, 18 - 8);
ph -= dmg;
cout << en << "扑向你!受到" << dmg << "点伤害\n";
}
Sleep(1200);
system("cls");
}
if (ph > 0) {
cout << "你成功击退了空间寄生虫!\n";
m += 60;
js_l = 1;
} else {
cout << "杰森被空间寄生虫淹没...\n【回忆中断】\n";
}
Sleep(1500);
system("cls");
}
void js_2() {
if (js_l < 1) {
cout << "请先完成第一关解锁此内容!\n";
Sleep(1500);
system("cls");
return;
}
cout << "【杰森的回忆 - 破碎空间站】\n\n";
cout << "穿过空间裂隙,你发现自己来到了一座废弃的空间站...\n";
Sleep(1200);
cout << "应急灯闪烁着红光,照亮了墙上的标识:「阿尔法贸易站」\n";
Sleep(1200);
cout << "杰森:\"这是星际商人协会的站点...怎么会变成这样?\"\n\n";
Sleep(1500);
system("pause>nul");
system("cls");
int pm = 200, ph = pm, eh = 250;
string en = "机械守卫";
bool er = false;
while (eh > 0 && ph > 0) {
cout << "【杰森的回忆】对阵 " << en << (er ? " - 狂暴状态" : "") << "\n";
cout << "杰森血量:" << ph << "/" << pm << "\n" << en << " 血量:" << eh << "\n";
cout << "当前道具:体力药剂 x" << pot << " 攻击强化 x" << atk << "\n"; // 显示全局值
cout << "请选择操作:1. 异界回荡 2. 漩涡之术 3. 使用体力药剂 4. 使用攻击强化\n";
int a;
bool v = false;
while (!v) {
cin >> a;
if (a == 3 && pot <= 0) {
cout << "体力药剂数量不足(当前x" << pot << ")!\n";
} else if (a == 4 && atk <= 0) {
cout << "攻击强化次数不足(当前x" << atk << ")!\n";
} else if ((a >= 1 && a <= 2) || (a == 3 && pot > 0) || (a == 4 && atk > 0)) {
v = true;
} else {
cout << "请输入1-4选择操作:\n";
}
}
int db = 0;
if (a == 3) { // 使用体力药剂
ph = min(ph + 50, pm);
pot--; // 核心修复
cout << "使用体力药剂!剩余x" << pot << ",恢复50点生命值\n";
} else if (a == 4) { // 使用攻击强化
db = 10;
atk--; // 核心修复
cout << "使用攻击强化!剩余x" << atk << ",本回合伤害+10\n";
} else {
int d = (a == 1 ? 27 : 32) + db;
eh -= d;
if (a == 1) ph = min(ph + 8, pm);
cout << "使用【" << (a == 1 ? "异界回荡" : "漩涡之术") << "】!造成 " << d << " 伤害\n";
}
if (eh < 100 && !er) {
er = true;
cout << en << "进入狂暴状态!攻击力大幅提升!\n";
}
if (eh > 0) {
int ea = er ? 28 : 22;
int dmg = max(1, ea - 8);
ph -= dmg;
cout << en << (er ? "疯狂攻击" : "挥拳攻击") << "!受到" << dmg << "点伤害\n";
}
Sleep(1200);
system("cls");
}
if (ph > 0) {
cout << "机械守卫的核心被彻底摧毁!\n";
m += 90;
js_l = 2;
} else {
cout << "杰森被机械守卫重创...\n【回忆中断】\n";
}
Sleep(1500);
system("cls");
}
void js_3() {
if (js_l < 2) {
cout << "请先完成第二关解锁此内容!\n";
Sleep(1500);
system("cls");
return;
}
cout << "【杰森的回忆 - 空间风暴核心】\n\n";
cout << "根据导航日志的记录,你找到了空间异常的源头...\n";
Sleep(1200);
cout << "风暴中心,一个由纯粹空间能量构成的实体正维持着这场灾难...\n";
Sleep(1200);
cout << "杰森握紧古刃:\"就是它!只要摧毁它,风暴就能平息!\"\n\n";
Sleep(1500);
system("pause>nul");
system("cls");
int pm = 200, ph = pm, eh = 400;
string bn = "空间风暴核心";
int ps = 1;
while (eh > 0 && ph > 0) {
if (eh < 150 && ps == 1) {
ps = 2;
cout << bn << "进入最终形态!空间能量剧烈波动!\n";
Sleep(1500);
system("cls");
}
cout << "【杰森的回忆 - " << (ps == 2 ? "最终阶段" : "第一阶段") << "】对阵 " << bn << "\n";
cout << "杰森血量:" << ph << "/" << pm << "\n" << bn << " 血量:" << eh << "\n";
cout << "当前道具:体力药剂 x" << pot << " 攻击强化 x" << atk << "\n"; // 显示全局值
cout << "请选择操作:1. 异界回荡 2. 漩涡之术 3. 使用体力药剂 4. 使用攻击强化\n";
int a;
bool v = false;
while (!v) {
cin >> a;
if (a == 3 && pot <= 0) {
cout << "体力药剂数量不足(当前x" << pot << ")!\n";
} else if (a == 4 && atk <= 0) {
cout << "攻击强化次数不足(当前x" << atk << ")!\n";
} else if ((a >= 1 && a <= 2) || (a == 3 && pot > 0) || (a == 4 && atk > 0)) {
v = true;
} else {
cout << "请输入1-4选择操作:\n";
}
}
int db = 0;
if (a == 3) { // 使用体力药剂
ph = min(ph + 50, pm);
pot--; // 核心修复
cout << "使用体力药剂!剩余x" << pot << ",恢复50点生命值\n";
} else if (a == 4) { // 使用攻击强化
db = 10;
atk--; // 核心修复
cout << "使用攻击强化!剩余x" << atk << ",本回合伤害+10\n";
} else {
int d = (ps == 1 ? (a == 1 ? 29 : 34) : (a == 1 ? 33 : 38)) + db;
eh -= d;
if (a == 1) ph = min(ph + 10, pm);
cout << "使用【" << (a == 1 ? "异界回荡" : "漩涡之术") << "】!造成 " << d << " 伤害\n";
}
if (eh > 0) {
int ea, df = ps == 2 ? 6 : 8;
string sk;
if (ps == 1) {
if (rand()%2 == 0) { ea = 25; sk = "空间震荡"; }
else { ea = 22; sk = "能量射线"; }
} else {
switch(rand()%3) {
case 0: ea = 32; sk = "次元风暴"; break;
case 1: ea = 28; sk = "能量爆发"; break;
default: ea = 24; sk = "空间扭曲"; break;
}
}
int dmg = max(1, ea - df);
ph -= dmg;
cout << bn << "使用" << sk << "!受到" << dmg << "点伤害\n";
}
Sleep(1200);
system("cls");
}
if (ph > 0) {
cout << "空间风暴核心开始瓦解!\n恭喜完成杰森的全部故事!\n";
cout << "杰森的技能获得永久强化!获得200方块币奖励!\n";
m += 200;
js_l = 3;
js_p = 3;
} else {
cout << "杰森被空间风暴吞噬...\n【回忆中断】\n";
}
Sleep(2000);
system("cls");
}
// 杰森故事模式主界面
void js_mode() {
if (h[2] != 1) {
cout << "你需要杰森才能进入故事模式!\n";
Sleep(1500);
system("cls");
return;
}
int c = 1;
while (c != 0) {
cout << "----------杰森的专属故事----------\n";
cout << "0. 返回主菜单\n";
cout << "1. 第一关:空间裂隙 " << (js_l >= 0 ? "【可挑战】" : "【未解锁】") << "\n";
cout << "2. 第二关:破碎空间站 " << (js_l >= 1 ? "【可挑战】" : "【未解锁】") << "\n";
cout << "3. 第三关:空间风暴核心 " << (js_l >= 2 ? "【可挑战】" : "【未解锁】") << "\n";
if (js_l >= 3) cout << "\n恭喜!你已完成杰森的全部故事!\n";
cout << "请选择关卡:\n";
bool v = false;
while (!v) {
cin >> c;
if (c >= 0 && c <= 3) v = true;
else { cout << "给我重输!\n"; Sleep(800); }
}
system("cls");
switch (c) {
case 1: js_1(); break;
case 2: js_2(); break;
case 3: js_3(); break;
case 0: system("cls"); break;
}
}
}
// 英雄对战(严格修改全局变量)
void h_battle() {
int has_hero = 0;
for(int i = 0; i < 4; i++) if(h[i] == 1) has_hero = 1;
if(!has_hero) {
cout << "你没有可用的英雄进行对战,请先解锁英雄!\n";
Sleep(1500);
system("cls");
return;
}
cout << "【英雄对战】请选择你的出战英雄 \n";
cout << "1. 虚无(" << (h[0] ? "已拥有" : "未拥有") << ") 2. 行者(" << (h[1] ? "已拥有" : "未拥有") << ")\n";
cout << "3. 杰森(" << (h[2] ? "已拥有" : "未拥有") << ") 4. 星辰(" << (h[3] ? "已拥有" : "未拥有") << ")\n";
cout << "输入数字选择:\n";
int player_hero;
bool v = false;
while (!v) {
cin >> player_hero;
if (player_hero >= 1 && player_hero <= 4 && h[player_hero-1] == 1) {
v = true;
} else {
cout << "该英雄不可选,请重新输入:\n";
}
}
system("cls");
int ch;
do {
ch = rand() % 4 + 1;
} while(ch == player_hero);
string pn[] = {"虚无", "行者", "杰森", "星辰"}, cn = pn[ch-1];
cout << "【匹配成功】你将操控 " << pn[player_hero-1] << " 对阵电脑的 " << cn << "\n";
Sleep(1500);
system("cls");
int pm[] = {170, 150, 200, 160}, php = pm[player_hero-1];
int cm[] = {160, 140, 180, 150}, chp = cm[ch-1];
int cp = pot, ca = atk;
while (chp > 0 && php > 0) {
cout << "【英雄对战】" << pn[player_hero-1] << " VS " << cn << "\n";
cout << "你的血量:" << php << "/" << pm[player_hero-1] << "\n" << cn << " 的血量:" << chp << "/" << cm[ch-1] << "\n";
cout << "你的道具:体力药剂 x" << pot << " 攻击强化 x" << atk << "\n"; // 显示全局值
cout << "请选择操作:1. 技能1 2. 技能2 3. 使用体力药剂 4. 使用攻击强化\n";
int a;
bool av = false;
while (!av) {
cin >> a;
if (a == 3 && pot <= 0) {
cout << "体力药剂数量不足(当前x" << pot << ")!\n";
} else if (a == 4 && atk <= 0) {
cout << "攻击强化次数不足(当前x" << atk << ")!\n";
} else if ((a >= 1 && a <= 2) || (a == 3 && pot > 0) || (a == 4 && atk > 0)) {
av = true;
} else {
cout << "请输入1-4选择操作:\n";
}
}
int db = 0;
if (a == 3) { // 使用体力药剂
php = min(php + 50, pm[player_hero-1]);
pot--; // 核心修复
cp = pot; // 同步电脑AI可见的数量
cout << "你使用了体力药剂!剩余x" << pot << ",恢复50点生命值\n";
} else if (a == 4) { // 使用攻击强化
db = 10;
atk--; // 核心修复
ca = atk; // 同步电脑AI可见的数量
cout << "你使用了攻击强化!剩余x" << atk << ",本回合伤害+10\n";
} else {
int dmg = 0;
if (player_hero == 1) dmg = (a == 1 ? 28 : 33) + db;
else if (player_hero == 2) dmg = 38 + db;
else if (player_hero == 3) dmg = (a == 1 ? 23 : 28) + db;
else {
dmg = (a == 1 ? 28 : 18) + db;
if (a == 1 && rand()%5 == 0) dmg += 7;
}
chp -= dmg;
if (player_hero == 1 && a == 1) php = min(php + 12, pm[player_hero-1]);
if (player_hero == 3 && a == 1) php = min(php + 7, pm[player_hero-1]);
cout << "使用【" << (a == 1 ? (player_hero == 1 ? "虚无血手" : player_hero == 2 ? "头脑风暴" : player_hero == 3 ? "异界回荡" : "星尘箭") :
player_hero == 1 ? "虚空之剑" : player_hero == 2 ? "高能激光" : player_hero == 3 ? "漩涡之术" : "星光盾") << "】!造成 " << dmg << " 伤害\n";
}
if (chp <= 0) break;
Sleep(1000);
cout << "\n" << cn << " 正在行动...\n";
Sleep(1000);
int ca_action;
if (chp < cm[ch-1]/3 && cp > 0) ca_action = 3;
else if (ca > 0 && rand()%3 == 0) ca_action = 4;
else ca_action = rand()%2 + 1;
db = 0;
if (ca_action == 3) {
chp = min(chp + 50, cm[ch-1]);
cp--;
cout << cn << " 使用了体力药剂!恢复50点生命值\n";
} else if (ca_action == 4) {
db = 10;
ca--;
cout << cn << " 使用了攻击强化!本回合伤害+10\n";
} else {
int dmg = 0;
if (ch == 1) dmg = (ca_action == 1 ? 25 : 30) + db;
else if (ch == 2) dmg = 35 + db;
else if (ch == 3) dmg = (ca_action == 1 ? 20 : 25) + db;
else {
dmg = (ca_action == 1 ? 25 : 15) + db;
if (ca_action == 1 && rand()%5 == 0) dmg += 5;
}
php -= dmg;
if (ch == 1 && ca_action == 1) chp = min(chp + 10, cm[ch-1]);
if (ch == 3 && ca_action == 1) chp = min(chp + 5, cm[ch-1]);
cout << cn << " 使用【" << (ca_action == 1 ? (ch == 1 ? "虚无血手" : ch == 2 ? "头脑风暴" : ch == 3 ? "异界回荡" : "星尘箭") :
ch == 1 ? "虚空之剑" : ch == 2 ? "高能激光" : ch == 3 ? "漩涡之术" : "星光盾") << "】!造成 " << dmg << " 伤害\n";
}
Sleep(1200);
system("cls");
}
if (php > 0) {
cout << "恭喜!你操控的" << pn[player_hero-1] << "击败了" << cn << "!获得30方块币奖励!\n";
m += 30;
} else {
cout << "很遗憾,你的" << pn[player_hero-1] << "被" << cn << "击败了!\n";
}
Sleep(2000);
system("cls");
}
// 关卡选择
void g() {
int gq, yn = 1;
while (yn) {
cout << "----------选择关卡----------\n";
cout << "当前进度:第" << p << "关\n";
cout << "1.灾厄初期<教程关> - 击败腐爪蠕虫\n";
cout << "2.废土拾荒者 - 击溃铁壳拾荒者\n";
cout << "3.暗影王座<BOSS关> - 挑战虚空收割者\n";
cout << "4.腐烂沼泽 - 消灭瘟疫散播者\n";
cout << "5.废弃工厂 - 摧毁机械毁灭者\n";
cout << "6.元素圣殿<BOSS关> - 战胜元素主宰\n";
cout << "7.迷雾森林 - 消灭幽影编织者\n";
cout << "8.量子实验室 - 摧毁量子守卫\n";
cout << "9.混沌奇点<BOSS关> - 战胜混沌之源\n";
cout << "选择关卡(0退出):\n";
bool v = false;
while (!v) {
cin >> gq;
if ((gq >= 1 && gq <= 9) || gq == 0) v = true;
else { cout << "给我重输!\n"; Sleep(800); }
}
if (gq == 0) { yn = 0; system("cls"); continue; }
if (gq > p) { cout << "请通关前置关卡\n"; Sleep(1500); system("cls"); continue; }
BattleParam param;
switch(gq) {
case 1:
param = {"灾厄初期", "腐爪蠕虫", 180, 170,
{"根据占卜师的预言,方块大陆将面对一场浩劫...", "灾厄即将降临于大陆,将民不聊生,战火纷飞...", "果不其然,百种怪物降临了..."}, 3, false, 0, 1};
break;
case 2:
param = {"废土拾荒者", "铁壳拾荒者", 300, 170,
{"来到一片茫茫沙漠废土,一只弓着腰的机器缓缓起身...", "浑身腐败,破旧不堪,就像用垃圾拼凑而成的...", "它举起铁爪,指向了你..."}, 3, false, 0, 2};
break;
case 3:
param = {"暗影王座", "虚空收割者", 450, 190,
{"你来到暗影能量最浓郁的祭坛深处,这里曾是暗影部族的圣地...", "祭坛中央,一个被暗影能量包裹的高大身影缓缓转身..."}, 2, true, 5, 3};
break;
case 4:
param = {"腐烂沼泽", "瘟疫散播者", 500, 180,
{"穿过暗影王座,你踏入了一片被瘟疫侵蚀的沼泽地...", "空气中弥漫着刺鼻的毒气,地面上覆盖着粘稠的绿色粘液...", "远处传来令人毛骨悚然的低吼声..."}, 3, true, 3, 4};
break;
case 5:
param = {"废弃工厂", "机械毁灭者", 650, 190,
{"沼泽尽头是一座废弃的战争工厂,锈迹斑斑的机械臂仍在无序挥舞...", "中央控制台闪烁着红光,一台巨型机械正在苏醒..."}, 2, true, 4, 5};
break;
case 6:
param = {"元素圣殿", "元素主宰", 800, 210,
{"穿过工厂废墟,你来到一座古老的元素圣殿,四壁雕刻着风、火、水、土的图腾...", "圣殿中央的祭坛上,四种元素能量正在汇聚..."}, 2, true, 6, 6};
break;
case 7:
param = {"迷雾森林", "幽影编织者", 700, 190,
{"穿过元素圣殿,你踏入一片被永恒迷雾笼罩的森林...", "树木的影子在雾中扭曲舞动,仿佛拥有生命...", "雾气凝聚成一个人形轮廓,伸出由影子构成的手臂..."}, 3, true, 1, 7};
break;
case 8:
param = {"量子实验室", "量子守卫", 850, 200,
{"穿过迷雾森林,一座悬浮在虚空中的高科技实验室出现在眼前...", "实验室内部充满了闪烁的全息投影和运转的量子计算机..."}, 2, true, 2, 8};
break;
case 9:
param = {"混沌奇点", "混沌之源", 1000, (u==1?210:u==2?190:u==3?240:200),
{"量子实验室的核心装置启动,打开了通往异次元的裂缝,你被吸入其中...", "这里是所有维度的交汇点,时空失去意义..."}, 2, true, 7, 9};
break;
}
battle(param);
}
}
// 关于界面(更新版本号和更新内容)
void about() {
char s[100];
int yn = 1;
while (yn) {
cout << "任意键返回\n";
cout << "当前版本号:v1.13\n作者:Jason_\n作品版权归Jason_所有,禁止随意转载发布\n\n";
cout << " -------公告栏-------\n";
cout << "感谢玩<方块传奇>的所有玩家,可以在评论区提意见哦\n";
cout << "1.13版本更新内容:\n1. 新增存档功能(保存/加载游戏状态)\n2. 优化了游戏体验\n";
cin >> s;
yn = 0;
system("cls");
}
}
// 商店(购买时正确增加全局变量)
void store() {
int yn = 1;
while (yn == 1) {
int k;
cout << "输入对应数字键购买,0退出\n";
cout << "当前拥有方块币:" << m << "枚\n";
cout << "1. 新服礼物:英雄<杰森>(免费领取,剩余次数:" << s1 << ")\n";
cout << "2. 英雄<星辰>(售价450方块币,剩余次数:" << s2 << ")\n";
cout << "3. 体力药剂(恢复50点生命,售价50方块币,剩余次数:" << s3 << ")\n";
cout << "4. 攻击强化(本回合伤害+10,售价80方块币,剩余次数:" << s4 << ")\n";
cout << "5. 破碎之心(虚无新增技能,售价600方块币,剩余次数:" << s5 << ")\n";
cout << "6. 光之透镜(行者新增技能,售价600方块币,剩余次数:" << s6 << ")\n";
cout << "7. 次元核心(杰森新增技能,售价600方块币,剩余次数:" << s7 << ")\n";
cout << "8. 堕落星辉(星辰新增技能,售价600方块币,剩余次数:" << s8 << ")\n";
bool v = false;
while (!v) {
cin >> k;
if (k >= 0 && k <= 8) v = true;
else { cout << "请输入0-8选择:\n"; Sleep(800); system("cls"); }
}
if (k == 1 && s1 == 1) {
cout << "领取成功!获得英雄「杰森」\n";
h[2] = 1;
s1--;
} else if (k == 2 && s2 == 1 && m >= 450) {
cout << "购买成功!获得英雄「星辰」\n";
h[3] = 1;
m -= 450;
s2--;
} else if (k == 3 && s3 > 0 && m >= 50) {
cout << "购买成功!获得体力药剂1个,当前总数x" << pot + 1 << "\n";
pot++; // 正确增加全局计数
m -= 50;
s3--;
} else if (k == 4 && s4 > 0 && m >= 80) {
cout << "购买成功!获得攻击强化1次,当前总数x" << atk + 1 << "\n";
atk++; // 正确增加全局计数
m -= 80;
s4--;
} else if (k == 5 && s5 == 1 && h[0] == 1 && m >= 600) {
cout << "购买成功!虚无解锁新技能【破碎之触】\n";
m -= 600;
s5--;
} else if (k == 6 && s6 == 1 && h[1] == 1 && m >= 600) {
cout << "购买成功!行者解锁新技能【光能聚焦】\n";
m -= 600;
s6--;
} else if (k == 7 && s7 == 1 && h[2] == 1 && m >= 600) {
cout << "购买成功!杰森解锁新技能【次元斩】\n";
m -= 600;
s7--;
} else if (k == 8 && s8 == 1 && h[3] == 1 && m >= 600) {
cout << "购买成功!星辰解锁新技能【星辉坠落】\n";
m -= 600;
s8--;
} else if (k == 0) {
yn = 0;
} else {
if (k >= 1 && k <= 8) cout << (k == 2 || k >=5 ? "方块币不足或未满足条件!\n" : "已购买或条件不足!\n");
}
Sleep(800);
system("cls");
}
}
// 英雄界面
void hero() {
int yn = 1;
int he = u;
while (yn) {
int k;
cout << "1切换角色,2退出\n";
if (he == 1) {
cout << "英雄:虚无\n 血量:160 \n防御:5 \n技能1:虚无血手,造成25伤害+回血10\n技能2:虚空之剑,造成30伤害\n";
cout << "角色故事:虚无生于暗影部族,幼时被献祭,濒死时觉醒血手撕碎祭坛...\n";
} else if (he == 2) {
cout << "英雄:行者\n 血量:140 \n防御:2 \n技能1:头脑风暴,造成35伤害\n技能2:高能激光,造成35伤害\n";
cout << "角色故事:行者本是废土学者,为保护数据核心,用改装仪器轰退掠夺者...\n";
} else if (he == 3) {
cout << "英雄:杰森\n 血量:180 \n防御:7 \n技能1:异界回荡,造成20伤害+回血5\n技能2:漩涡之术,造成25伤害\n";
cout << "角色故事:杰森曾是异界商贩,某次交易遇空间风暴,靠古刃劈开空间...\n";
} else if (he == 4) {
cout << "英雄:星辰\n 血量:150 \n防御:4 \n技能1:星尘箭,25伤害(20%暴击+5)\n技能2:星光盾,15伤害+防御+2\n";
cout << "角色故事:星辰是坠落凡间的星灵,弓弦由月光编织,盾牌凝结星辰碎片...\n";
}
cout << (h[he-1] == 1 ? "已拥有\n" : "未拥有\n");
cin >> k;
if (k == 1) { he++; if (he > 4) he = 1; system("cls"); }
else if (k == 2) { yn = 0; system("cls"); }
else { cout << "给我重输!\n"; Sleep(800); system("cls"); }
}
}
// 游戏封面(新增存档/读档选项)
void fm() {
cout << " \n-----------------------------------------------------------------------------------------\n| 1.英雄 | 2.商城 | 3.关卡 | 4.关于 | 5.英雄对战 | 6.故事模式 | 7.保存游戏 | 8.加载游戏 |";
cout << "\n-----------------------------------------------------------------------------------------\n";
}
// 主函数(添加存档/读档选项处理)
int main () {
srand ((unsigned) time (NULL));
system ("color 0A");
int xz;
while (1) {
cout << " <方块传奇v1.13>\n";
fm ();
cin >> xz;
if (xz == 1) { system("cls"); hero(); }
else if (xz == 2) { system("cls"); store(); }
else if (xz == 3) { system("cls"); g(); }
else if (xz == 4) { system("cls"); about(); }
else if (xz == 5) { system("cls"); h_battle(); }
else if (xz == 6) {
system("cls");
cout << "---------- 故事模式 ----------\n";
cout << "0. 返回主菜单 \n";
cout << "1. 杰森的专属故事" << (h[2] == 1 ? "【可进入】" : "【未解锁】") << "\n";
cout << "请选择故事线:\n";
int c;
bool v = false;
while (!v) {
cin >> c;
if (c == 0 || (c == 1 && h[2] == 1)) v = true;
else if (c == 1) { cout << "请先解锁杰森以开启该故事线!\n"; Sleep(1500); system("cls"); break; }
else cout << "给我重输!\n";
}
if (c == 1) { system("cls"); js_mode(); }
else system("cls");
} else if (xz == 7) { // 保存游戏
system("cls");
saveGame();
} else if (xz == 8) { // 加载游戏
system("cls");
loadGame();
} else {
cout << "给我重输!n";
Sleep(800);
system("cls");
}
}
return 0;
}
全部评论 5
至少优化比《AC荣耀》好(把所有代码封装在game函数, 我不说是谁);
3天前 来自 上海
1(笑)
3天前 来自 上海
0感谢点赞
3天前 来自 上海
0
(doge)
4天前 来自 上海
1挺好的
14小时前 来自 浙江
0由于作者动力不足,本游戏将停更一段时间,作者将开发新游戏
昨天 来自 上海
0更新了!
3天前 来自 上海
0
有帮助,赞一个