From e141fac69b384242d46a2804c0defdeff92ed90f Mon Sep 17 00:00:00 2001 From: Spaso1 Date: Mon, 12 May 2025 18:29:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E5=88=86=E8=AE=A1=E5=88=92=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 1 - app/build.gradle | 2 +- .../ui/music/MusicFragment.java | 112 ++++++++++++------ app/src/main/res/layout/fragment_music.xml | 6 + 4 files changed, 83 insertions(+), 38 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index ae4a6ad..3551fb8 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/app/build.gradle b/app/build.gradle index e54f349..d781e32 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { minSdk 29 targetSdk 34 versionCode 1 - versionName "1.6.4 beta" + versionName "1.6.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/org/astral/findmaimaiultra/ui/music/MusicFragment.java b/app/src/main/java/org/astral/findmaimaiultra/ui/music/MusicFragment.java index 8d7ed4b..1e75a00 100644 --- a/app/src/main/java/org/astral/findmaimaiultra/ui/music/MusicFragment.java +++ b/app/src/main/java/org/astral/findmaimaiultra/ui/music/MusicFragment.java @@ -60,14 +60,14 @@ public class MusicFragment extends Fragment { private RecyclerView recyclerView; private MusicRatingAdapter adapter; private SuggestMusicRatingAdapter adapterSuggest; - + private DataAnalyzer dataAnalyzer; private List musicSongsRatings; private List musicRatings = new ArrayList<>(); private String userId; private int iconId; private String username; private static Map songs = new HashMap<>(); - + private Map loadedSongs; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -430,7 +430,7 @@ public class MusicFragment extends Fragment { private void showOptionsDialog() { MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireContext(), R.style.CustomDialogStyle); builder.setTitle("选项"); - builder.setItems(new CharSequence[]{"更新数据", "分数排序", "搜索指定歌曲"}, (dialog, which) -> { + builder.setItems(new CharSequence[]{"更新数据", "分数排序", "搜索指定歌曲","推分安排"}, (dialog, which) -> { switch (which) { case 0: // 更新数据 @@ -459,11 +459,18 @@ public class MusicFragment extends Fragment { // 搜索指定歌曲 showSearchDialog(); break; + case 3: + //推分安排 + setRatingProject(); } }); builder.show(); } + private void setRatingProject() { + + } + private void sortMusicRatingsByRating() { Collections.sort(musicRatings, new Comparator() { @Override @@ -502,10 +509,10 @@ public class MusicFragment extends Fragment { private void dataanlysis() { ExecutorService executor = Executors.newSingleThreadExecutor(); Handler handler = new Handler(Looper.getMainLooper()); - + TextView au = binding.an; executor.execute(() -> { // Perform data processing in the background - DataAnalyzer dataAnalyzer = new DataAnalyzer(); + dataAnalyzer = new DataAnalyzer(); try { @@ -516,9 +523,6 @@ public class MusicFragment extends Fragment { inputStream.close(); String json = new String(buffer, StandardCharsets.UTF_8); dataAnalyzer = new Gson().fromJson(json,DataAnalyzer.class); - - - } catch (IOException e) { throw new RuntimeException(e); } @@ -530,7 +534,7 @@ public class MusicFragment extends Fragment { inputStream.close(); String json = new String(buffer, StandardCharsets.UTF_8); Type type = new TypeToken>() {}.getType(); - Map loadedSongs = new Gson().fromJson(json, type); + loadedSongs = new Gson().fromJson(json, type); // 手动转换 key 为 Integer 并放入全局 map for (Map.Entry entry : loadedSongs.entrySet()) { @@ -548,16 +552,16 @@ public class MusicFragment extends Fragment { List b100 = musicRatings.subList(50, 100); List ids= new ArrayList<>(); int worstRating = b50.get(b50.size() - 1).getRating(); - + int bestRating = b50.get(0).getRating(); List suggestMusicRatingList = new ArrayList<>(); for (int x = 0; x < 50; x++) { total += b50.get(x).getRating(); MusicRating m = b100.get(x); int nowache = m.getAchievement(); int target = 0; - if (nowache >= 1000000 && nowache < 10050000) { + if (nowache >= 1000000 && nowache < 1005000) { target = 1005001; - } else if (nowache >= 995000 && nowache < 10000000) { + } else if (nowache >= 995000 && nowache < 1000000) { target = 1000001; } else if (nowache >= 990000 && nowache < 995000) { target = 995001; @@ -579,6 +583,38 @@ public class MusicFragment extends Fragment { suggestMusicRatingList.add(m); } } + for (int x = 0; x < 50; x++) { + MusicRating m = b50.get(x); + if (m.getLevel_info() > ((double) (total - 1000) / 1000)) { + continue; + } + int nowache = m.getAchievement(); + int target = 0; + if (nowache >= 1000000 && nowache < 1005000) { + target = 1005001; + } else if (nowache >= 995000 && nowache < 1000000) { + target = 1000001; + } else if (nowache >= 990000 && nowache < 995000) { + target = 995001; + } else if (nowache >= 980000 && nowache < 990000) { + target = 990001; + } else if (nowache >= 970000 && nowache < 980000) { + target = 980001; + } + double b1 = (double) target / 10000; + int targetRating = getRatingChart(m.getLevel_info(), b1); + if (targetRating > worstRating) { + m.setExtNum1(target); + if (m.getMusicId() > 10000) { + ids.add(m.getMusicId()-10000); + }else { + ids.add(m.getMusicId()); + } + m.setExtNum2(targetRating); + suggestMusicRatingList.add(m); + } + } + List easySongs = new ArrayList<>(); //看看别人打什么 Log.d("TOP",total + ""); @@ -599,30 +635,31 @@ public class MusicFragment extends Fragment { }else if (total>=11000) { easySongs = dataAnalyzer.getEasySongs().get("11000"); } - for (int x = 0 ; x < easySongs.size();x ++) { - EasySong e = easySongs.get(x); - if (e.getPercent()>0.1) { - if (ids.contains(e.getId())) { - continue; - } - ; - double diff = songs.get(e.getId()).getDifficulties().get(e.getType())[e.getLevel()].getLevel_value(); - double b = 99.0000; - for (int i = 0; i < 3; i++) { - b = b + 0.5 * (i - 1); - int ra = getRatingChart(diff, b); - if (ra > worstRating) { - MusicRating musicRating = new MusicRating(); - musicRating.setMusicId(e.getId()); - musicRating.setMusicName(e.getTitle()); - musicRating.setExtNum1((int)(b*10000)); - musicRating.setExtNum2(ra); - musicRating.setRating(0); - musicRating.setAchievement(0); - musicRating.setLevel_info(diff); - musicRating.setType(e.getType()); - suggestMusicRatingList.add(musicRating); - break; + if (easySongs != null) { + for (EasySong e : easySongs) { + if (e.getPercent() > 0.1) { + if (ids.contains(e.getId())) { + continue; + } + ; + double diff = Objects.requireNonNull(Objects.requireNonNull(songs.get(e.getId())).getDifficulties().get(e.getType()))[e.getLevel()].getLevel_value(); + double b = 99.0000; + for (int i = 0; i < 3; i++) { + b = b + 0.5 * (i - 1); + int ra = getRatingChart(diff, b); + if (ra > worstRating) { + MusicRating musicRating = new MusicRating(); + musicRating.setMusicId(e.getId()); + musicRating.setMusicName(e.getTitle()); + musicRating.setExtNum1((int) (b * 10000)); + musicRating.setExtNum2(ra); + musicRating.setRating(0); + musicRating.setAchievement(0); + musicRating.setLevel_info(diff); + musicRating.setType(e.getType()); + suggestMusicRatingList.add(musicRating); + break; + } } } } @@ -630,10 +667,13 @@ public class MusicFragment extends Fragment { // Update UI on the main thread + int finalTotal = total; handler.post(() -> { RecyclerView suggest = binding.getRoot().findViewById(R.id.suggestion); suggest.setLayoutManager(new GridLayoutManager(getContext(), 1)); + au.setText("Rating分析:最低分 " + worstRating + "分,最高分 " + bestRating + ",平均分" + (finalTotal / 50) + "分"); + adapterSuggest = new SuggestMusicRatingAdapter(suggestMusicRatingList); suggest.setAdapter(adapterSuggest); adapterSuggest.notifyDataSetChanged(); diff --git a/app/src/main/res/layout/fragment_music.xml b/app/src/main/res/layout/fragment_music.xml index 4290f76..8bd6054 100644 --- a/app/src/main/res/layout/fragment_music.xml +++ b/app/src/main/res/layout/fragment_music.xml @@ -104,6 +104,12 @@ android:padding="8dp" android:id="@+id/su" android:textSize="18sp"/> +