From 18b2d6c57ac54a6d98aebf7f0b946e154be52394 Mon Sep 17 00:00:00 2001 From: lvxinran Date: Wed, 10 Jun 2020 02:42:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=B7=E5=AE=AB=E5=AF=BB=E5=AE=9D=E9=9A=8F?= =?UTF-8?q?=E6=9C=BA=E6=96=B9=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamecommon/src/main/java/util/MathUtils.java | 26 ++++++++++++- .../jieling/logic/dao/UserMissionManager.java | 38 ++++++++++++++----- .../src/main/java/config/SMazeTreasure.java | 6 --- .../java/config/SMazeTreasureSetting.java | 6 +++ 4 files changed, 59 insertions(+), 17 deletions(-) diff --git a/gamecommon/src/main/java/util/MathUtils.java b/gamecommon/src/main/java/util/MathUtils.java index 8854f1b86..26c3f39b4 100644 --- a/gamecommon/src/main/java/util/MathUtils.java +++ b/gamecommon/src/main/java/util/MathUtils.java @@ -19,7 +19,8 @@ public class MathUtils { public static void main(String[] args){ - System.out.println(forceToDouble(1231321)); + int i = randomFromWeight(new int[][]{{1,20},{2,30}}); + System.out.println(i); } public static int randomForStrArray(String [] rateArray) { return randomStrArray(rateArray, -1); @@ -333,7 +334,30 @@ public class MathUtils { } public static double forceToDouble(double force){ return force/Math.pow(10,8); + } + /** + * 根据权重纯随机 + * @return + */ + public static int[] randomForWeight(int[][] array,int count){ + int sum = 0; + for(int[] weight:array){ + sum+=weight[1]; + } + int[] random = new int[sum]; + int index = 0 ; + for(int[] oneArray:array){ + for(int i = 0;i< oneArray[1];i++){ + random[index] = oneArray[0]; + index++; + } + } + int[] result = new int[count]; + for(int i = 0 ; i mustMissions.add(mission)); } } - List missingRoomMission = new ArrayList<>(); - for(Map.Entry entry:SMazeTreasure.sMazeTreasureMap.entrySet()){ - int[] refreshWeight = new int[2]; - refreshWeight[0] = entry.getKey(); - refreshWeight[1] = entry.getValue().getTaskRefreshProbability(); - missingRoomMission.add(refreshWeight); + int[][] qualityRate = SMazeTreasureSetting.sMazeTreasureSetting.getQualityRate(); +// List missingRoomMission = new ArrayList<>(); +// for(Map.Entry entry:SMazeTreasure.sMazeTreasureMap.entrySet()){ +// int[] refreshWeight = new int[2]; +// refreshWeight[0] = entry.getKey(); +// refreshWeight[1] = entry.getValue().getTaskRefreshProbability(); +// missingRoomMission.add(refreshWeight); +// } + //根据品质来随机 + int[] qualityArray = MathUtils.randomForWeight(qualityRate, 6 - mustMissions.size()); + Map qualityNum = new HashMap<>(); + for(int quality:qualityArray){ + qualityNum.put(quality,qualityNum.getOrDefault(quality,0)+1); } - int[] missions = MathUtils.randomFromWeightWithTaking(missingRoomMission.toArray(new int[missingRoomMission.size()][]), 6-mustMissions.size()); - for(int mission:missions){ - missingRoomMissionType.addDoingMission(missingRoomMissionType.getMissionIndex()*10000+mission); + for(int quality:qualityNum.keySet()){ + List sMazeTreasures = SMazeTreasure.mazeMapByTaskType.get(quality); + int[][] treasures = new int[sMazeTreasures.size()][]; + for(int i = 0 ; i