Merge pull request 'Arthur_BowlingAlgo' (#23) from Arthur_BowlingAlgo into master
continuous-integration/drone/push Build is passing Details

Reviewed-on: #23
pull/25/head
Arthur VALIN 2 years ago
commit 824e8efc9d

@ -1,3 +1,8 @@
import 'package:bowl_in/model/AbstractRound.dart';
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/Round.dart';
import 'package:bowl_in/views/ingame_screen2.dart';
import 'package:bowl_in/widgets/button_new_party.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
@ -37,9 +42,18 @@ final GoRouter router = GoRouter(
GoRoute( GoRoute(
path: 'in-game', path: 'in-game',
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
if (state.extra is AbstractRound) {
return InGameScreen2(currentRound: state.extra as AbstractRound);
}
return InGameScreen(); return InGameScreen();
}, },
), ),
GoRoute(
path: 'scoreboard',
builder: (BuildContext context, GoRouterState state) {
return FinalScoreBoard(gameDeatil: state.extra as GameDetail);
},
),
], ],
), ),
], ],

@ -0,0 +1,85 @@
import 'Player.dart';
abstract class AbstractRound {
int? _firstThrow;
int? _secondThrow;
int? _points;
int _number;
Player _player;
AbstractRound? _previousRound;
// Constructor
AbstractRound(this._firstThrow, this._secondThrow, this._points, this._player, this._number);
// Getters and setters
int? get firstThrow => _firstThrow;
set firstThrow(int? value) {
_firstThrow = value;
}
int? get secondThrow => _secondThrow;
set secondThrow(int? value) {
_secondThrow = value;
}
int? get points => _points;
set points(int? value) {
_points = value;
}
int get number => _number;
set number(int value) {
_number = value;
}
Player get player => _player;
set player(Player value) {
_player = value;
}
AbstractRound? get previousRound => _previousRound;
set previousRound(AbstractRound? value) {
_previousRound = value;
}
bool computeNext(int val);
void computePoints();
bool shotIsStrike();
bool isStrike() {
return firstThrow==10;
}
bool isSpare(){
return firstThrow!=10 && (firstThrow ?? 0)+(secondThrow ?? 0)==10;
}
bool isSpareOrStrike() {
return (firstThrow ?? 0)+(secondThrow ?? 0)==10;
}
void subscribe(AbstractRound nextRound){
nextRound.previousRound=this;
}
void update(int val){
points = (points ?? 0) + val;
print("ROUND " + number.toString() + " - " + player.id.toString() + "Update points : " + points.toString());
previousRound?.update(val);
}
void unsubscribePreviousRound(){
previousRound?.unsubscribePreviousRound();
previousRound=null;
}
}

@ -1,28 +1,35 @@
import 'package:bowl_in/model/AbstractRound.dart';
import 'package:bowl_in/model/Game.dart';
import 'package:bowl_in/model/GamePlayer.dart';
import 'package:bowl_in/model/LastRound.dart';
import 'Player.dart'; import 'Player.dart';
import 'Round.dart'; import 'Round.dart';
class GameDetail { class GameDetail {
int _id; int _id;
DateTime _time; DateTime _time;
int _winner; int? _winner;
int _nbPoints; int _nbPoints;
bool _isFinished; bool _isFinished;
Round? _currentRound;
int _host; int _host;
List<Round> _rounds = []; List<AbstractRound> _rounds = [];
List<Player> _players = []; List<Player> _players = [];
final Map<Player, int> _points = {};
// Constructor // Constructor
GameDetail( GameDetail(this._id, this._time, this._winner, this._nbPoints,
this._id, this._isFinished, this._host, this._players) {
this._time, for (int i = 1; i <= 9; i++) {
this._winner, players.forEach((element) {
this._nbPoints, this.rounds.add(Round(null, null, 0, element, i));
this._isFinished, });
this._currentRound, }
this._host,
this._rounds, players.forEach((element) {
this._players); this.rounds.add(LastRound(null, null, 0, element, 10, null));
});
}
// Getters and setters // Getters and setters
int get id => _id; int get id => _id;
@ -37,9 +44,9 @@ class GameDetail {
_time = value; _time = value;
} }
int get winner => _winner; int? get winner => _winner;
set winner(int value) { set winner(int? value) {
_winner = value; _winner = value;
} }
@ -55,21 +62,15 @@ class GameDetail {
_isFinished = value; _isFinished = value;
} }
Round? get currentRound => _currentRound;
set currentRound(Round? value) {
_currentRound = value;
}
int get host => _host; int get host => _host;
set host(int value) { set host(int value) {
_host = value; _host = value;
} }
List<Round> get rounds => _rounds; List<AbstractRound> get rounds => _rounds;
set rounds(List<Round> value) { set rounds(List<AbstractRound> value) {
_rounds = value; _rounds = value;
} }
@ -79,29 +80,21 @@ class GameDetail {
_players = value; _players = value;
} }
int getPointByPlayerId(int id) {
int pointPlayer = 0; Map<Player, int> get points => _points;
for (var player in players) {
if (player.id == id) { void computeScores(){
print("====COMPUTE POINTS====");
for(var element in rounds){ for(var element in rounds){
if (element.player == player) { print(element.points);
pointPlayer += element.points; points[element.player] = (points[element.player] ?? 0) + (element.points ?? 0);
} print(element.player.name + " : " + points[element.player].toString());
}
return pointPlayer;
} }
} }
throw Exception("Player not in the game.");
}
Map<int, int> getRank() {
Map<int, int> rank = {};
for (var player in players) { Map<Player, int> getRank() {
rank.addAll({player.id: this.getPointByPlayerId(player.id)}); var sortedByValueMap = Map.fromEntries(
} points.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
var sortedByKeyMap = Map.fromEntries( return sortedByValueMap;
rank.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
return sortedByKeyMap;
} }
} }

@ -0,0 +1,47 @@
import 'package:flutter/cupertino.dart';
import 'GameDetail.dart';
import 'package:go_router/go_router.dart';
import 'Round.dart';
class GamePlayer {
late GameDetail _game;
int currentRoundIndex = 0;
GameDetail get game => _game;
set game(GameDetail value) {
currentRoundIndex = 0;
_game = value;
}
void onNext(bool isRoundFinished, BuildContext context) {
if (isRoundFinished) {
print("++");
currentRoundIndex++;
}
if (currentRoundIndex >= game.rounds.length) {
print("FINISHED");
game.computeScores();
context.go("/scoreboard", extra: game);
} else {
print("IN GAME : " + currentRoundIndex.toString());
if (game.rounds[currentRoundIndex] is Round) {
print("ROUND");
} else {
print("LAST ROUND");
}
context.pushReplacement("/in-game",
extra: game.rounds[currentRoundIndex]);
}
}
void onSpareOrStrike() {
if (currentRoundIndex < game.rounds.length - game.players.length) {
print("ON SPAREORSTRIKE");
game.rounds[currentRoundIndex]
.subscribe(game.rounds[currentRoundIndex + game.players.length]);
}
}
}

@ -9,5 +9,5 @@ abstract class IGameManager {
List<GameDetail> getGamesByPlayer(Player user); List<GameDetail> getGamesByPlayer(Player user);
List<GameDetail> getGamesByPlayers(List<Player> users); List<GameDetail> getGamesByPlayers(List<Player> users);
List<Player> getPlayersByIdGame(int id); List<Player> getPlayersByIdGame(int id);
Map<int, int> getRankByIdGame(int id); Map<Player, int> getRankByIdGame(int id);
} }

@ -1,3 +1,6 @@
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/GamePlayer.dart';
import 'User.dart'; import 'User.dart';
import 'Game.dart'; import 'Game.dart';
import 'IUserManager.dart'; import 'IUserManager.dart';
@ -6,7 +9,8 @@ import 'Game.dart';
abstract class IManager { abstract class IManager {
late User _userCurrent; late User _userCurrent;
late Game _gameCurrent; late GameDetail _gameCurrent;
late GamePlayer _gamePlayer = GamePlayer();
late IUserManager _userMgr; late IUserManager _userMgr;
late IGameManager _gameMgr; late IGameManager _gameMgr;
@ -17,7 +21,18 @@ abstract class IManager {
_userCurrent = user; _userCurrent = user;
} }
Game get gameCurrent => _gameCurrent; GamePlayer get gamePlayer => _gamePlayer;
set gamePlayer(GamePlayer value) {
_gamePlayer = value;
}
GameDetail get gameCurrent => _gameCurrent;
set gameCurrent(GameDetail value) {
_gameCurrent = value;
}
IUserManager get userMgr => _userMgr; IUserManager get userMgr => _userMgr;
IGameManager get gameMgr => _gameMgr; IGameManager get gameMgr => _gameMgr;
} }

@ -0,0 +1,58 @@
import 'package:bowl_in/model/AbstractRound.dart';
import 'Player.dart';
class LastRound extends AbstractRound{
int? _thirdThrow;
LastRound(super.firstThrow, super.secondThrow, super.points, super.player, super.number, this._thirdThrow);
int? get thirdThrow => _thirdThrow;
set thirdThrow(int? value) {
_thirdThrow = value;
}
@override
bool computeNext(int val) {
if(firstThrow==null){
firstThrow=val;
if(previousRound?.isSpare() ?? false){
previousRound?.update(val);
}
return false;
}else if(secondThrow==null){
secondThrow=val;
if ((firstThrow??0)+(secondThrow??0)<10){
computePoints();
return true ;
}
return false;
}else if((firstThrow??0)+(secondThrow??0)>=10){
thirdThrow=val;
}
computePoints();
return true;
}
@override
void computePoints() {
points = (firstThrow??0)+(secondThrow??0)+(thirdThrow??0);
if(previousRound?.isStrike()??false){
update(points??0);
}
unsubscribePreviousRound();
}
@override
bool shotIsStrike(){
if(firstThrow==null){
return true;
}else if(secondThrow==null){
return firstThrow==10;
}else{
return secondThrow==10;
}
}
}

@ -1,36 +1,44 @@
import 'Player.dart'; import 'package:bowl_in/model/AbstractRound.dart';
import 'GamePlayer.dart';
class Round { class Round extends AbstractRound{
int _firstThrow;
int? _secondThrow;
int _points;
Player _player;
// Constructor Round(super.firstThrow, super.secondThrow, super.points, super.player, super.number);
Round(this._firstThrow, this._secondThrow, this._points, this._player);
// Getters and setters @override
int get firstThrow => _firstThrow; bool computeNext(int val) {
if(firstThrow==null){
set firstThrow(int value) { firstThrow=val;
_firstThrow = value; if(previousRound?.isSpare() ?? false){
previousRound?.update(val);
unsubscribePreviousRound();
} }
if(val==10){
int? get secondThrow => _secondThrow; computePoints();
return true;
set secondThrow(int? value) { }
_secondThrow = value; return false;
}else if(firstThrow!=10 && secondThrow==null){
secondThrow=val;
}
computePoints();
return true;
} }
int get points => _points; @override
void computePoints() {
points = (firstThrow ?? 0)+(secondThrow ?? 0);
print("ROUND " + number.toString() + " - " + player.id.toString() + "Compute points : " + points.toString());
if(previousRound?.isStrike() ?? false){
previousRound?.update(points ?? 0);
}
unsubscribePreviousRound();
}
set points(int value) { @override
_points = value; bool shotIsStrike(){
return firstThrow==null;
} }
Player get player => _player;
set player(Player value) {
_player = value;
}
} }

@ -73,7 +73,7 @@ class GameManager extends IGameManager {
throw Exception("Game not found."); throw Exception("Game not found.");
} }
Map<int, int> getRankByIdGame(int id) { Map<Player, int> getRankByIdGame(int id) {
for (var game in parent.gameDetails) { for (var game in parent.gameDetails) {
if (game.id == id) { if (game.id == id) {
return game.getRank(); return game.getRank();

@ -24,7 +24,7 @@ class StubData extends IManager {
_initGameDetails(); _initGameDetails();
_initGame(); _initGame();
userCurrent = players[8] as User; userCurrent = players[8] as User;
userCurrent.games = games; userCurrent.games = [];
} }
IUserManager get userMgr => _userMgr; IUserManager get userMgr => _userMgr;
@ -50,7 +50,16 @@ class StubData extends IManager {
Achievement("Win a game") Achievement("Win a game")
], ],
[], [],
Stat(10, 2, 12, 130, 7, 6, 700, 58.33, 30.2)), Stat(
10,
2,
12,
130,
7,
6,
700,
58.33,
30.2)),
User( User(
9, 9,
"Dave", "Dave",
@ -73,7 +82,16 @@ class StubData extends IManager {
Achievement("Win a game") Achievement("Win a game")
], ],
[], [],
Stat(10, 2, 12, 110, 7, 6, 700, 58.33, 30.2)), Stat(
10,
2,
12,
110,
7,
6,
700,
58.33,
30.2)),
User( User(
22, 22,
"Louison", "Louison",
@ -85,7 +103,16 @@ class StubData extends IManager {
Achievement("Win a game") Achievement("Win a game")
], ],
[], [],
Stat(10, 2, 12, 150, 7, 6, 700, 58.33, 30.2)), Stat(
10,
2,
12,
150,
7,
6,
700,
58.33,
30.2)),
User( User(
23, 23,
"Owen", "Owen",
@ -97,7 +124,16 @@ class StubData extends IManager {
Achievement("Win a game") Achievement("Win a game")
], ],
[], [],
Stat(10, 2, 12, 10, 7, 6, 700, 58.33, 30.2)), Stat(
10,
2,
12,
10,
7,
6,
700,
58.33,
30.2)),
User( User(
24, 24,
"LULU", "LULU",
@ -109,7 +145,16 @@ class StubData extends IManager {
Achievement("Win a game") Achievement("Win a game")
], ],
[], [],
Stat(10, 2, 12, 40, 7, 6, 700, 58.33, 30.2)), Stat(
10,
2,
12,
40,
7,
6,
700,
58.33,
30.2)),
User( User(
25, 25,
"Raphael", "Raphael",
@ -121,68 +166,88 @@ class StubData extends IManager {
Achievement("Win a game") Achievement("Win a game")
], ],
[], [],
Stat(10, 2, 12, 76, 7, 6, 700, 58.33, 30.2)), Stat(
10,
2,
12,
76,
7,
6,
700,
58.33,
30.2)),
], ],
Stat(2, 7, 9, 80, 4, 3, 250, 27.77, 10.55)) Stat(
2,
7,
9,
80,
4,
3,
250,
27.77,
10.55))
]; ];
List<GameDetail> _gameDetails = []; List<GameDetail> _gameDetails = [];
void _initGameDetails() { void _initGameDetails() {
gameDetails.add(GameDetail(1, DateTime.now(), players[7].id, 123, true, // gameDetails.add(GameDetail(1, DateTime.now(), players[7].id, 123, true, players[7].id, rounds, [players[0], players[1]]));
null, players[7].id, rounds, [players[0], players[1]])); // gameDetails.add(GameDetail(2, DateTime.now(), players[0].id, 113, true, players[7].id, rounds, [players[0], players[1], players[7]]));
gameDetails.add(GameDetail(2, DateTime.now(), players[0].id, 113, true, // gameDetails.add(GameDetail(3, DateTime.now(), players[7].id, 93, true,
null, players[7].id, rounds, [players[0], players[1], players[7]])); // players[7].id, [], [players[0], players[7]]));
gameDetails.add(GameDetail(3, DateTime.now(), players[7].id, 93, true, null, // gameDetails.add(GameDetail(4, DateTime.now(), players[7].id, 93, true,
players[7].id, [], [players[0], players[7]])); // players[7].id, [], [players[1], players[7]]));
gameDetails.add(GameDetail(4, DateTime.now(), players[7].id, 93, true, null,
players[7].id, [], [players[1], players[7]]));
} }
List<GameDetail> get gameDetails => _gameDetails; List<GameDetail> get gameDetails => _gameDetails;
List<Round> _rounds = []; List<Round> _rounds = [];
void _initRounds() { void _initRounds() {
rounds.add(Round(4, 5, 9, players[1])); rounds.add(Round(4, 5, 9, players[1], 1));
rounds.add(Round(4, 1, 5, players[8])); rounds.add(Round(4, 1, 5, players[8], 1));
rounds.add(Round(4, 5, 9, players[7])); rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 1, 5, players[1])); rounds.add(Round(4, 1, 5, players[1], 1));
rounds.add(Round(4, 5, 9, players[7])); rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(1, 5, 6, players[8])); rounds.add(Round(1, 5, 6, players[8], 1));
rounds.add(Round(4, 1, 5, players[7])); rounds.add(Round(4, 1, 5, players[7], 1));
rounds.add(Round(1, 5, 6, players[8])); rounds.add(Round(1, 5, 6, players[8], 1));
rounds.add(Round(4, 5, 9, players[7])); rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(9, 0, 9, players[8])); rounds.add(Round(9, 0, 9, players[8], 1));
rounds.add(Round(4, 5, 9, players[7])); rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 5, 9, players[8])); rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(4, 2, 6, players[0])); rounds.add(Round(4, 2, 6, players[0], 1));
rounds.add(Round(3, 5, 8, players[1])); rounds.add(Round(3, 5, 8, players[1], 1));
rounds.add(Round(4, 5, 9, players[2])); rounds.add(Round(4, 5, 9, players[2], 1));
rounds.add(Round(4, 5, 9, players[4])); rounds.add(Round(4, 5, 9, players[4], 1));
rounds.add(Round(1, 5, 6, players[6])); rounds.add(Round(1, 5, 6, players[6], 1));
rounds.add(Round(4, 5, 9, players[8])); rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(4, 2, 6, players[7])); rounds.add(Round(4, 2, 6, players[7], 1));
rounds.add(Round(3, 5, 8, players[8])); rounds.add(Round(3, 5, 8, players[8], 1));
rounds.add(Round(4, 5, 9, players[7])); rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 5, 9, players[8])); rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(1, 5, 6, players[7])); rounds.add(Round(1, 5, 6, players[7], 1));
rounds.add(Round(4, 5, 9, players[8])); rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(4, 5, 9, players[7])); rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 1, 5, players[8])); rounds.add(Round(4, 1, 5, players[8], 1));
} }
List<Round> get rounds => _rounds; List<Round> get rounds => _rounds;
List<Game> _games = []; List<Game> _games = [];
void _initGame() { void _initGame() {
games.add(Game( // games.add(Game(
gameDetails[0].id, // gameDetails[0].id,
DateTime.now().subtract(Duration(days: 14)), // DateTime.now().subtract(Duration(days: 14)),
123, // 123,
true, // true,
[players[0].id, players[1].id])); // [players[0].id, players[1].id]));
games.add(Game(gameDetails[1].id, DateTime.now(), 101, true, // games.add(Game(gameDetails[1].id, DateTime.now(), 101, true,
[players[1].id, players[0].id])); // [players[1].id, players[0].id]));
// }
//
// List<Game> get games => _games;
} }
List<Game> get games => _games;
} }

@ -1,5 +1,9 @@
import 'package:bowl_in/main.dart';
import 'package:bowl_in/model/GameDetail.dart';
import 'package:bowl_in/model/GamePlayer.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import '../widgets/button_new_party.dart'; import '../widgets/button_new_party.dart';
@ -48,11 +52,12 @@ class _InGameScreenState extends State<InGameScreen> {
Spacer(), Spacer(),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
setState(() { GameDetail gd = GameDetail(1, DateTime.now(), null, 123, false,
widgetHolder = InGameCardThrow( MyApp.controller.userCurrent.id, [MyApp.controller.userCurrent, MyApp.controller.userMgr.getUserById(2)]);
numberThrow: 2,
); MyApp.controller.gamePlayer.game = gd;
}); MyApp.controller.gameCurrent = gd;
MyApp.controller.gamePlayer.onNext(false, context);
}, },
child: Text( child: Text(
"PLAY", "PLAY",

@ -0,0 +1,110 @@
import 'package:bowl_in/main.dart';
import 'package:bowl_in/model/AbstractRound.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../model/Round.dart';
import '../widgets/button_new_party.dart';
import '../widgets/ingame_widgets.dart';
import '../widgets/scores_list_widget.dart';
class InGameScreen2 extends StatefulWidget {
final AbstractRound currentRound;
const InGameScreen2({Key? key, required this.currentRound}) : super(key: key);
@override
State<InGameScreen2> createState() => _InGameScreen2State();
}
class _InGameScreen2State extends State<InGameScreen2> {
late InGameCardThrow widgetHolder;
int selectedValue = 0;
void setSelectedValue(int val) {
selectedValue = val;
}
void initState() {
if (widget.currentRound.firstThrow == null) {
widgetHolder = InGameCardThrow(
numberThrow: 1,
currentRound: widget.currentRound,
setSelectedValue: setSelectedValue);
} else if (widget.currentRound.secondThrow == null) {
widgetHolder = InGameCardThrow(
numberThrow: 2,
currentRound: widget.currentRound,
setSelectedValue: setSelectedValue);
} else {
widgetHolder = InGameCardThrow(
numberThrow: 3,
currentRound: widget.currentRound,
setSelectedValue: setSelectedValue);
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
),
widgetHolder,
Spacer(),
ElevatedButton(
onPressed: () {
bool isFinished =
widget.currentRound.computeNext(selectedValue);
if (widget.currentRound.isSpareOrStrike()) {
MyApp.controller.gamePlayer.onSpareOrStrike();
}
MyApp.controller.gamePlayer.onNext(isFinished, context);
},
child: Text(
"PLAY",
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
fontSize: 40,
color: Color(0xff1ABAE0)),
),
style: ElevatedButton.styleFrom(
side: BorderSide(
width: 7,
color: Color(0xff1ABAE0),
),
onPrimary: Colors.transparent,
primary: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(55),
),
minimumSize: Size(200, 80),
),
),
Spacer(),
],
)
],
);
}
}

@ -164,7 +164,7 @@ class ScoreBoardModal extends StatelessWidget {
child: Stack( child: Stack(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
children: [ children: [
Positioned( /*Positioned(
child: PodiumGameOverWidget( child: PodiumGameOverWidget(
isfirst: 2, isfirst: 2,
pseudo: 'Lucas', pseudo: 'Lucas',
@ -189,7 +189,7 @@ class ScoreBoardModal extends StatelessWidget {
), ),
top: 70, top: 70,
right: 30, right: 30,
) )*/
], ],
), ),
)), )),

@ -4,19 +4,57 @@ import 'package:bowl_in/widgets/profil_listpodium_widget.dart';
import 'package:bowl_in/widgets/scores_list_widget.dart'; import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import '../model/AbstractRound.dart';
import '../model/GameDetail.dart';
import '../model/Player.dart';
class FinalScoreBoard extends StatefulWidget { class FinalScoreBoard extends StatefulWidget {
const FinalScoreBoard({Key? key}) : super(key: key); final GameDetail gameDeatil;
const FinalScoreBoard({Key? key, required this.gameDeatil}) : super(key: key);
@override @override
State<FinalScoreBoard> createState() => _FinalScoreBoardState(); State<FinalScoreBoard> createState() => _FinalScoreBoardState();
} }
class _FinalScoreBoardState extends State<FinalScoreBoard> { class _FinalScoreBoardState extends State<FinalScoreBoard> {
late Map<Player, int> rank;
late List<Player> pseudoList;
late List<int> scoreList;
@override
void initState() {
rank = widget.gameDeatil.getRank();
pseudoList = rank.keys.toList();
scoreList = rank.values.toList();
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Stack(
children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [
Color(0xff19BDE0),
Color(0xff4A17DC),
],
)),
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
),
Container(
margin: EdgeInsets.fromLTRB(30, 0, 30, 35), margin: EdgeInsets.fromLTRB(30, 0, 30, 35),
width: double.infinity, width: double.infinity,
height: 470, height: 470,
@ -31,7 +69,9 @@ class _FinalScoreBoardState extends State<FinalScoreBoard> {
spreadRadius: 5.0, spreadRadius: 5.0,
), ),
]), ]),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding( Padding(
padding: EdgeInsets.fromLTRB(15, 5, 15, 50), padding: EdgeInsets.fromLTRB(15, 5, 15, 50),
child: RichText( child: RichText(
@ -52,32 +92,38 @@ class _FinalScoreBoardState extends State<FinalScoreBoard> {
child: Stack( child: Stack(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
children: [ children: [
Positioned( rank.length > 1
? Positioned(
child: PodiumGameOverWidget( child: PodiumGameOverWidget(
isfirst: 2, isfirst: 2,
pseudo: 'Lucas', player: pseudoList[1],
score: 123, score: scoreList[1],
), ),
top: 70, top: 70,
left: 30, left: 30,
), )
Positioned( : Container(),
rank.length > 0
? Positioned(
child: PodiumGameOverWidget( child: PodiumGameOverWidget(
isfirst: 1, isfirst: 1,
pseudo: 'Momo', player: pseudoList[0],
score: 160, score: scoreList[0],
), ),
top: 10, top: 10,
), )
Positioned( : Container(),
rank.length > 2
? Positioned(
child: PodiumGameOverWidget( child: PodiumGameOverWidget(
isfirst: 3, isfirst: 3,
pseudo: 'popo', player: pseudoList[2],
score: 110, score: scoreList[2],
), ),
top: 70, top: 70,
right: 30, right: 30,
) )
: Container()
], ],
)), )),
Container( Container(
@ -85,7 +131,8 @@ class _FinalScoreBoardState extends State<FinalScoreBoard> {
height: 100, height: 100,
decoration: BoxDecoration( decoration: BoxDecoration(
image: DecorationImage( image: DecorationImage(
image: AssetImage("assets/images/congrats_background.png"), image: AssetImage(
"assets/images/congrats_background.png"),
fit: BoxFit.cover), fit: BoxFit.cover),
), ),
), ),
@ -102,18 +149,48 @@ class _FinalScoreBoardState extends State<FinalScoreBoard> {
), ),
), ),
) )
])); ])),
Spacer(),
ElevatedButton(
onPressed: () {
context.go("/");
},
child: Text(
"LEAVE",
style: GoogleFonts.roboto(
fontWeight: FontWeight.bold,
fontSize: 40,
color: Color(0xff1ABAE0)),
),
style: ElevatedButton.styleFrom(
side: BorderSide(
width: 7,
color: Color(0xff1ABAE0),
),
onPrimary: Colors.transparent,
primary: Colors.transparent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(55),
),
minimumSize: Size(200, 80),
),
),
Spacer(),
],
)
],
);
} }
} }
class PodiumGameOverWidget extends StatelessWidget { class PodiumGameOverWidget extends StatelessWidget {
final int isfirst; final int isfirst;
final String pseudo; final Player player;
final int score; final int score;
const PodiumGameOverWidget( const PodiumGameOverWidget(
{Key? key, {Key? key,
required this.isfirst, required this.isfirst,
required this.pseudo, required this.player,
required this.score}) required this.score})
: super(key: key); : super(key: key);
@ -129,8 +206,7 @@ class PodiumGameOverWidget extends StatelessWidget {
height: this.isfirst == 1 ? 65 : 50, height: this.isfirst == 1 ? 65 : 50,
decoration: BoxDecoration( decoration: BoxDecoration(
image: DecorationImage( image: DecorationImage(
image: AssetImage("assets/images/image_user_red.png"), image: AssetImage(player.image), fit: BoxFit.cover),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(70)), borderRadius: BorderRadius.all(Radius.circular(70)),
), ),
), ),
@ -149,7 +225,7 @@ class PodiumGameOverWidget extends StatelessWidget {
Padding( Padding(
padding: EdgeInsets.fromLTRB(0, 3, 0, 0), padding: EdgeInsets.fromLTRB(0, 3, 0, 0),
child: Text( child: Text(
this.pseudo, this.player.name,
style: GoogleFonts.roboto( style: GoogleFonts.roboto(
color: Colors.black, color: Colors.black,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
@ -346,7 +422,13 @@ class _UserInGameState extends State<UserInGame> {
class InGameCardThrow extends StatefulWidget { class InGameCardThrow extends StatefulWidget {
final int numberThrow; final int numberThrow;
const InGameCardThrow({Key? key, required this.numberThrow}) final AbstractRound currentRound;
final Function(int) setSelectedValue;
const InGameCardThrow(
{Key? key,
required this.numberThrow,
required this.currentRound,
required this.setSelectedValue})
: super(key: key); : super(key: key);
@override @override
@ -354,6 +436,21 @@ class InGameCardThrow extends StatefulWidget {
} }
class _InGameCardThrowState extends State<InGameCardThrow> { class _InGameCardThrowState extends State<InGameCardThrow> {
GlobalKey<_NumberPadState> _numberPadKey = GlobalKey();
late var maxValue;
void initState() {
if (widget.currentRound.firstThrow == null) {
maxValue = 10;
} else if (widget.currentRound.secondThrow == null) {
maxValue = 10 - (widget.currentRound.firstThrow ?? 0);
} else {
maxValue = 10;
}
super.initState();
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
@ -388,7 +485,14 @@ class _InGameCardThrowState extends State<InGameCardThrow> {
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
decoration: TextDecoration.none)), decoration: TextDecoration.none)),
TextSpan( TextSpan(
text: '1 - 1st', text: widget.currentRound.number.toString() +
" - " +
widget.numberThrow.toString() +
(widget.numberThrow == 1
? "st"
: widget.numberThrow == 2
? "nd"
: "rd"), //'1 - 1st',
style: GoogleFonts.roboto( style: GoogleFonts.roboto(
fontSize: 18, fontSize: 18,
color: CupertinoColors.black, color: CupertinoColors.black,
@ -410,12 +514,15 @@ class _InGameCardThrowState extends State<InGameCardThrow> {
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Round_picture( Round_picture(
pseudo: "Lucas", pseudo: widget.currentRound.player.name,
image: "assets/images/image_user_red.png"), image: widget.currentRound.player.image),
], ],
)), )),
NumberPad( NumberPad(
numberThrow: widget.numberThrow, numberThrow: widget.numberThrow,
setSelectedValue: widget.setSelectedValue,
currentRound: widget.currentRound,
maxValue: maxValue,
), ),
], ],
), ),
@ -493,15 +600,16 @@ class StrikeButton extends StatelessWidget {
class SpareButton extends StatelessWidget { class SpareButton extends StatelessWidget {
final int currentSelected; final int currentSelected;
final IntCallback onSonChanged; final IntCallback onSonChanged;
final int valueToReturn;
const SpareButton( const SpareButton(
{Key? key, required this.onSonChanged, required this.currentSelected}) {Key? key, required this.onSonChanged, required this.currentSelected, required this.valueToReturn})
: super(key: key); : super(key: key);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return GestureDetector(
onTap: () { onTap: () {
onSonChanged(10); onSonChanged(valueToReturn);
}, },
child: Container( child: Container(
width: double.infinity, width: double.infinity,
@ -515,7 +623,7 @@ class SpareButton extends StatelessWidget {
"SPARE !", "SPARE !",
style: GoogleFonts.roboto( style: GoogleFonts.roboto(
color: color:
currentSelected == 10 ? Colors.pink : CupertinoColors.black, currentSelected == valueToReturn ? Colors.pink : CupertinoColors.black,
decoration: TextDecoration.none, decoration: TextDecoration.none,
fontWeight: FontWeight.w900, fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic, fontStyle: FontStyle.italic,
@ -528,24 +636,33 @@ class SpareButton extends StatelessWidget {
class NumberPad extends StatefulWidget { class NumberPad extends StatefulWidget {
final int numberThrow; final int numberThrow;
const NumberPad({Key? key, required this.numberThrow}) : super(key: key); final AbstractRound currentRound;
final Function(int) setSelectedValue;
final int maxValue;
const NumberPad(
{Key? key,
required this.numberThrow,
required this.setSelectedValue,
required this.currentRound,
required this.maxValue})
: super(key: key);
@override @override
State<NumberPad> createState() => _NumberPadState(); State<NumberPad> createState() => _NumberPadState();
} }
class _NumberPadState extends State<NumberPad> { class _NumberPadState extends State<NumberPad> {
int NumSelected = 100; int NumSelected = 0;
void updateId(int newNum) { void updateId(int newNum) {
print(newNum);
setState(() { setState(() {
NumSelected = newNum; NumSelected = newNum;
widget.setSelectedValue(newNum);
}); });
} }
void initState() { void initState() {
NumSelected = 100; NumSelected = 0;
super.initState(); super.initState();
} }
@ -565,7 +682,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 1, num: 1,
isSelectable: 1, isSelectable: widget.maxValue > 1 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -573,7 +690,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 2, num: 2,
isSelectable: 1, isSelectable: widget.maxValue > 2 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -581,7 +698,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 3, num: 3,
isSelectable: 1, isSelectable: widget.maxValue > 3 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -594,7 +711,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 4, num: 4,
isSelectable: 1, isSelectable: widget.maxValue > 4 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -602,7 +719,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 5, num: 5,
isSelectable: 1, isSelectable: widget.maxValue > 5 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -610,7 +727,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 6, num: 6,
isSelectable: 1, isSelectable: widget.maxValue > 6 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -623,7 +740,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 7, num: 7,
isSelectable: 1, isSelectable: widget.maxValue > 7 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -631,7 +748,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 8, num: 8,
isSelectable: 0, isSelectable: widget.maxValue > 8 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -639,7 +756,7 @@ class _NumberPadState extends State<NumberPad> {
Number( Number(
currentSelected: NumSelected, currentSelected: NumSelected,
num: 9, num: 9,
isSelectable: 0, isSelectable: widget.maxValue > 9 ? 1 : 0,
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
@ -649,7 +766,7 @@ class _NumberPadState extends State<NumberPad> {
], ],
), ),
), ),
widget.numberThrow == 1 widget.currentRound.shotIsStrike()
? StrikeButton( ? StrikeButton(
currentSelected: NumSelected, currentSelected: NumSelected,
onSonChanged: (int newId) { onSonChanged: (int newId) {
@ -661,6 +778,7 @@ class _NumberPadState extends State<NumberPad> {
onSonChanged: (int newId) { onSonChanged: (int newId) {
updateId(newId); updateId(newId);
}, },
valueToReturn: widget.maxValue,
) )
], ],
); );

@ -196,7 +196,8 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: intl name: intl
url: "https://pub.dartlang.org" sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6
url: "https://pub.dev"
source: hosted source: hosted
version: "0.18.0" version: "0.18.0"
js: js:

@ -1,274 +1,278 @@
import '../lib/model/Player.dart'; // import 'package:bowl_in/model/GamePlayer.dart';
import '../lib/model/Guest.dart'; //
import '../lib/model/User.dart'; // import '../lib/model/Player.dart';
import '../lib/model/Stat.dart'; // import '../lib/model/Guest.dart';
import '../lib/model/Round.dart'; // import '../lib/model/User.dart';
import '../lib/model/GameDetail.dart'; // import '../lib/model/Stat.dart';
import '../lib/model/StubManager/StubData.dart'; // import '../lib/model/Round.dart';
import '../lib/model/IManager.dart'; // import '../lib/model/GameDetail.dart';
import 'dart:math'; // import '../lib/model/StubManager/StubData.dart';
import '../lib/model/Achievement.dart'; // import '../lib/model/IManager.dart';
// import 'dart:math';
void main() { // import '../lib/model/Achievement.dart';
List<Stat> stats = []; //
Random random = Random(); // void main() {
// List<Stat> stats = [];
for (int i = 0; i < 10; i++) { // Random random = Random();
Stat stat = Stat( //
random.nextInt(50) + 1, // valeur aléatoire entre 1 et 50 // for (int i = 0; i < 10; i++) {
random.nextInt(20) + 1, // valeur aléatoire entre 1 et 20 // Stat stat = Stat(
random.nextInt(30) + 1, // valeur aléatoire entre 1 et 30 // random.nextInt(50) + 1, // valeur aléatoire entre 1 et 50
random.nextInt(1000) + 1, // valeur aléatoire entre 1 et 1000 // random.nextInt(20) + 1, // valeur aléatoire entre 1 et 20
random.nextInt(10) + 1, // valeur aléatoire entre 1 et 10 // random.nextInt(30) + 1, // valeur aléatoire entre 1 et 30
random.nextInt(5) + 1, // valeur aléatoire entre 1 et 5 // random.nextInt(1000) + 1, // valeur aléatoire entre 1 et 1000
random.nextInt(5000) + 1000, // valeur aléatoire entre 1000 et 6000 // random.nextInt(10) + 1, // valeur aléatoire entre 1 et 10
random.nextInt(300) + 1, // valeur aléatoire entre 1 et 300 // random.nextInt(5) + 1, // valeur aléatoire entre 1 et 5
random.nextDouble() * 10 // valeur aléatoire entre 0 et 10 // random.nextInt(5000) + 1000, // valeur aléatoire entre 1000 et 6000
); // random.nextInt(300) + 1, // valeur aléatoire entre 1 et 300
stats.add(stat); // random.nextDouble() * 10 // valeur aléatoire entre 0 et 10
} // );
// stats.add(stat);
print("Stats:"); // }
for (var stat in stats) { //
print( // print("Stats:");
"\tVictoires: ${stat.nbVictory}, Défaites: ${stat.nbDefeat}, Parties jouées: ${stat.nbGames}, Meilleur score: ${stat.highscore}, Nombre de strikes: ${stat.nbStrikes}, Nom de spares: ${stat.nbStrikes}, Moyenne score: ${stat.avgScore}, Moyenne score par round: ${stat.avgPinsPerRound}"); // for (var stat in stats) {
} // print(
// "\tVictoires: ${stat.nbVictory}, Défaites: ${stat.nbDefeat}, Parties jouées: ${stat.nbGames}, Meilleur score: ${stat.highscore}, Nombre de strikes: ${stat.nbStrikes}, Nom de spares: ${stat.nbStrikes}, Moyenne score: ${stat.avgScore}, Moyenne score par round: ${stat.avgPinsPerRound}");
User ami = User( // }
5, //
"Lucas", // User ami = User(
"https://fastly.picsum.photos/id/288/2000/2000.jpg?hmac=AUboE-jzAzofYj_O3w_EqtZU3JHzcg7HR1IQd1Ce7lY", // 5,
"Lucas.delanier@etu.uca.fr", // "Lucas",
[], // "https://fastly.picsum.photos/id/288/2000/2000.jpg?hmac=AUboE-jzAzofYj_O3w_EqtZU3JHzcg7HR1IQd1Ce7lY",
[], // "Lucas.delanier@etu.uca.fr",
stats[1]); // [],
// [],
List<Player> players = [ // stats[1]);
Player(1, "Rami", //
"https://fastly.picsum.photos/id/1060/2000/2000.jpg?hmac=_RrU8GpkCDUlVKfgyWE-GcX-GS5TKNyUzdFbJAGXHV4"), // List<Player> players = [
Player(2, "Emre", // Player(1, "Rami",
"https://fastly.picsum.photos/id/670/2000/2000.jpg?hmac=zWqTr_vDEab3dBtp7JZgJP8TRCPNanJ4tYwDDd-jGYA"), // "https://fastly.picsum.photos/id/1060/2000/2000.jpg?hmac=_RrU8GpkCDUlVKfgyWE-GcX-GS5TKNyUzdFbJAGXHV4"),
Guest(3, "Bot1", // Player(2, "Emre",
"https://fastly.picsum.photos/id/820/2000/2000.jpg?hmac=Ctxx2feJNZnG1S7UPx_YrWcEw89tKb7fR8i1W-VTOz4"), // "https://fastly.picsum.photos/id/670/2000/2000.jpg?hmac=zWqTr_vDEab3dBtp7JZgJP8TRCPNanJ4tYwDDd-jGYA"),
Guest(4, "Bot2", // Guest(3, "Bot1",
"https://fastly.picsum.photos/id/288/2000/2000.jpg?hmac=AUboE-jzAzofYj_O3w_EqtZU3JHzcg7HR1IQd1Ce7lY"), // "https://fastly.picsum.photos/id/820/2000/2000.jpg?hmac=Ctxx2feJNZnG1S7UPx_YrWcEw89tKb7fR8i1W-VTOz4"),
ami, // Guest(4, "Bot2",
User( // "https://fastly.picsum.photos/id/288/2000/2000.jpg?hmac=AUboE-jzAzofYj_O3w_EqtZU3JHzcg7HR1IQd1Ce7lY"),
6, // ami,
"Louison", // User(
"https://fastly.picsum.photos/id/1029/2000/2000.jpg?hmac=_K3pMobVk00dfNR7rsj1NLnEBB5Gf88SvGPbbjoH-Uc", // 6,
"louison.parant@etu.uca.fr", // "Louison",
[ // "https://fastly.picsum.photos/id/1029/2000/2000.jpg?hmac=_K3pMobVk00dfNR7rsj1NLnEBB5Gf88SvGPbbjoH-Uc",
Achievement("5 games"), // "louison.parant@etu.uca.fr",
Achievement("2 strikes in a row"), // [
Achievement("Win a game") // Achievement("5 games"),
], // Achievement("2 strikes in a row"),
[ami], // Achievement("Win a game")
stats[0]) // ],
]; // [ami],
// stats[0])
print("Players :"); // ];
// afficahge de toutes les informations de tous les joueurs //
for (var player in players) { // print("Players :");
displayPlayer(player,1); // // afficahge de toutes les informations de tous les joueurs
} // for (var player in players) {
// displayPlayer(player,1);
//GameDetail // }
//
List<GameDetail> games = [ // //GameDetail
GameDetail( //
1, DateTime.now(), players[0].id, 290, true, null, players[0].id, [ //
Round(10, null, 10, players[0]), // List<GameDetail> games = [];
Round(5, 2, 7, players[1]), // games.add(GameDetail(
Round(5, 1, 12, players[0]), // 1, DateTime.now(), players[0].id, 290, true, null, players[0].id)
Round(5, 2, 7, players[1]), // , [
], [ // Round(10, null, 10, players[0], ),
players[0], // Round(5, 2, 7, players[1]),
players[1] // Round(5, 1, 12, players[0]),
]), // Round(5, 2, 7, players[1]),
GameDetail(2, DateTime.now().subtract(Duration(days: 2)), // ], [
players[1].id, 250, true, null, players[1].id, [ // players[0],
Round(7, null, 7, players[1]), // players[1]
Round(3, 3, 9, players[0]), // ]),
Round(5, 2, 7, players[1]), // GameDetail(2, DateTime.now().subtract(Duration(days: 2)),
Round(5, 1, 12, players[0]) // players[1].id, 250, true, null, players[1].id, [
], [ // Round(7, null, 7, players[1]),
players[0], // Round(3, 3, 9, players[0]),
players[1] // Round(5, 2, 7, players[1]),
]), // Round(5, 1, 12, players[0])
GameDetail(3, DateTime.now().subtract(Duration(days: 4)), // ], [
players[2].id, 210, false, null, players[2].id, [ // players[0],
Round(8, 2, 10, players[2]), // players[1]
Round(6, 2, 8, players[1]), // ]),
Round(4, 2, 6, players[2]), // GameDetail(3, DateTime.now().subtract(Duration(days: 4)),
Round(2, 2, 4, players[1]) // players[2].id, 210, false, null, players[2].id, [
], [ // Round(8, 2, 10, players[2]),
players[1], // Round(6, 2, 8, players[1]),
players[2] // Round(4, 2, 6, players[2]),
]), // Round(2, 2, 4, players[1])
GameDetail( // ], [
4, // players[1],
DateTime.now().subtract(Duration(days: 7)), // players[2]
players[3].id, // ]),
120, // GameDetail(
true, // 4,
Round(12, null, 12, players[3]), // DateTime.now().subtract(Duration(days: 7)),
players[3].id, [ // players[3].id,
Round(12, null, 12, players[3]), // 120,
Round(7, 3, 10, players[2]), // true,
Round(6, 2, 8, players[1]), // Round(12, null, 12, players[3]),
Round(5, 1, 12, players[0]) // players[3].id, [
], [ // Round(12, null, 12, players[3]),
players[0], // Round(7, 3, 10, players[2]),
players[1], // Round(6, 2, 8, players[1]),
players[2], // Round(5, 1, 12, players[0])
players[3] // ], [
]), // players[0],
GameDetail(5, DateTime.now().subtract(Duration(days: 10)), // players[1],
players[4].id, 280, true, null, players[4].id, [ // players[2],
Round(9, 1, 10, players[4]), // players[3]
Round(7, 3, 10, players[2]), // ]),
Round(8, 2, 10, players[3]), // GameDetail(5, DateTime.now().subtract(Duration(days: 10)),
Round(5, 2, 7, players[1]) // players[4].id, 280, true, null, players[4].id, [
], [ // Round(9, 1, 10, players[4]),
players[1], // Round(7, 3, 10, players[2]),
players[2], // Round(8, 2, 10, players[3]),
players[3], // Round(5, 2, 7, players[1])
players[4] // ], [
]), // players[1],
GameDetail(6, DateTime.now().subtract(Duration(days: 12)), // players[2],
players[1].id, 240, true, null, players[1].id, [ // players[3],
Round(7, null, 7, players[1]), // players[4]
Round(5, 2, 7, players[2]), // ]),
Round(6, 2, 8, players[1]), // GameDetail(6, DateTime.now().subtract(Duration(days: 12)),
Round(5, 1, 12, players[0]) // players[1].id, 240, true, null, players[1].id, [
], [ // Round(7, null, 7, players[1]),
players[0], // Round(5, 2, 7, players[2]),
players[1], // Round(6, 2, 8, players[1]),
players[2], // Round(5, 1, 12, players[0])
players[4] // ], [
]), // players[0],
GameDetail(7, DateTime.now().subtract(Duration(days: 15)), // players[1],
players[2].id, 200, true, null, players[2].id, [ // players[2],
Round(8, 2, 10, players[2]), // players[4]
Round(4, 2, 6, players[1]), // ]),
Round(7, 3, 10, players[3]), // GameDetail(7, DateTime.now().subtract(Duration(days: 15)),
Round(5, 2, 7, players[0]) // players[2].id, 200, true, null, players[2].id, [
], [ // Round(8, 2, 10, players[2]),
players[0], // Round(4, 2, 6, players[1]),
players[1], // Round(7, 3, 10, players[3]),
players[2], // Round(5, 2, 7, players[0])
players[3] // ], [
]) // players[0],
]; // players[1],
// players[2],
print("GameDetail :"); // players[3]
for (var game in games) { // ])
displayGameDetail(game,1); // ];
print("\t-----------------------------------------"); //
} // print("GameDetail :");
// for (var game in games) {
print("StubManager:"); // displayGameDetail(game,1);
IManager mgr = new StubData(); // print("\t-----------------------------------------");
// }
print("\tGameManager:"); //
// print("StubManager:");
print("\tgetGameById function with id: 2"); // IManager mgr = new StubData();
GameDetail gd = mgr.gameMgr.getGameById(2); //
displayGameDetail(gd,2); // print("\tGameManager:");
//
print("\tgetGamesByPlayerId function with id: 2"); // print("\tgetGameById function with id: 2");
List<GameDetail> gds = mgr.gameMgr.getGamesByPlayerId(8); // GameDetail gd = mgr.gameMgr.getGameById(2);
for (var game in gds) // displayGameDetail(gd,2);
{ //
displayGameDetail(game,2); // print("\tgetGamesByPlayerId function with id: 2");
} // List<GameDetail> gds = mgr.gameMgr.getGamesByPlayerId(8);
// for (var game in gds)
print("\tgetGamesByPlayer function:"); // {
var player = mgr.userMgr.getUserById(8); // displayGameDetail(game,2);
List<GameDetail> gdsPlayer = mgr.gameMgr.getGamesByPlayer(player); // }
for (var game in gdsPlayer) //
{ // print("\tgetGamesByPlayer function:");
displayGameDetail(game,2); // var player = mgr.userMgr.getUserById(8);
} // List<GameDetail> gdsPlayer = mgr.gameMgr.getGamesByPlayer(player);
// for (var game in gdsPlayer)
print("\tgetGamesByPlayers:"); // {
var player2 = mgr.userMgr.getUserById(2); // displayGameDetail(game,2);
List<Player> playersTest = [player,player2]; // }
List<GameDetail> gdsPlayers = mgr.gameMgr.getGamesByPlayers(playersTest); //
for (var game in gdsPlayers) // print("\tgetGamesByPlayers:");
{ // var player2 = mgr.userMgr.getUserById(2);
displayGameDetail(game,2); // List<Player> playersTest = [player,player2];
} // List<GameDetail> gdsPlayers = mgr.gameMgr.getGamesByPlayers(playersTest);
// for (var game in gdsPlayers)
print("\tgetPlayersByIdGame:"); // {
var playersIntoGame = mgr.gameMgr.getPlayersByIdGame(2); // displayGameDetail(game,2);
for (var player in playersIntoGame) // }
{ //
displayPlayer(player,2); // print("\tgetPlayersByIdGame:");
} // var playersIntoGame = mgr.gameMgr.getPlayersByIdGame(2);
// for (var player in playersIntoGame)
print("\tgetRankByIdGame:"); // {
var ranksPlayers = mgr.gameMgr.getRankByIdGame(2); // displayPlayer(player,2);
ranksPlayers.forEach((id, rank) { // }
displayPlayer(mgr.userMgr.getUserById(id),2); //
print('\t\tRank $rank'); // print("\tgetRankByIdGame:");
}); // var ranksPlayers = mgr.gameMgr.getRankByIdGame(2);
} // ranksPlayers.forEach((id, rank) {
// displayPlayer(mgr.userMgr.getUserById(id),2);
void displayGameDetail(GameDetail gd, int numTabs) // print('\t\tRank $rank');
{ // });
String tabs = '\t' * numTabs; // }
print(tabs+"Game ID: ${gd.id}"); //
print(tabs+"Time: ${gd.time}"); // void displayGameDetail(GameDetail gd, int numTabs)
print(tabs+"Winner: ${gd.winner}"); // {
print(tabs+"Number of Points: ${gd.nbPoints}"); // String tabs = '\t' * numTabs;
print(tabs+"Is Finished: ${gd.isFinished}"); // print(tabs+"Game ID: ${gd.id}");
print(tabs+"Current Round: ${gd.currentRound}"); // print(tabs+"Time: ${gd.time}");
print(tabs+"Host: ${gd.host}"); // print(tabs+"Winner: ${gd.winner}");
print(tabs+"Rank: ${gd.getRank()}"); // print(tabs+"Number of Points: ${gd.nbPoints}");
print(tabs+"Rounds:"); // print(tabs+"Is Finished: ${gd.isFinished}");
for (var round in gd.rounds) { // print(tabs+"Current Round: ${gd.currentRound}");
displayRound(round, numTabs+1); // print(tabs+"Host: ${gd.host}");
} // print(tabs+"Rank: ${gd.getRank()}");
print(tabs+"Players:"); // print(tabs+"Rounds:");
for (var player in gd.players) { // for (var round in gd.rounds) {
displayPlayer(player, numTabs+1); // displayRound(round, numTabs+1);
} // }
} // print(tabs+"Players:");
// for (var player in gd.players) {
void displayRound(Round round, int numTabs) // displayPlayer(player, numTabs+1);
{ // }
String tabs = '\t' * numTabs; // }
print(tabs+"Round Score: ${round.firstThrow}"); //
print(tabs+"Round Bonus: ${round.secondThrow}"); // void displayRound(Round round, int numTabs)
print(tabs+"Round Total: ${round.points}"); // {
print(tabs+"Round Player: ${round.player.name}"); // String tabs = '\t' * numTabs;
} // print(tabs+"Round Score: ${round.firstThrow}");
// print(tabs+"Round Bonus: ${round.secondThrow}");
void displayPlayer(Player player, int numTabs) // print(tabs+"Round Total: ${round.points}");
{ // print(tabs+"Round Player: ${round.player.name}");
String tabs = '\t' * numTabs; // }
if (player is Guest) { //
print(tabs+"ID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: Guest"); // void displayPlayer(Player player, int numTabs)
} else if (player is User) { // {
print(tabs+"ID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: User"); // String tabs = '\t' * numTabs;
print(tabs+"Achievements:"); // if (player is Guest) {
for (var achievement in player.achievements) { // print(tabs+"ID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: Guest");
displayAchievement(achievement, numTabs+1); // } else if (player is User) {
} // print(tabs+"ID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: User");
print(tabs+"Amis:"); // print(tabs+"Achievements:");
for (var amis in player.friends) { // for (var achievement in player.achievements) {
print("\t\tNom: ${amis.name}, Mail: ${amis.mail}"); // displayAchievement(achievement, numTabs+1);
} // }
print(tabs+"Victoires: ${player.stat.nbVictory}, Défaites: ${player.stat.nbDefeat}, Parties jouées: ${player.stat.nbGames}, Meilleur score: ${player.stat.highscore}, Nombre de strikes: ${player.stat.nbStrikes}, Nom de spares: ${player.stat.nbStrikes}, Moyenne score: ${player.stat.avgScore}, Moyenne score par round: ${player.stat.avgPinsPerRound}"); // print(tabs+"Amis:");
} else { // for (var amis in player.friends) {
print(tabs+"ID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: Player"); // print("\t\tNom: ${amis.name}, Mail: ${amis.mail}");
} // }
} // print(tabs+"Victoires: ${player.stat.nbVictory}, Défaites: ${player.stat.nbDefeat}, Parties jouées: ${player.stat.nbGames}, Meilleur score: ${player.stat.highscore}, Nombre de strikes: ${player.stat.nbStrikes}, Nom de spares: ${player.stat.nbStrikes}, Moyenne score: ${player.stat.avgScore}, Moyenne score par round: ${player.stat.avgPinsPerRound}");
// } else {
void displayAchievement(Achievement achievement, int numTabs) // print(tabs+"ID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: Player");
{ // }
String tabs = '\t' * numTabs; // }
print(tabs+"Nom: ${achievement.name}"); //
} // void displayAchievement(Achievement achievement, int numTabs)
// {
// String tabs = '\t' * numTabs;
// print(tabs+"Nom: ${achievement.name}");
// }
Loading…
Cancel
Save