Java实现王者匹配机制(简易版)

最近打王者被制裁的有点惨,突发奇想,用代码实现下王者的匹配机制。先声明,我不是什么算法大神,轻喷。

分析:王者匹配机制会让一个人的胜率总是保持在50%左右,即胜率高了,给你匹配坑队友降低胜率,低了给你匹配几个大神带你飞。

围绕这个点,进行设计。大概思路为:设置一个隐藏分,如果你的隐藏分高于当前段位,就给你降低胜率,反正则提升胜率,具体代码实现如下。

玩家模型类

package com.ty.atlantis.base.kingofglorymodel;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * @author :TianYuan
 * @date :Created in 2022/3/25 14:51
 * @description:高端玩家模型
 * @modified By:
 */
public class HighEndPlayer {

    /**
     * 排位段位和战力息息相关。
     * 此处采用的简易算法是:
     * 假设玩家初始段位为钻石50,战力为5000,赢一把mvp后段位为51,战力为5000+130=5130
     * 51段位对应的战力为5100。为了修正段位对应的战力,系统会匹配几个坑货降低胜率
     */

    //排位段位 假设初始为钻石5/0星。枚举值为50
    private int rankLevel = 50;

    //战力(隐藏分),默认5000,正常输一把减105,正常赢一把加110。败方MVP不减,赢方Mvp加130
    private long flightPower = 5000;

    //活跃度,默认80,上限100。玩家连续上线每天+5,一天不上线-2,当连续不上线活跃度掉到70就不再减
    private int activity = 80;

    //贵族等级
    private int vipLevel;

    //氪金总额
    private BigDecimal amount;

    public String getRankLevelMean(int rankLevel){
        Map<Integer,String> map = new HashMap<>();
        map.put(39,"铂金二零星");
        map.put(40,"铂金二一星");
        map.put(41,"铂金二二星");
        map.put(42,"铂金二三星");
        map.put(43,"铂金二四星");
        map.put(44,"铂金二五星");
        map.put(45,"铂金一一星");
        map.put(46,"铂金一二星");
        map.put(47,"铂金一三星");
        map.put(48,"铂金一四星");
        map.put(49,"铂金一五星");
        map.put(50,"钻石五零星");
        map.put(51,"钻石五一星");
        map.put(52,"钻石五二星");
        map.put(53,"钻石五三星");
        map.put(54,"钻石五四星");
        map.put(55,"钻石五五星");
        map.put(56,"钻石四零星");
        map.put(57,"钻石四一星");
        map.put(58,"钻石四二星");
        map.put(59,"钻石四三星");
        map.put(60,"钻石四四星");
        map.put(61,"钻石四五星");
        map.put(62,"钻石三零星");
        map.put(63,"钻石三一星");
        map.put(64,"钻石三二星");
        map.put(65,"钻石三三星");
        map.put(66,"钻石三四星");
        map.put(67,"钻石三五星");
        map.put(68,"钻石二零星");
        map.put(69,"钻石二一星");
        map.put(70,"钻石二二星");
        map.put(71,"钻石二三星");
        map.put(72,"钻石二四星");
        map.put(73,"钻石二五星");
        map.put(74,"钻石一零星");
        map.put(75,"钻石二一星");
        map.put(76,"钻石一二星");
        map.put(77,"钻石一三星");
        map.put(78,"钻石一四星");
        map.put(78,"钻石一五星");
        return map.get(rankLevel);
    }

    public int getRankLevel() {
        return rankLevel;
    }

    public void setRankLevel(int rankLevel) {
        this.rankLevel = rankLevel;
    }

    public long getFlightPower() {
        return flightP
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值