Poprawiona wersja
unknown
dart
a year ago
2.9 kB
15
Indexable
import 'package:sj_manager/bridge.dart';
UserAlgorithm<ClassificationScoreCreator> create() {
return UserAlgorithm<ClassificationScoreCreator>(
id: 'world_cup_individual',
name: {
"pl": "Puchar Świata (indywidualny)",
"en": "World Cup (individual)",
"cz": "Světový Pohár",
},
description: {
"pl": "Punktuje TOP30 w każdym konkursie, według dobrze znanych wszystkim zasad PŚ",
"en": "TOP30 of each competition scores, according to the well known WC rules",
"cz": "TOP30 bodů z každé soutěže podle známých pravidel SP",
},
algorithm:
_Algorithm(), // Tutaj jedynie pamiętajmy, żeby dobrze wpisać nazwę "klasy", którą stworzyliśmy poniżej
);
}
class _Algorithm extends ClassificationScoreCreator {
ClassificationScore compute(ClassificationScoreCreatingContext context) {
// "context" to obiekt mający wszystkie przydatne informacje. Kiedyś dam dobrą instrukcję do tego, co tam znajdziemy.
// "context.entity" to nasz skoczek bądź drużyna (w zależności)
// Aby sprawdzić czy konkurs jest indywidualny/drużynowy, musimy sprawdzić "competition is Competition<Jumper> lub Competition<Team>"
final significantCompetitions = context.playedCompetition.where((competition) {
return competition.labels.contains(CompetitionType.competition) &&
competition is Competition<
Jumper>; // Chcemy tylko konkursy "główne", które są konkursami indywidualnymi. Dwa znaki "&" oznaczają, że muszą być spełnione oba warunki
});
final pointsMap = {
1: 100,
2: 80,
3: 60,
4: 50,
5: 45,
6: 40,
7: 36,
8: 32,
9: 29,
10: 26,
11: 24,
12: 22,
13: 20,
14: 18,
15: 16,
16: 15,
17: 14,
18: 13,
19: 12,
20: 11,
21: 10,
22: 9,
23: 8,
24: 7,
25: 6,
26: 5,
27: 4,
28: 3,
29: 2,
30: 1,
};
var competitionScores = <CompetitionScore>[];
var points = 0; // Tworzymy zmienną z punktami
for (var competition in significantCompetitions) {
// Przechodzimy przez wszystkie przefiltrowane zawody
final position = competition.standings.positionOf(
entity); // Dowiedz się, jakie miejsce zajął skoczek w zawodach. Entity w tym przypadku jest skoczkiem.
final pointsAddition =
pointsMap[position] ?? 0; // Dodaj punkty w zależności od miejsca w zawodach
if (pointsAddition > 0) {
points += pointsAddition;
competitionScores.add(competition.standings.scoreOf(entity));
}
}
return ClassificationScore<Jumper>(
entity: entity,
points: points,
competitionScores: competitionScores, // Lista konkursów, gdzie punktował zawodnik
);
}
}
Editor is loading...
Leave a Comment