console
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>原神里的那个夏天</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{min-height:100vh;display:flex;align-items:center;justify-content:center;
background:#0c1020;color:#d6ddef;padding:20px;
font-family:"PingFang SC","Microsoft YaHei",sans-serif}
#game{max-width:660px;width:100%;background:#161e32;border-radius:20px;
padding:36px 32px;border:1px solid #2a3654}
h1{font-size:21px;letter-spacing:3px;color:#8fb4ff;text-align:center;margin-bottom:6px}
.sub{text-align:center;font-size:12px;color:#6b7a9e;margin-bottom:26px}
#text{font-size:16px;line-height:1.9;min-height:160px;white-space:pre-wrap;margin-bottom:26px}
#choices{display:flex;flex-direction:column;gap:12px}
button{background:#1c2742;border:1.5px solid #3a4a78;color:#c8d2ea;
padding:14px 18px;font-size:15px;font-family:inherit;border-radius:12px;
cursor:pointer;text-align:left;transition:all .2s}
button:hover{border-color:#8fb4ff;background:#243358;color:#eaf1ff;transform:translateX(4px)}
</style>
</head>
<body>
<div id="game">
<h1>原 神 里 的 那 个 夏 天</h1>
<div class="sub">— 男生视角 · 你的选择会写出不一样的故事 —</div>
<div id="text"></div>
<div id="choices"></div>
</div>
<script>
var S = {
start: {
t: "那年夏天,我在原神里随机匹配到一个萌新。\n\n她操作很生疏,打怪总被拍飞,找宝箱常常绕圈。我笑着带她满地图跑,教她打反应、找神瞳。\n\n她说:“谢谢你啊,大佬。”\n\n我不知道——这个“萌新”,开的是小号。",
c: [["认真带她,每天上线第一件事就是看她在不在", "care"], ["随手带带,反正闲着也是闲着", "casual"]]
},
care: {
t: "我认真地带她。打怪、开宝箱、站在璃月山顶看日落。\n\n她话不多,但每次我说笑话,她都会回一个“哈哈哈”。\n\n有一天她说:“谢谢你,让我觉得这游戏没那么孤单。”",
c: [["回她:我也是", "lost"], ["打个哈哈糊弄过去", "cold1"]]
},
casual: {
t: "我随手带了她几天。她操作慢慢熟练,我们也聊得越来越多。\n\n直到她说:“谢谢你,让我觉得这游戏没那么孤单。”\n\n我盯着这句话看了很久。",
c: [["认真回她一句", "care"], ["还是打个哈哈", "lost"]]
},
cold1: {
t: "我打了个哈哈:“客气啥。”\n\n她回了个笑脸,没再多说。\n\n从那以后,她上线越来越少。我有点慌,却说不清为什么。",
c: [["主动去找她", "lost"], ["算了,随缘吧", "end_drift"]]
},
lost: {
t: "有一天,我的账号登不上了。\n\n折腾半天,只剩一个全新的小号。我对她说:“号丢了,你带我玩吧。”\n\n她沉默了一下:“我……带不动你。”\n\n后来我才知道,她的小号根本打不过我需要的怪。偶尔有别的厉害大佬来带我,她就再也没进过我的世界。",
c: [["主动找她,说没她带也行", "reach"], ["等她来找我", "drift"]]
},
reach: {
t: "我发消息:“其实不用你带,一起逛地图也行。”\n\n她回得很快:“真的吗?”\n\n“真的。”\n\n那天我们又一起上线了。可她还是在在意——她总觉得自己帮不上我。",
c: [["告诉她:陪着就够了", "leads"], ["没多想,各玩各的", "drift"]]
},
drift: {
t: "我们不再一起打怪,也不再一起看风景。\n\n她大概觉得,我有了别人带,就不需要她了。\n\n直到有一天,她用满级大号加了我:“其实……我一直不是萌新。”\n\n那一刻我愣住了。原来从一开始,就是她在陪我。",
c: [["问她:为什么瞒着我?", "why"], ["没问,说:那以后你带我", "leads"]]
},
why: {
t: "她沉默很久:“怕你觉得我厉害,就不带我玩了。”\n\n“也怕……你只是需要一个萌新,不是我。”\n\n我看着这句话,心里有点堵。原来她一直在小心翼翼。",
c: [["告诉她:我要的不是萌新,是你", "leads"], ["没接话,岔开话题", "cold2"]]
},
cold2: {
t: "我岔开了话题。她也没再提。\n\n从那以后,她带我打本、找宝箱,可我们之间像隔了一层什么。\n\n她好像,慢慢收回了什么。",
c: [["后来,她对我表达了心意", "reject2"]]
},
leads: {
t: "从那以后,角色反了过来,她带我打本、找宝箱。\n\n我们依旧每天一起玩,可有些东西悄悄变了——不是游戏里的角色,是我看她的心情。\n\n她好像也察觉到了。有一天,她小心翼翼地对我表达了心意。",
c: [["接受她", "accept"], ["没接受,说高考要紧", "reject"]]
},
accept: {
t: "我没有犹豫,接受了她。\n\n那段时间,我们不只是游戏搭档,每天聊到很晚。\n\n可她要高考了,压力越来越大。我们开始因为小事吵架,她越来越沉默。\n\n有一天她说:“要不……我们先断一段时间吧。”",
c: [["同意,等高考完再说", "exam_warm"], ["不同意,想一直陪着她", "exam_tired"]]
},
exam_warm: {
t: "我们约定高考之后再联系。\n\n那段时间我没打扰她,只是偶尔会想起璃月山顶的日落。\n\n高考结束那天,我打开手机,看到她的消息:“考得怎么样?”",
c: [["认真回她,约她重新上线", "amb"], ["回了句“还行”,没多说", "after"]]
},
exam_tired: {
t: "我没同意断联,想一直陪着她。\n\n可那段时间,她越来越累,消息回得越来越慢。\n\n有一天她说:“你这样,我压力很大。”\n\n我愣住了。",
c: [["道歉,给她空间", "exam_warm"], ["觉得委屈,赌气不理她", "end_drift"]]
},
reject: {
t: "我没有接受。\n\n加上她要高考了,她不得不和我断了联系。\n\n现实里的她,是个很内向、不爱说话的女孩。是我,让她开始慢慢改变自己。\n\n她大概很难过吧。可她还是走了。",
c: [["高考之后,主动去找她", "after"], ["算了,让时间冲淡吧", "end_drift"]]
},
reject2: {
t: "她对我表达了心意,我没有接受。\n\n加上她要高考了,她和我断了联系。\n\n这一次,她走得很安静,连一句再见都没说。\n\n我偶尔会想,如果那天我没有岔开话题,会不会不一样。",
c: [["高考之后,试着找她", "after"], ["就这样吧", "end_drift"]]
},
after: {
t: "高考结束,她重新找到了我。\n\n她问我过得怎么样。我想找她好好聊聊,可那一晚她睡得早,错过了。\n\n又过了一天,我们才终于联系上。可这次聊天,疏远得连朋友都不如。",
c: [["主动找话题,慢慢拉近距离", "amb"], ["觉得回不去了,保持距离", "end_drift"]]
},
amb: {
t: "不知从什么时候起,我开始主动找她。\n\n她一开始是抗拒的,说怕再次陷进去、再次伤心。可我们还是开始了暧昧。\n\n那段时间很开心。每天都期待对方的消息,每晚都聊到很晚。\n\n后来,我们在一起了。",
c: [["好好珍惜她", "together"], ["心里还是有点不确定", "together"]]
},
together: {
t: "刚在一起时,我依旧热情。可渐渐地,我开始疏远。\n\n她一靠近,我就想退。有时候很喜欢她,有时候又说不清。\n\n我提过两次分手。一次是因为自卑,一次是因为生气。她都没有同意,说可以磨合。\n\n可我越来越冷淡,越走越远。",
c: [["停下来,正视自己的问题", "fix"], ["继续这样,直到她提分手", "break"]]
},
fix: {
t: "有一天,我看着她的消息,突然意识到——\n\n我一靠近就想逃,不是因为她不好,是因为我不相信自己值得被喜欢。\n\n我给她打了电话,第一次把这些话说出口。\n\n她听完,很久没说话。然后说:“你怎么不早说。”",
c: [["这一次,好好在一起", "end_perfect"], ["还是没忍住,又退开了", "break"]]
},
break: {
t: "她忍不住提了分手,我没同意。\n\n她又提了一次。这一次,我同意了。\n\n我们就这么分开了。\n\n我知道,她还喜欢我。",
c: [["分手一周后,她在游戏里找到我……", "last"]]
},
last: {
t: "她说她要退游了,以后都不会再玩这个游戏。\n\n她问我要不要她的游戏账号。我拒绝了。\n\n她问能不能复合。我坚定地拒绝了。\n\n然后,我删掉了她的游戏好友。\n\n她退了游,再也没登上过。我没有删她的联系方式,却时常会看她的社交动态。",
c: [["直到有一天,我突然找到她……", "borrow"]]
},
borrow: {
t: "我的账号被禁言了。我找到她,问她能不能借她的游戏账号。\n\n她同意了,问我:“你不记得我的手机号了?”\n\n我说忘记了。可话一出口,又说:“算了,不用了。”\n\n她刚巧把手机号发给了我。之后,我没再回。\n\n她以为我是玩真心话大冒险输了才找她:“如果是输了,就不要发给我,很无聊。”\n\n我回了三个问号。她也没再回应。\n\n就这样,我们沉寂了。我会看她的动态,她会看我还会不会关注她。\n\n只是,我们再也没了联系。",
c: [["【结局一】就这样沉寂下去", "end_silence"],
["【结局二】那个问号之后,我打了电话", "end_call"],
["【结局三】很久以后,我们在提瓦特重逢", "end_reunion"],
["【完满结局】这一次,我没有再退", "end_perfect"]]
},
end_drift: { t: "我们没有走到最后。\n\n不是谁做错了什么,只是有些机会,错过了就是错过了。\n\n后来我偶尔还会想起她,想起那个打怪总被拍飞的“萌新”。\n\n提瓦特的风还在吹,可我们再也没一起看过日落。\n\n【结局 · 擦肩而过】", c: [] },
end_silence: { t: "那三个问号,成了我们最后的对话。\n\n后来我偶尔还会点开她的头像。她的动态更新得越来越少,最后停在某个普通的下午。\n\n我也退游了。\n\n提瓦特的风还在吹,可我们再也没一起看过日落。\n\n【结局 · 沉寂】", c: [] },
end_call: { t: "那三个问号发出去之后,我盯着屏幕看了很久。\n\n然后,我翻出那个她刚发给我的号码,按下了拨号键。\n\n响了三声,她接了。电话那头很安静。\n\n我说:“不是真心话大冒险。”\n\n她沉默了一会儿,轻轻“嗯”了一声。\n\n那一晚我们没聊游戏,也没聊过去,只是像两个普通人一样,说了很久的话。\n\n【结局 · 迟来的电话】", c: [] },
end_reunion: { t: "很久以后,我重新登上了那个游戏。\n\n在璃月的山顶,我看见一个熟悉的 ID 站在那里看日落。\n\n她好像也看见了我。我们谁都没动,就那么站着。\n\n过了很久,她发来一条消息:“你也回来了?”\n\n我回:“嗯。来看日落。”\n\n【结局 · 提瓦特重逢】", c: [] },
end_perfect: { t: "那三个问号之后,我没有再像从前那样退开。\n\n我给她打了电话,说了很多从前没说出口的话——我的自卑、我的别扭、我一靠近就想逃的毛病。\n\n她听完很久没说话。然后她说:“我等这句话,等了很久。”\n\n这一次,我们慢慢来。不急着暧昧,不急着在一起,也不急着分开。\n\n后来我们又一起上了游戏。她带我打本,我陪她看日落。\n\n现实里的她,还是不太爱说话。可她会对我说很多很多话。\n\n我知道,这一次,我不会再让她一个人退游了。\n\n【完满结局 · 这一次,我没有再退】", c: [] }
};
var textEl = document.getElementById('text');
var choicesEl = document.getElementById('choices');
function render(key) {
var node = S[key];
textEl.textContent = node.t;
choicesEl.innerHTML = '';
if (!node.c || node.c.length === 0) {
var b = document.createElement('button');
b.textContent = '↻ 从头再看一次';
b.onclick = function(){ render('start'); };
choicesEl.appendChild(b);
return;
}
node.c.forEach(function(item){
var b = document.createElement('button');
b.textContent = item[0];
b.onclick = function(){ render(item[1]); };
choicesEl.appendChild(b);
});
}
render('start');
</script>
</body>
</html>