Computing stats after game

pull/25/head
Arthur VALIN 2 years ago
parent 87d7c7c5a7
commit 8a8e51b700

@ -66,6 +66,9 @@ abstract class AbstractRound {
return (firstThrow ?? 0)+(secondThrow ?? 0)==10;
}
int getNbStrike();
int getNbSpares();
int getPinsKnockedDown();
void subscribe(AbstractRound nextRound){
nextRound.previousRound=this;

@ -10,7 +10,7 @@ import 'User.dart';
class GameDetail {
int _id;
DateTime _time;
int? _winner;
Player? _winner;
int _nbPoints;
bool _isFinished;
int _host;
@ -45,9 +45,9 @@ class GameDetail {
_time = value;
}
int? get winner => _winner;
Player? get winner => _winner;
set winner(int? value) {
set winner(Player? value) {
_winner = value;
}
@ -88,17 +88,22 @@ class GameDetail {
for(var p in players){
if(p is User){
p.games.add(Game(this.id, this.time, points[p] ?? 0, true, players));
p.stat.updateStats(this, p);
}
}
}
void computeWinner(){
print(getRank().entries.first.key.name);
this.winner = getRank().entries.first.key;
}
void computeScores(){
print("====COMPUTE POINTS====");
for(var element in rounds){
print(element.points);
points[element.player] = (points[element.player] ?? 0) + (element.points ?? 0);
print(element.player.name + " : " + points[element.player].toString());
}
computeWinner();
addGameToUsers();
}

@ -55,4 +55,44 @@ class LastRound extends AbstractRound{
return secondThrow==10;
}
}
@override
int getNbSpares() {
int nb = 0;
if(firstThrow!=10){
if((firstThrow??0)+(secondThrow??0)==10){
nb+=1;
}
}else{
if((thirdThrow??0)+(secondThrow??0)==10) {
nb+=1;
}
}
return nb;
}
@override
int getNbStrike() {
int nb = 0;
if(firstThrow==10){
nb+=1;
if(secondThrow==10){
nb+=1;
if(thirdThrow==10) {
nb+=1;
}
}
}else{
if(thirdThrow==10) {
nb+=1;
}
}
return nb;
}
@override
int getPinsKnockedDown() {
return (firstThrow??0)+(secondThrow??0)+(thirdThrow??0);
}
}

@ -39,5 +39,27 @@ class Round extends AbstractRound{
return firstThrow==null;
}
@override
int getNbSpares() {
if(isSpare()){
return 1;
}
return 0;
}
@override
int getNbStrike() {
if(isStrike()){
return 1;
}
return 0;
}
@override
int getPinsKnockedDown() {
return (firstThrow ?? 0)+(secondThrow ?? 0);
}
}

@ -1,3 +1,8 @@
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/Player.dart';
import 'User.dart';
class Stat {
int _nbVictory;
int _nbDefeat;
@ -76,4 +81,22 @@ class Stat {
set avgPinsPerRound(double value) {
_avgPinsPerRound = value;
}
void updateStats(GameDetail gd, Player p){
nbGames +=1;
if(gd.winner == p){
nbVictory +=1;
}
double totalpins = 0;
for(var r in gd.rounds){
if(p == r.player){
nbStrikes += r.getNbStrike();
nbSpares += r.getNbSpares();
totalpins = totalpins + r.getPinsKnockedDown();
}
}
avgPinsPerRound = ((avgPinsPerRound * (nbGames-1)) + (totalpins/10))/nbGames;
}
}

@ -52,15 +52,15 @@ class StubData extends IManager {
],
[],
Stat(
10,
2,
12,
130,
7,
6,
700,
58.33,
30.2)),
0,
0,
0,
0,
0,
0,
0,
0,
0)),
User(
9,
"Dave",
@ -84,15 +84,15 @@ class StubData extends IManager {
],
[],
Stat(
10,
2,
12,
110,
7,
6,
700,
58.33,
30.2)),
0,
0,
0,
0,
0,
0,
0,
0,
0)),
User(
22,
"Louison",
@ -179,15 +179,15 @@ class StubData extends IManager {
30.2)),
],
Stat(
2,
7,
9,
80,
4,
3,
250,
27.77,
10.55))
0,
0,
0,
0,
0,
0,
0,
0,
0))
];
List<GameDetail> _gameDetails = [];

@ -86,11 +86,14 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
children: [
StatsCard(
title: "Number of victory",
val: MyApp.controller.userCurrent.stat.nbVictory
.toDouble()),
val: MyApp.controller.userCurrent.stat.nbVictory.toDouble(),
precision: 0,
),
StatsCard(
title: "Average pins per round",
val: MyApp.controller.userCurrent.stat.avgPinsPerRound),
val: MyApp.controller.userCurrent.stat.avgPinsPerRound,
precision: 2,
),
],
))
]),

@ -101,8 +101,9 @@ class GameCard extends StatelessWidget {
class StatsCard extends StatelessWidget {
final String title;
final double val;
final int precision;
const StatsCard({Key? key, required this.title, required this.val})
const StatsCard({Key? key, required this.title, required this.val, required this.precision})
: super(key: key);
@override
@ -137,7 +138,7 @@ class StatsCard extends StatelessWidget {
),
Spacer(),
Text(
this.val.toString(),
this.val.toStringAsFixed(precision),
style: GoogleFonts.roboto(
fontWeight: FontWeight.w900,
fontSize: 28,

Loading…
Cancel
Save