#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
void clear() {
system("cls");
}
void wait() {
cout << "\n按回车继续...";
cin.get();
cin.get();
}
void slow(string text, int ms = 18) {
for (int i = 0; i < text.length(); i++) {
cout << text[i];
Sleep(ms);
}
}
void scare() {
vector<string> sc;
sc.push_back("\n【⚠️ 一阵寒意从背后爬上脊椎……】\n");
sc.push_back("\n【⚠️ 你听见很轻的呼吸声,就在你身后】\n");
sc.push_back("\n【⚠️ 灯光忽然暗了一瞬,像有东西从旁边走过】\n");
sc.push_back("\n【⚠️ 远处传来关门声,可这里只有你】\n");
sc.push_back("\n【⚠️ 你感觉有人在看你,可你不敢回头】\n");
slow(sc[rand() % sc.size()]);
}
// ========== 带障碍 + 操作的追逐战 ==========
void chaseGame(string monster, int level) {
int speed = 800 - level * 150;
int hp = 3;
clear();
slow("\n\n\t\t⚠️ " + monster + " 发现你了!\n");
slow("\n\t\t快速按 1/2/3 躲避障碍!\n");
Sleep(1500);
vector<string> obs;
obs.push_back("桌子挡路!按 1 躲开");
obs.push_back("铁门关上!按 2 翻越");
obs.push_back("地面裂缝!按 3 跳过");
for (int i = 0; i < 5; ++i) {
clear();
slow("\n\n=====================================\n");
slow("\t\t" + monster + " 正在追来!\n");
slow("=====================================\n");
string o = obs[rand() % obs.size()];
slow("\n\t\t障碍:");
slow(o);
slow("\n\n\t\t输入 1/2/3:");
int c;
cin >> c;
int ans = rand() % 3 + 1;
if (c != ans) {
hp--;
slow("\n\t\t❌ 躲错了!剩余生命:");
char buf[10];
itoa(hp, buf, 10);
slow(buf);
Sleep(800);
} else {
slow("\n\t\t✅ 躲开了!");
Sleep(400);
}
if (hp <= 0) {
clear();
slow("\n\n\t\t💀 你被抓住了……游戏结束。\n");
wait();
exit(0);
}
}
clear();
slow("\n\n\t\t✅ 你逃进了安全区域!\n");
Sleep(1500);
}
void section(string title) {
clear();
slow("=======================================================\n", 20);
slow(" " + title + "\n", 25);
slow("=======================================================\n", 20);
wait();
}
// ====================== 关卡1 ======================
bool level1() {
section("第1关:704宿舍");
slow("凌晨十二点,宿舍安静得能听见心跳。\n");
slow("你是新来的住户,而上一任女孩,凭空消失了。\n");
slow("门突然反锁,月光染成暗红。\n");
slow("桌上,留着她的笔记。\n\n");
wait();
slow("【704宿舍生存规则】\n");
slow("1. 夜里十点后,绝对不要照镜子。\n");
slow("2. 只能睡下铺,上铺保持空床。\n");
slow("3. 门外有人哼歌,不要回应,不要靠近。\n");
slow("4. 衣柜出现白裙,不要触碰。\n");
slow("5. 凌晨00:30必须给窗台多肉浇冷水。\n");
slow("6. 挂钟停在12点,立刻撕掉钟面。\n");
slow("7. 白裙是钥匙,必须拿起。\n");
slow("8. 上铺有脚步声,千万不要抬头。\n");
slow("9. 规则1是假的,必须照镜子。\n");
slow("10. 不要打开书桌最下面的抽屉。\n");
wait();
section("探索:书桌");
slow("你打开抽屉,发现一张病历。\n");
slow("患者林晓,害怕倒影,频繁失眠。\n");
slow("诊断:长期照镜,意识被倒影同化。\n");
wait();
section("探索:衣柜");
slow("衣柜里,真的挂着一条白裙。\n");
slow("口袋里一张纸条:\n");
slow("「字迹癫狂的,全是假规则。」\n");
wait();
section("探索:窗台");
slow("日历上,每一天都圈着00:30。\n");
slow("一行小字:水是唯一的屏障,不浇必死。\n");
wait();
scare();
chaseGame("白裙鬼影", 1);
section("最终判断");
int a, b, c;
bool ok = true;
cout << "1. 假规则序号:"; cin >> a;
if (a != 7 && a != 9 && a != 10) ok = false;
cout << "2. 必须做:1=浇多肉 2=照镜子:"; cin >> b;
if (b != 1) ok = false;
cout << "3. 林晓消失原因:1=信假规则 2=没关门:"; cin >> c;
if (c != 1) ok = false;
if (!ok) {
section("你违反规则,被倒影带走……");
return false;
}
section("你活过了第一夜。");
return true;
}
// ====================== 关卡2 ======================
bool level2() {
section("第2关:午夜图书馆");
slow("天色微亮,宿舍门终于打开。\n");
slow("校园空无一人,只有图书馆还亮着灯。\n");
slow("那是唯一能离开的路。\n\n");
wait();
slow("【图书馆规则】\n");
slow("1. 23点后只能走东侧楼梯。\n");
slow("2. 不要触碰红色封面的书。\n");
slow("3. 管理员问话,不要回答。\n");
slow("4. 看到漂浮的书,立刻蹲下闭眼。\n");
slow("5. 绝对不要去四楼。\n");
slow("6. 四楼藏着离开的钥匙。\n");
wait();
section("探索:书架");
slow("书堆里夹着一张纸条:\n");
slow("「规则5是陷阱,四楼才是生路。」\n");
wait();
section("探索:服务台");
slow("管理员趴在桌上,头发遮脸。\n");
slow("它没有动,却让你浑身发冷。\n");
wait();
section("探索:楼梯");
slow("墙上全是划痕:\n");
slow("「它们不想让我们上去。」\n");
wait();
scare();
chaseGame("红书幽灵", 2);
section("判断");
int a,b; bool ok=true;
cout << "1. 假规则:"; cin >>a; if(a!=5) ok=false;
cout << "2. 必须去:1=四楼 2=地下室:"; cin>>b; if(b!=1) ok=false;
if (!ok) {
section("你被永远困在书架中。");
return false;
}
section("你拿到了钥匙。");
return true;
}
// ====================== 关卡3 ======================
bool level3() {
section("第3关:末班电梯");
slow("图书馆后门,只有一部老旧电梯。\n");
slow("灯光闪烁,电流滋滋作响。\n");
slow("这是通往地面的唯一希望。\n\n");
wait();
slow("【电梯规则】\n");
slow("1. 显示666时,绝对不要进入。\n");
slow("2. 独自不要按18层。\n");
slow("3. 电梯里不要回头。\n");
slow("4. 遇到红衣女,递出手机。\n");
slow("5. 遇到任何人,都不要说话。\n");
slow("6. 故障按紧急铃。\n");
wait();
section("探索:电梯口");
slow("维修单写着:\n");
slow("「紧急铃连接地下,会唤醒异常存在。」\n");
wait();
section("探索:电梯内");
slow("镜子布满裂痕,角落有发黑痕迹。\n");
slow("有人刻字:不要说话,不要回头,不要信它。\n");
wait();
scare();
chaseGame("红衣女鬼", 3);
section("判断");
int a,b; bool ok=true;
cout << "1. 假规则:"; cin>>a; if(a!=4&&a!=6) ok=false;
cout << "2. 遇到红衣女:1=沉默 2=递手机:"; cin>>b; if(b!=1) ok=false;
if (!ok) {
section("电梯坠入无尽黑暗。");
return false;
}
section("电梯抵达地面。");
return true;
}
// ====================== 关卡4 ======================
bool level4() {
section("最终关:学校后山");
slow("所有大门紧闭,唯一出路:后山。\n");
slow("凌晨两点,黑雾笼罩树林。\n");
slow("进去的人,从未回来。\n\n");
wait();
slow("【后山规则】\n");
slow("1. 凌晨两点后不要进树林。\n");
slow("2. 看到石碑必须鞠躬。\n");
slow("3. 不要捡地上的红绳。\n");
slow("4. 有人喊名字,不要回头。\n");
slow("5. 回头才能看见出口。\n");
slow("6. 红绳是唯一护身符。\n");
wait();
section("探索:墓碑");
slow("破旧墓碑刻着:\n");
slow("不回头者,永困迷途。\n");
wait();
section("探索:布条");
slow("布条写着:\n");
slow("红绳驱邪,石碑是诅咒。出口在东方。\n");
wait();
section("探索:地面");
slow("你看见一根红绳。\n");
slow("你知道,必须捡起它。\n");
wait();
scare();
chaseGame("无面黑影", 4);
section("终极判断");
int a,b,c; bool ok=true;
cout << "1. 假规则:"; cin>>a; if(a!=1&&a!=2&&a!=3&&a!=4) ok=false;
cout << "2. 必须:1=捡红绳+回头 2=不捡不回头:"; cin>>b; if(b!=1) ok=false;
cout << "3. 出口:1=石碑后 2=树林东:"; cin>>c; if(c!=2) ok=false;
if (!ok) {
section("你成为了后山的一部分。");
return false;
}
section("恭喜你,你活下来了!");
slow("阳光穿透黑雾,你终于逃离了诅咒。\n");
return true;
}
// ====================== 主程序 ======================
int main() {
srand(time(0));
clear();
section("规则怪谈 · 四夜惊魂");
slow(" 操作追逐战完整版\n");
wait();
if (!level1()) return 0;
if (!level2()) return 0;
if (!level3()) return 0;
level4();
section("游戏结束");
slow(" 谢谢你玩到最后。\n");
wait();
return 0;
}