新建项目

This commit is contained in:
2026-07-29 10:50:33 +08:00
parent bfd3841cbd
commit 4f69b859a8
49 changed files with 5565 additions and 0 deletions

137
pages/game/game.wxml Normal file
View File

@@ -0,0 +1,137 @@
<view class="game-page" wx:if="{{readyToRender}}">
<view class="game-head {{me.role === 'seeker' ? 'seeker-head' : 'hider-head'}}">
<view class="row between">
<view class="live-pill"><view class="live-dot"></view>{{stageLabel}}</view>
<view class="safe-state">● 边界内</view>
</view>
<view class="role-label">你的身份</view>
<view class="role-name">{{me.role === 'seeker' ? '寻找者' : '躲藏者'}}</view>
<view class="role-task">
{{me.role === 'seeker' ? '根据线索找到目标,用动态口令完成抓捕。' : '保持隐蔽,在倒计时结束前不要被发现。'}}
</view>
<view class="countdown">{{countdown}}</view>
</view>
<view class="page game-content">
<view class="stat-grid">
<view class="stat-card">
<view class="stat-value">{{survivors}}</view>
<view class="stat-label">仍在躲藏</view>
</view>
<view class="stat-card">
<view class="stat-value">{{seekers}}</view>
<view class="stat-label">正在寻找</view>
</view>
<view class="stat-card">
<view class="stat-value">{{room.settings.radiusMeters}}m</view>
<view class="stat-label">安全半径</view>
</view>
</view>
<view wx:if="{{room.status === 'preparing'}}" class="preparing-card">
<view class="preparing-icon">◌</view>
<view class="card-title">准备阶段</view>
<view class="preparing-copy">
{{me.role === 'seeker' ? '请留在起点,不要观察躲藏者的方向。倒计时结束后会震动提醒。' : '现在出发寻找安全藏身处,不要进入封闭、危险或私人区域。'}}
</view>
</view>
<view wx:elif="{{room.status === 'paused'}}" class="preparing-card">
<view class="preparing-icon">Ⅱ</view>
<view class="card-title">游戏暂停中</view>
<view class="preparing-copy">请留在安全位置并等待房主继续游戏,暂停期间倒计时和线索计时均不会推进。</view>
</view>
<block wx:else>
<view wx:if="{{room.settings.skillsEnabled && (me.status === 'seeking' || me.status === 'hiding')}}">
<view class="section-label">角色能力</view>
<view class="skill-card">
<view class="skill-icon">{{me.role === 'seeker' ? '⌁' : '◐'}}</view>
<view class="skill-main">
<view class="card-title">{{me.role === 'seeker' ? '区域雷达' : '静默信号'}}</view>
<view class="skill-copy">
{{me.role === 'seeker' ? '检测附近是否可能存在躲藏者,不显示精确方向。' : '跳过下一次周期性位置广播。'}}
</view>
</view>
<button
class="skill-button {{skillUsed ? 'used' : ''}}"
disabled="{{skillUsed}}"
bindtap="useSkill"
>{{skillUsed ? '已使用' : '使用'}}</button>
</view>
</view>
<view wx:if="{{me.role === 'seeker' && me.status === 'seeking'}}">
<view class="section-label">抓捕确认</view>
<view class="capture-card">
<view class="capture-title">选择你在线下找到的目标</view>
<view class="target-list">
<view
wx:for="{{captureTargets}}"
wx:key="id"
class="target-chip {{selectedTargetId === item.id ? 'selected' : ''}}"
data-id="{{item.id}}"
bindtap="chooseCaptureTarget"
>{{item.name}}</view>
</view>
<view class="capture-copy">请在安全距离内完成确认,禁止追逐中发生身体接触。</view>
<input
type="number"
maxlength="4"
value="{{submittedCode}}"
placeholder="0000"
bindinput="inputCaptureCode"
/>
<view wx:if="{{showDemoCode}}" class="demo-code" bindtap="fillDemoCode">
原型演示:点击填入口令 {{captureCode}}
</view>
<button
class="secondary-button capture-button"
loading="{{captureSubmitting}}"
disabled="{{captureSubmitting || !selectedTargetId || submittedCode.length !== 4}}"
bindtap="submitCapture"
>确认抓捕</button>
</view>
</view>
<view wx:elif="{{me.role === 'hider' && me.status === 'hiding'}}">
<view class="section-label">你的动态口令</view>
<view class="token-card">
<view class="token-label">被找到后,将口令展示给寻找者</view>
<view class="token-code">{{captureCode}}</view>
<view class="token-note">每 30 秒刷新 · 不要远程发送口令</view>
</view>
</view>
<view wx:else class="preparing-card player-finished-card">
<view class="card-title">你已结束躲藏</view>
<view class="preparing-copy">经典模式下可以留在安全区域观战,请勿向其他玩家透露信息。</view>
</view>
<view class="section-label">实时事件</view>
<view class="event-list">
<view wx:if="{{eventViews.length === 0}}" class="empty-inline">还没有游戏事件</view>
<view wx:for="{{eventViews}}" wx:key="id" class="event-row">
<view class="event-mark {{item.type}}"></view>
<view class="event-message">{{item.message}}</view>
<view class="event-time">{{item.time}}</view>
</view>
</view>
</block>
<view class="safety-actions">
<button class="danger-button" bindtap="showSafety">安全与退出</button>
<button wx:if="{{canManage}}" class="ghost-button" bindtap="togglePause">
{{room.status === 'paused' ? '继续游戏' : '暂停游戏'}}
</button>
<button wx:if="{{canManage}}" class="ghost-button" bindtap="finishEarly">提前结束</button>
</view>
</view>
</view>
<view class="state-page" wx:elif="{{errorMessage}}">
<view class="state-icon">!</view>
<view class="state-title">无法恢复游戏</view>
<view class="state-copy">{{errorMessage}}</view>
<button class="primary-button state-action" bindtap="backHome">返回首页</button>
</view>