Files
NumberSwipe_New/campaign-50/tools/add-entries.py
T

24 lines
2.0 KiB
Python

from pathlib import Path
import json,csv
root=Path(r'G:\项目\NumberSwipe-Variants');demo=root/'campaign-50'
# Add a convenient entry without rebuilding or touching the existing mode files.
entry='<a href="campaign-50/index.html" class="card"><span class="pill">可玩DEMO · 50关</span><h2>50关统一主线</h2><p>五章渐进 · 奇偶与机制组合 · 全部关卡开放</p></a>'
p=root/'index.html';s=p.read_text(encoding='utf-8-sig')
if 'href="campaign-50/index.html"' not in s:s=s.replace('<div class="cards">','<div class="cards">'+entry,1)
p.write_text(s,encoding='utf-8')
p=root/'tools/build.mjs';s=p.read_text(encoding='utf-8-sig')
if entry not in s:s=s.replace('<div class="cards">${definitions.map','<div class="cards">'+entry+'${definitions.map',1)
p.write_text(s,encoding='utf-8')
link='<p class="callout"><strong>50关可玩版已制作:</strong><a href="../../campaign-50/index.html">打开50关DEMO →</a> 本页保留原始设计目标,制作验收见试玩目录报告。</p>'
p=root/'design/demo-50/index.html';s=p.read_text(encoding='utf-8-sig')
if '../../campaign-50/index.html' not in s:s=s.replace('<div class="banner">',link+'<div class="banner">',1)
p.write_text(s,encoding='utf-8')
p=root/'design/demo-50/build-h5.py';s=p.read_text(encoding='utf-8-sig')
if link not in s:s=s.replace('<div class="banner">',link+'<div class="banner">',1)
p.write_text(s,encoding='utf-8')
notes=json.loads((demo/'design.json').read_text(encoding='utf-8'))
with (demo/'reports/difficulty-observations.csv').open('w',encoding='utf-8-sig',newline='') as f:
writer=csv.writer(f);writer.writerow(['order','level_id','title','target_difficulty','node_count','immediate_choice_points','mechanism_count','human_difficulty','feedback'])
for n in notes:writer.writerow([n['level']['order'],n['level']['id'],n['level']['title'],n['level']['targetDifficulty'],len(n['level']['cells']),n['metrics']['noImmediateConflictChoices'],len(n['witnesses']),'',''])
print('Added playable entries and feedback CSV without modifying old mode files.')