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