java英雄联盟战斗力题目,Java 查询英雄联盟玩家战绩

先来张效果图

b3ecd6ee3ab9c11fda7b899e3fa0e03d.png

首先新建两个实体类

//玩家的信息

public class Player {

private String id;// 用户名

private String tier;//大段位

private String rank;// 小段位

private String league_points;// 胜点

private String rank_games;// 排位场数

private String rank_winRate;// 排位胜率

private String general_games;// 匹配场数

private String general_winRate;// 匹配胜率

private String loginTime;// 最后登录时间

private String fighting;// 战斗力

private int latelyGameRate;//最近几场游戏胜率

private String assess;//评价

public String getAssess() {

return assess;

}

public void setAssess(String assess) {

this.assess = assess;

}

public String getTier() {

return tier;

}

public void setTier(String tier) {

this.tier = tier;

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getRank() {

return rank;

}

public void setRank(String rank) {

this.rank = rank;

}

public String getLeague_points() {

return league_points;

}

public void setLeague_points(String league_points) {

this.league_points = league_points;

}

public String getRank_games() {

return rank_games;

}

public void setRank_games(String rank_games) {

this.rank_games = rank_games;

}

public String getRank_winRate() {

return rank_winRate;

}

public void setRank_winRate(String rank_winRate) {

this.rank_winRate = rank_winRate;

}

public String getGeneral_games() {

return general_games;

}

public void setGeneral_games(String general_games) {

this.general_games = general_games;

}

public String getGeneral_winRate() {

return general_winRate;

}

public void setGeneral_winRate(String general_winRate) {

this.general_winRate = general_winRate;

}

public String getLoginTime() {

return loginTime;

}

public void setLoginTime(String loginTime) {

this.loginTime = loginTime;

}

public String getFighting() {

return fighting;

}

public void setFighting(String fighting) {

this.fighting = fighting;

}

public int getLatelyGameRate() {

return latelyGameRate;

}

public void setLatelyGameRate(int latelyGameRate) {

this.latelyGameRate = latelyGameRate;

}

}

import net.sf.json.JSONArray;

//英雄信息

public class Hero {

private String championName;

private String championNameCN;

private String winRate;// 胜率

private String matchStat;// 场数

private JSONArray averageKDA;// 场均 杀/死/助

private String averageKDARating;// 场均KDA

private JSONArray averageDamage;// 场均输出

private JSONArray averageEarn;

private String averageMinionsKilled;

private String totalMVP;// MVP次数

private String totalHope;

@Override

public String toString() {

return "Hero [championNameCN=" + championNameCN + ", winRate="

+ winRate + ", matchStat=" + matchStat + ", averageKDA="

+ averageKDA + ", averageKDARating=" + averageKDARating

+ ", totalMVP=" + totalMVP + "]";

}

private JSONArray championPoints;

public String getChampionName() {

return championName;

}

public void setChampionName(String championName) {

this.championName = championName;

}

public String getChampionNameCN() {

return championNameCN;

}

public void setChampionNameCN(String championNameCN) {

this.championNameCN = championNameCN;

}

public String getWinRate() {

return winRate;

}

public void setWinRate(String winRate) {

this.winRate = winRate;

}

public String getMatchStat() {

return matchStat;

}

public void setMatchStat(String matchStat) {

this.matchStat = matchStat;

}

public JSONArray getAverageKDA() {

return averageKDA;

}

public void setAverageKDA(JSONArray averageKDA) {

this.averageKDA = averageKDA;

}

public String getAverageKDARating() {

return averageKDARating;

}

public void setAverageKDARating(String averageKDARating) {

this.averageKDARating = averageKDARating;

}

public JSONArray getAverageDamage() {

return averageDamage;

}

public void setAverageDamage(JSONArray averageDamage) {

this.averageDamage = averageDamage;

}

public JSONArray getAverageEarn() {

return averageEarn;

}

public void setAverageEarn(JSONArray averageEarn) {

this.averageEarn = averageEarn;

}

public String getAverageMinionsKilled() {

return averageMinionsKilled;

}

public void setAverageMinionsKilled(String averageMinionsKilled) {

this.averageMinionsKilled = averageMinionsKilled;

}

public String getTotalMVP() {

return totalMVP;

}

public void setTotalMVP(String totalMVP) {

this.totalMVP = totalMVP;

}

public String getTotalHope() {

return totalHope;

}

public void setTotalHope(String totalHope) {

this.totalHope = totalHope;

}

public JSONArray getChampionPoints() {

return championPoints;

}

public void setChampionPoints(JSONArray championPoints) {

this.championPoints = championPoints;

}

}

再建一个枚举,用于保存和查询服务器名字

import java.util.HashMap;

import java.util.Map;

// 定义枚举类

public enum ENUMServerData {

server1("电信一", "艾欧尼亚"), server2("网通一", "比尔吉沃特"), server3("电信二", "祖安"), server4("电信三", "诺克萨斯"), server5(

"网通二", "德玛西亚"), server6("电信四", "班德尔城"), server7("电信五", "皮尔特沃夫"), server8("电信六", "战争学院"), server9(

"网通三", "弗雷尔卓德"), server10("电信七", "巨神峰"), server11("电信八", "雷瑟守备"), server12("网通四",

"无畏先锋"), server13("电信九", "裁决之地"), server14("电信十", "黑色玫瑰"), server15("电信十一", "暗影岛"), server16(

"电信十二", "钢铁烈阳"), server17("网通五", "恕瑞玛"), server18("电信十三", "均衡教派"), server19("电信十四",

"水晶之痕"), server20("电信十五", "影流"), server21("电信十六", "守望之海"), server22("网通六", "扭曲丛林"), server23(

"电信十七", "征服之海"), server24("电信十八", "卡拉曼达"), server25("电信十九", "皮城警备"), server26("网通七",

"巨龙之巢");

private String serverNum;

private String serverName;

private ENUMServerData(String a, String b) {

this.serverNum = a;

this.serverName = b;

}

public String getServerName() {

return serverName;

}

public String getServerNum() {

return serverNum;

}

//根据残缺的大区名,智能从枚举中取完整大区名

//如输入黑色,即可识别为黑色玫瑰

public static Map GetServer(String s) {

Map map = null;

ENUMServerData[] sd = ENUMServerData.values();

for (ENUMServerData server : sd) {

if ((server.getServerNum() + server.getServerName()).indexOf(s) != -1) {

map = new HashMap();

map.put("serverName", server.getServerName());

map.put("serverNum", server.getServerNum());

break;

}

}

return map;

}

}

查询

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.Future;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.select.Elements;

import com.yemao.pojo.Hero;

import com.yemao.pojo.Player;

import util.WebUtil;

public class lolService {

/**

* 查询

*

* @param server

* 大区

* @param name

* 玩家ID

* @return

* @throws InterruptedException

* @throws ExecutionException

*/

public static Map query(String server, String name)

throws InterruptedException, ExecutionException {

// 从枚举中查询对应的名称

Map smap = ENUMServerData.GetServer(server);

String serverName = smap.get("serverName").toString();

String serverNum = smap.get("serverNum").toString();

// 返回的Map

Map map = new HashMap();

// 建立一个线程池

ExecutorService pool = Executors.newFixedThreadPool(2);

Callable c1 = new queryHeroData(serverName, name);

Callable c2 = new queryUser(serverNum, name);

// 执行线程

Future task1 = pool.submit(c1);

Future task2 = pool.submit(c2);

// 等待线程执行完毕

pool.shutdown();

while (true) {

if (pool.isTerminated()) {

break;

}

}

// 线程返回的对象

map.put("heroData", task1.get());

map.put("userData", task2.get());

return map;

}

}

/**

* 线程-获取英雄数据

*

* @author Administrator

*

*/

class queryHeroData implements Callable {

private String name, server;

queryHeroData(String server, String name) {

this.server = server;//大区名,如黑色玫瑰

this.name = name;

}

public Object call() throws Exception {

try {

server = URLEncoder.encode(server, "utf-8");

name = URLEncoder.encode(name, "utf-8");

String result = WebUtil.sendGet("http://lolbox.duowan.com/new/api/index.php",

"_do=personal/championslist&serverName=" + server + "&playerName=" + name);

if (result.equals("")) {

return null;

}

// Unicode解密

result = WebUtil.decodeUnicode(result);

List list = new ArrayList();

// 解析返回的json数据

JSONObject jb = JSONObject.fromObject(result);

JSONArray jsons = jb.getJSONArray("content");

for (int i = 0; i < jsons.size(); i++) {

JSONObject tempJson = JSONObject.fromObject(jsons.get(i));

tempJson.remove("championPoints");

Hero hero = (Hero) JSONObject.toBean(tempJson, Hero.class);

list.add(hero);

}

// 根据英雄胜率排序

Collections.sort(list, new Comparator() {

public int compare(Hero arg0, Hero arg1) {

int hits0 = Integer.parseInt(arg0.getMatchStat());

int hits1 = Integer.parseInt(arg1.getMatchStat());

if (hits1 > hits0) {

return 1;

} else if (hits1 == hits0) {

return 0;

} else {

return -1;

}

}

});

return list;

} catch (Exception e) {

return null;

}

}

}

/**

* 线程-获取玩家信息

*

* @author Administrator

*

*/

class queryUser implements Callable {

private String name, server;

queryUser(String server, String name) {

this.server = server;//大区,如 电信十

this.name = name;

}

public Object call() throws Exception {

server = URLEncoder.encode(server, "utf-8");

name = URLEncoder.encode(name, "utf-8");

Player player = new Player();

String url = "http://lolbox.duowan.com/playerDetail.php";// 完整URL

String submitI = "serverName=" + server + "&playerName=" + name;// 提交信息

String result = WebUtil.sendGet(url, submitI);

if (result.equals("")) {

return null;

}

try {

Document doc = Jsoup.parse(result, "utf-8");

Elements links = doc.select(".fighting span");

// 战斗力

player.setFighting(links.get(0).text());

// 最后登录

player.setLoginTime(links.get(0).attr("title").split(":")[1]);

// 玩家ID

player.setId(doc.select("#playerNameLink").get(0).text());

// AJAX取玩家实时信息

String json = WebUtil.sendGet("http://lolbox.duowan.com/ajaxGetWarzone.php",

"serverName=" + server + "&playerName=" + name);

JSONObject jb = JSONObject.fromObject(json);

// 大段位

player.setTier(jb.getString("tier"));

// 小段位

String rank = jb.getString("rank");

if (rank.equals("null")) {

rank = "";// 最强王者没有小段位,设为空字符串

}

player.setRank(rank);

// 胜点

player.setLeague_points(jb.getString("league_points"));

links = doc.select(".mod-tabs-content:eq(0) tr:eq(1) td");

// 匹配场数

player.setGeneral_games(links.get(1).text());

// 匹配胜率

player.setGeneral_winRate(links.get(2).text());

links = doc.select(".mod-tabs-content:eq(1) tr:eq(1) td");

// 排位场数

player.setRank_games(links.get(3).text());

// 排位胜率

player.setRank_winRate(links.get(4).text());

// 计算最近几场游戏胜率

double rate = (double) doc.select(".green").size() / 7.0 * 100;

player.setLatelyGameRate((int) rate);

return calculateAssess(player);

} catch (Exception e) {

System.out.println("Elements Error!");

return null;

}

}

/**

* 战绩分析,评价

*

* @param player

* @return

*/

private Player calculateAssess(Player player) {

if (player.getTier() == null) {

return player;

}

String TIME_ARRAY[] = "万年/资深/爬行艰难的/游刃有余的".split("/");

String CARRY_ARRAY[] = "Carry型/稳定型/混分型/深坑型".split("/");

String ROLE_ARRAY[] = "大神/玩家/小学生".split("/");

String timeAccess = null;

String carryAccess = null;

String roleAccess = null;

String tier = player.getTier();// 大段位

Double rate = Double.parseDouble(player.getRank_winRate().replace("%", ""));// 排位胜率

int games = Integer.parseInt(player.getRank_games());// 排位场数

int limit[] = null;

if (tier == null) {

return player;

}

// 自定义规则,不同分段对应的排位场数。场数越多越坑

switch (tier) {

case "青铜":

limit = new int[] { 300, 100, 50 };

break;

case "白银":

limit = new int[] { 800, 500, 150 };

break;

case "黄金":

limit = new int[] { 800, 500, 200 };

break;

case "铂金":

limit = new int[] { 1200, 800, 300 };

break;

case "钻石":

limit = new int[] { 1500, 800, 400 };

break;

default:

// 大师王者

limit = new int[] { 1800, 1000, 500 };

}

// 根据上方规则进行判断

if (games >= limit[0]) {

timeAccess = TIME_ARRAY[0];

} else if (games < limit[0] && games >= limit[1]) {

timeAccess = TIME_ARRAY[1];

} else if (games < limit[1] && games >= limit[2]) {

timeAccess = TIME_ARRAY[2];

} else if (games <= limit[2]) {

timeAccess = TIME_ARRAY[3];

}

// 根据胜率进行判断

if (rate >= 55) {

carryAccess = CARRY_ARRAY[0];

roleAccess = ROLE_ARRAY[0];

} else if (rate < 55 && rate >= 51) {// 51~54

carryAccess = CARRY_ARRAY[1];

roleAccess = ROLE_ARRAY[1];

} else if (rate < 51 && rate >= 48) {// 48~50

carryAccess = CARRY_ARRAY[2];

roleAccess = ROLE_ARRAY[1];

} else if (rate <= 47) {

carryAccess = CARRY_ARRAY[3];

roleAccess = ROLE_ARRAY[2];

}

// 接拼评价

String assess = timeAccess + carryAccess + player.getTier() + roleAccess;

// System.out.println(assess);

player.setAssess(assess);

return player;

}

}

测试

public static void main(String[] args) {

try {

String name = "玩家ID";

//枚举那里做了智能判断,输入大区名前几个字也可,如黑色自动识别为黑色玫瑰

String server = "大区";

Map map = lolService.query(server, name);

System.out.println(map.get("heroData"));

System.out.println(map.get(userData"));

} catch (Exception e) {

// TODO: handle exception

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目六 英雄联盟2020年中韩联赛数据分析r语言。 英雄联盟是一款非常受欢迎且竞争激烈的电子竞技游戏。2020年,中韩两国的英雄联盟联赛备受关注。为了深入了解该赛季的数据,我们使用R语言进行数据分析。 首先,我们需要收集中韩联赛的相关数据。这包括比赛结果、选手数据、队伍数据以及比赛时的时间和地点等信息。我们可以通过爬虫技术从官方网站或其他数据源上获取这些数据。收集到数据后,我们使用R语言的数据处理和整理功能对数据进行清洗和格式化,以便进行后续的分析。 接下来,我们可以对比赛结果进行分析。通过统计每个队伍的胜场数、败场数和胜率,我们可以了解各个队伍的战绩以及排名情况。我们还可以通过观察队伍在不同地点和时间下的表现来探究是否存在主场优势或时间上的特定趋势。 此外,我们也可以对选手的数据进行分析。可以统计每个选手的击杀数、死亡数、助攻数和KDA(击杀/死亡/助攻)比例等指标,以便评估选手的表现。通过对选手的数据进行聚类分析,我们可以发现不同类型的选手,并了解各类型选手在比赛中的不同作用和贡献。 最后,我们可以通过数据可视化的方式将分析结果呈现出来。使用R语言的可视化包,我们可以制作柱状图、折线图、散点图等图表,帮助我们更直观地理解和传达数据结果。 综上所述,通过使用R语言对2020年中韩联赛的数据进行分析,我们可以深入了解比赛结果、选手表现以及其他相关指标,帮助我们更好地理解该联赛的特点和趋势,并为队伍和选手提供有针对性的建议和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值