一个女士匹配100个男士时的游戏匹配算法逻辑


我来详细解释一个女士匹配100个男士时的游戏匹配算法逻辑。

image.png

## 游戏匹配算法流程

### 1. 前置检查
- 检查女士体力状态(每日3次机会,5分钟冷却)
- 检查是否有红绳道具(影响成功率)

### 2. 候选对象筛选流程

```
100个男士 → 多轮筛选 → 最终匹配对象
```

#### 第一轮:基础条件筛选
- **性别筛选**:只保留男士(假设100个都是男士)
- **排除自己**:不能匹配自己
- **结果**:假设剩余99个男士

#### 第二轮:生肖冲突筛选
- 检查女士生肖与每个男士生肖是否相冲、相害、相刑、相破
- **冲突规则**:
  - 相冲:鼠↔马、牛↔羊、虎↔猴、兔↔鸡、龙↔狗、蛇↔猪
  - 相害、相刑、相破等其他不利组合
- **结果**:假设排除20个冲突的,剩余79个

#### 第三轮:分数计算与筛选
对每个候选男士计算匹配分数(基础50分):

| 评分维度 | 加分 | 说明 |
|---------|------|------|
| 性别互补 | +10 | 男女搭配 |
| 生肖匹配 | +8 | 生肖相合(如鼠配牛) |
| 日主匹配 | +12 | 天干五合(如甲己合) |
| 五行互补 | +12 | 五行相生 |
| 教育背景 | +5 | 学历差距≤1级 |
| 职业 | +3 | 有职业信息 |
| 经济状况 | +5 | 房产车辆匹配 |
| 年龄差距 | +5 | 年龄差≤5岁 |
| 性格特点 | +6 | 共同性格特征 |
| 兴趣爱好 | +9 | 共同爱好 |
| 择偶要求 | +6 | 择偶要求匹配 |

- **最低分数要求**:75分
- **结果**:假设50个达到75分

#### 第四轮:择偶要求筛选
- 分析女士的择偶要求关键词
- 匹配男士的性格、爱好、职业、教育等属性
- **结果**:假设40个符合要求

### 3. 排序与选择

```python
# 按匹配分数降序排序
candidates.sort(key=lambda x: x[1], reverse=True)

# 取前N个(默认前5个)
top_candidates = candidates[:5]
```

### 4. 成功率判定

```python
# 基础成功率
success_rate = 0.5  # 50%

# 使用红绳道具
if has_red_string:
    success_rate = 0.9  # 90%

# 随机判定
import random
is_success = random.random() < success_rate
```

### 5. 匹配结果

#### 成功情况(50%或90%概率)
- 从top_candidates中随机选择1个
- 创建匹配记录(MatchRecord)
- 生成马牌数据
- 扣除体力,设置冷却

#### 失败情况(50%或10%概率)
- 扣除体力
- 返回"缘分云深不知处,马儿乏了,明日再来"

### 6. 实际代码流程

```python
def game_result():
    # 1. 检查体力
    stamina_status = check_stamina(child)
    if not stamina_status['can_play']:
        return 失败提示
    
    # 2. 获取所有候选(100个男士)
    candidates = Child.query.filter(
        Child.gender != child.gender,  # 异性
        Child.id != child.id           # 排除自己
    ).all()
    
    # 3. 筛选(生肖冲突、分数、择偶要求)
    filtered = filter_candidates_by_conflict(child, candidates)
    scored = filter_candidates_by_score(child, filtered, min_score=75)
    preferred = filter_by_partner_preference(child, scored)
    
    # 4. 排序取前5
    top_candidates = get_top_candidates(child, preferred, top_n=5)
    
    # 5. 成功率判定
    if random.random() < success_rate:
        # 成功:随机选择1个
        matched = random.choice(top_candidates)
        # 创建匹配记录、生成马牌
        use_stamina(child)
        return 成功结果
    else:
        # 失败
        use_stamina(child)
        return 失败提示
```

### 7. 关键特点

1. **多维度评分**:不只看单一条件,综合考量生肖、八字、性格、兴趣等
2. **渐进式筛选**:从100个逐步筛选到5个,再到1个
3. **随机性**:即使分数高,也有失败概率(增加游戏性)
4. **道具影响**:红绳道具显著提升成功率
5. **体力限制**:控制游戏频率,防止刷匹配

这个算法既保证了匹配质量(通过多轮筛选),又保留了游戏的趣味性(随机成功率和道具系统)。


收藏

扫描二维码,在手机上阅读
文章目录


    游戏推演算法详解

    2026年03月14日 热搜榜单,一览天下事

    评 论
    评论已关闭