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:go_router/go_router.dart';
@ -37,9 +42,18 @@ final GoRouter router = GoRouter(
GoRoute(
path: 'in-game',
builder: (BuildContext context, GoRouterState state) {
if (state.extra is AbstractRound) {
return InGameScreen2(currentRound: state.extra as AbstractRound);
}
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 'Round.dart';
class GameDetail {
int _id;
DateTime _time;
int _winner;
int? _winner;
int _nbPoints;
bool _isFinished;
Round? _currentRound;
int _host;
List<Round> _rounds = [];
List<AbstractRound> _rounds = [];
List<Player> _players = [];
final Map<Player, int> _points = {};
// Constructor
GameDetail(
this._id,
this._time,
this._winner,
this._nbPoints,
this._isFinished,
this._currentRound,
this._host,
this._rounds,
this._players);
GameDetail(this._id, this._time, this._winner, this._nbPoints,
this._isFinished, this._host, this._players) {
for (int i = 1; i <= 9; i++) {
players.forEach((element) {
this.rounds.add(Round(null, null, 0, element, i));
});
}
players.forEach((element) {
this.rounds.add(LastRound(null, null, 0, element, 10, null));
});
}
// Getters and setters
int get id => _id;
@ -37,9 +44,9 @@ class GameDetail {
_time = value;
}
int get winner => _winner;
int? get winner => _winner;
set winner(int value) {
set winner(int? value) {
_winner = value;
}
@ -55,21 +62,15 @@ class GameDetail {
_isFinished = value;
}
Round? get currentRound => _currentRound;
set currentRound(Round? value) {
_currentRound = value;
}
int get host => _host;
set host(int 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;
}
@ -79,29 +80,21 @@ class GameDetail {
_players = value;
}
int getPointByPlayerId(int id) {
int pointPlayer = 0;
for (var player in players) {
if (player.id == id) {
for (var element in rounds) {
if (element.player == player) {
pointPlayer += element.points;
}
}
return pointPlayer;
}
}
throw Exception("Player not in the game.");
}
Map<int, int> getRank() {
Map<int, int> rank = {};
Map<Player, int> get points => _points;
for (var player in players) {
rank.addAll({player.id: this.getPointByPlayerId(player.id)});
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());
}
var sortedByKeyMap = Map.fromEntries(
rank.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
return sortedByKeyMap;
}
Map<Player, int> getRank() {
var sortedByValueMap = Map.fromEntries(
points.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
return sortedByValueMap;
}
}

@ -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> getGamesByPlayers(List<Player> users);
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 'Game.dart';
import 'IUserManager.dart';
@ -6,7 +9,8 @@ import 'Game.dart';
abstract class IManager {
late User _userCurrent;
late Game _gameCurrent;
late GameDetail _gameCurrent;
late GamePlayer _gamePlayer = GamePlayer();
late IUserManager _userMgr;
late IGameManager _gameMgr;
@ -17,7 +21,18 @@ abstract class IManager {
_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;
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';
class Round {
int _firstThrow;
int? _secondThrow;
int _points;
Player _player;
// Constructor
Round(this._firstThrow, this._secondThrow, this._points, this._player);
// Getters and setters
int get firstThrow => _firstThrow;
set firstThrow(int value) {
_firstThrow = value;
import 'package:bowl_in/model/AbstractRound.dart';
import 'GamePlayer.dart';
class Round extends AbstractRound{
Round(super.firstThrow, super.secondThrow, super.points, super.player, super.number);
@override
bool computeNext(int val) {
if(firstThrow==null){
firstThrow=val;
if(previousRound?.isSpare() ?? false){
previousRound?.update(val);
unsubscribePreviousRound();
}
if(val==10){
computePoints();
return true;
}
return false;
}else if(firstThrow!=10 && secondThrow==null){
secondThrow=val;
}
computePoints();
return true;
}
int? get secondThrow => _secondThrow;
set secondThrow(int? value) {
_secondThrow = value;
@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();
}
int get points => _points;
set points(int value) {
_points = value;
@override
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.");
}
Map<int, int> getRankByIdGame(int id) {
Map<Player, int> getRankByIdGame(int id) {
for (var game in parent.gameDetails) {
if (game.id == id) {
return game.getRank();

@ -24,7 +24,7 @@ class StubData extends IManager {
_initGameDetails();
_initGame();
userCurrent = players[8] as User;
userCurrent.games = games;
userCurrent.games = [];
}
IUserManager get userMgr => _userMgr;
@ -50,7 +50,16 @@ class StubData extends IManager {
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(
9,
"Dave",
@ -73,7 +82,16 @@ class StubData extends IManager {
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(
22,
"Louison",
@ -85,7 +103,16 @@ class StubData extends IManager {
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(
23,
"Owen",
@ -97,7 +124,16 @@ class StubData extends IManager {
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(
24,
"LULU",
@ -109,7 +145,16 @@ class StubData extends IManager {
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(
25,
"Raphael",
@ -121,68 +166,88 @@ class StubData extends IManager {
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 = [];
void _initGameDetails() {
gameDetails.add(GameDetail(1, DateTime.now(), players[7].id, 123, true,
null, players[7].id, rounds, [players[0], players[1]]));
gameDetails.add(GameDetail(2, DateTime.now(), players[0].id, 113, true,
null, players[7].id, rounds, [players[0], players[1], players[7]]));
gameDetails.add(GameDetail(3, DateTime.now(), players[7].id, 93, true, null,
players[7].id, [], [players[0], players[7]]));
gameDetails.add(GameDetail(4, DateTime.now(), players[7].id, 93, true, null,
players[7].id, [], [players[1], players[7]]));
// gameDetails.add(GameDetail(1, DateTime.now(), players[7].id, 123, true, 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(3, DateTime.now(), players[7].id, 93, true,
// players[7].id, [], [players[0], players[7]]));
// gameDetails.add(GameDetail(4, DateTime.now(), players[7].id, 93, true,
// players[7].id, [], [players[1], players[7]]));
}
List<GameDetail> get gameDetails => _gameDetails;
List<Round> _rounds = [];
void _initRounds() {
rounds.add(Round(4, 5, 9, players[1]));
rounds.add(Round(4, 1, 5, players[8]));
rounds.add(Round(4, 5, 9, players[7]));
rounds.add(Round(4, 1, 5, players[1]));
rounds.add(Round(4, 5, 9, players[7]));
rounds.add(Round(1, 5, 6, players[8]));
rounds.add(Round(4, 1, 5, players[7]));
rounds.add(Round(1, 5, 6, players[8]));
rounds.add(Round(4, 5, 9, players[7]));
rounds.add(Round(9, 0, 9, players[8]));
rounds.add(Round(4, 5, 9, players[7]));
rounds.add(Round(4, 5, 9, players[8]));
rounds.add(Round(4, 2, 6, players[0]));
rounds.add(Round(3, 5, 8, players[1]));
rounds.add(Round(4, 5, 9, players[2]));
rounds.add(Round(4, 5, 9, players[4]));
rounds.add(Round(1, 5, 6, players[6]));
rounds.add(Round(4, 5, 9, players[8]));
rounds.add(Round(4, 2, 6, players[7]));
rounds.add(Round(3, 5, 8, players[8]));
rounds.add(Round(4, 5, 9, players[7]));
rounds.add(Round(4, 5, 9, players[8]));
rounds.add(Round(1, 5, 6, players[7]));
rounds.add(Round(4, 5, 9, players[8]));
rounds.add(Round(4, 5, 9, players[7]));
rounds.add(Round(4, 1, 5, players[8]));
rounds.add(Round(4, 5, 9, players[1], 1));
rounds.add(Round(4, 1, 5, players[8], 1));
rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 1, 5, players[1], 1));
rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(1, 5, 6, players[8], 1));
rounds.add(Round(4, 1, 5, players[7], 1));
rounds.add(Round(1, 5, 6, players[8], 1));
rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(9, 0, 9, players[8], 1));
rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(4, 2, 6, players[0], 1));
rounds.add(Round(3, 5, 8, players[1], 1));
rounds.add(Round(4, 5, 9, players[2], 1));
rounds.add(Round(4, 5, 9, players[4], 1));
rounds.add(Round(1, 5, 6, players[6], 1));
rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(4, 2, 6, players[7], 1));
rounds.add(Round(3, 5, 8, players[8], 1));
rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(1, 5, 6, players[7], 1));
rounds.add(Round(4, 5, 9, players[8], 1));
rounds.add(Round(4, 5, 9, players[7], 1));
rounds.add(Round(4, 1, 5, players[8], 1));
}
List<Round> get rounds => _rounds;
List<Game> _games = [];
void _initGame() {
games.add(Game(
gameDetails[0].id,
DateTime.now().subtract(Duration(days: 14)),
123,
true,
[players[0].id, players[1].id]));
games.add(Game(gameDetails[1].id, DateTime.now(), 101, true,
[players[1].id, players[0].id]));
// games.add(Game(
// gameDetails[0].id,
// DateTime.now().subtract(Duration(days: 14)),
// 123,
// true,
// [players[0].id, players[1].id]));
// games.add(Game(gameDetails[1].id, DateTime.now(), 101, true,
// [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/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import '../widgets/button_new_party.dart';
@ -48,11 +52,12 @@ class _InGameScreenState extends State<InGameScreen> {
Spacer(),
ElevatedButton(
onPressed: () {
setState(() {
widgetHolder = InGameCardThrow(
numberThrow: 2,
);
});
GameDetail gd = GameDetail(1, DateTime.now(), null, 123, false,
MyApp.controller.userCurrent.id, [MyApp.controller.userCurrent, MyApp.controller.userMgr.getUserById(2)]);
MyApp.controller.gamePlayer.game = gd;
MyApp.controller.gameCurrent = gd;
MyApp.controller.gamePlayer.onNext(false, context);
},
child: Text(
"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(
alignment: Alignment.topCenter,
children: [
Positioned(
/*Positioned(
child: PodiumGameOverWidget(
isfirst: 2,
pseudo: 'Lucas',
@ -189,7 +189,7 @@ class ScoreBoardModal extends StatelessWidget {
),
top: 70,
right: 30,
)
)*/
],
),
)),

@ -4,116 +4,193 @@ import 'package:bowl_in/widgets/profil_listpodium_widget.dart';
import 'package:bowl_in/widgets/scores_list_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import '../model/AbstractRound.dart';
import '../model/GameDetail.dart';
import '../model/Player.dart';
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
State<FinalScoreBoard> createState() => _FinalScoreBoardState();
}
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
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.fromLTRB(30, 0, 30, 35),
width: double.infinity,
height: 470,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/ingame_cardgame.png"),
fit: BoxFit.fill),
boxShadow: [
BoxShadow(
color: CupertinoColors.black.withOpacity(0.15),
blurRadius: 10.0,
spreadRadius: 5.0,
),
]),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Padding(
padding: EdgeInsets.fromLTRB(15, 5, 15, 50),
child: RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: 'GAME OVER',
style: GoogleFonts.roboto(
fontSize: 15,
color: CupertinoColors.black,
fontWeight: FontWeight.w900,
decoration: TextDecoration.none)),
],
),
)),
Expanded(
child: Stack(
alignment: Alignment.topCenter,
children: [
Positioned(
child: PodiumGameOverWidget(
isfirst: 2,
pseudo: 'Lucas',
score: 123,
),
top: 70,
left: 30,
),
Positioned(
child: PodiumGameOverWidget(
isfirst: 1,
pseudo: 'Momo',
score: 160,
),
top: 10,
),
Positioned(
child: PodiumGameOverWidget(
isfirst: 3,
pseudo: 'popo',
score: 110,
),
top: 70,
right: 30,
)
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),
],
)),
Container(
width: double.infinity,
height: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/congrats_background.png"),
fit: BoxFit.cover),
),
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 120,
),
),
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 10),
child: Align(
Container(
margin: EdgeInsets.fromLTRB(30, 0, 30, 35),
width: double.infinity,
height: 470,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/ingame_cardgame.png"),
fit: BoxFit.fill),
boxShadow: [
BoxShadow(
color: CupertinoColors.black.withOpacity(0.15),
blurRadius: 10.0,
spreadRadius: 5.0,
),
]),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.fromLTRB(15, 5, 15, 50),
child: RichText(
text: TextSpan(
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: 'GAME OVER',
style: GoogleFonts.roboto(
fontSize: 15,
color: CupertinoColors.black,
fontWeight: FontWeight.w900,
decoration: TextDecoration.none)),
],
),
)),
Expanded(
child: Stack(
alignment: Alignment.topCenter,
children: [
rank.length > 1
? Positioned(
child: PodiumGameOverWidget(
isfirst: 2,
player: pseudoList[1],
score: scoreList[1],
),
top: 70,
left: 30,
)
: Container(),
rank.length > 0
? Positioned(
child: PodiumGameOverWidget(
isfirst: 1,
player: pseudoList[0],
score: scoreList[0],
),
top: 10,
)
: Container(),
rank.length > 2
? Positioned(
child: PodiumGameOverWidget(
isfirst: 3,
player: pseudoList[2],
score: scoreList[2],
),
top: 70,
right: 30,
)
: Container()
],
)),
Container(
width: double.infinity,
height: 100,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
"assets/images/congrats_background.png"),
fit: BoxFit.cover),
),
),
Padding(
padding: EdgeInsets.fromLTRB(0, 0, 0, 10),
child: Align(
child: Text(
"Play again",
style: GoogleFonts.roboto(
decoration: TextDecoration.none,
color: Colors.grey,
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
)
])),
Spacer(),
ElevatedButton(
onPressed: () {
context.go("/");
},
child: Text(
"Play again",
"LEAVE",
style: GoogleFonts.roboto(
decoration: TextDecoration.none,
color: Colors.grey,
fontWeight: FontWeight.bold,
fontSize: 20),
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 {
final int isfirst;
final String pseudo;
final Player player;
final int score;
const PodiumGameOverWidget(
{Key? key,
required this.isfirst,
required this.pseudo,
required this.player,
required this.score})
: super(key: key);
@ -129,8 +206,7 @@ class PodiumGameOverWidget extends StatelessWidget {
height: this.isfirst == 1 ? 65 : 50,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_red.png"),
fit: BoxFit.cover),
image: AssetImage(player.image), fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(70)),
),
),
@ -149,7 +225,7 @@ class PodiumGameOverWidget extends StatelessWidget {
Padding(
padding: EdgeInsets.fromLTRB(0, 3, 0, 0),
child: Text(
this.pseudo,
this.player.name,
style: GoogleFonts.roboto(
color: Colors.black,
fontWeight: FontWeight.bold,
@ -346,7 +422,13 @@ class _UserInGameState extends State<UserInGame> {
class InGameCardThrow extends StatefulWidget {
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);
@override
@ -354,6 +436,21 @@ class InGameCardThrow extends StatefulWidget {
}
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
Widget build(BuildContext context) {
return Container(
@ -388,7 +485,14 @@ class _InGameCardThrowState extends State<InGameCardThrow> {
fontWeight: FontWeight.w400,
decoration: TextDecoration.none)),
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(
fontSize: 18,
color: CupertinoColors.black,
@ -410,12 +514,15 @@ class _InGameCardThrowState extends State<InGameCardThrow> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Round_picture(
pseudo: "Lucas",
image: "assets/images/image_user_red.png"),
pseudo: widget.currentRound.player.name,
image: widget.currentRound.player.image),
],
)),
NumberPad(
numberThrow: widget.numberThrow,
setSelectedValue: widget.setSelectedValue,
currentRound: widget.currentRound,
maxValue: maxValue,
),
],
),
@ -493,15 +600,16 @@ class StrikeButton extends StatelessWidget {
class SpareButton extends StatelessWidget {
final int currentSelected;
final IntCallback onSonChanged;
final int valueToReturn;
const SpareButton(
{Key? key, required this.onSonChanged, required this.currentSelected})
{Key? key, required this.onSonChanged, required this.currentSelected, required this.valueToReturn})
: super(key: key);
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
onSonChanged(10);
onSonChanged(valueToReturn);
},
child: Container(
width: double.infinity,
@ -515,7 +623,7 @@ class SpareButton extends StatelessWidget {
"SPARE !",
style: GoogleFonts.roboto(
color:
currentSelected == 10 ? Colors.pink : CupertinoColors.black,
currentSelected == valueToReturn ? Colors.pink : CupertinoColors.black,
decoration: TextDecoration.none,
fontWeight: FontWeight.w900,
fontStyle: FontStyle.italic,
@ -528,24 +636,33 @@ class SpareButton extends StatelessWidget {
class NumberPad extends StatefulWidget {
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
State<NumberPad> createState() => _NumberPadState();
}
class _NumberPadState extends State<NumberPad> {
int NumSelected = 100;
int NumSelected = 0;
void updateId(int newNum) {
print(newNum);
setState(() {
NumSelected = newNum;
widget.setSelectedValue(newNum);
});
}
void initState() {
NumSelected = 100;
NumSelected = 0;
super.initState();
}
@ -565,7 +682,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 1,
isSelectable: 1,
isSelectable: widget.maxValue > 1 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -573,7 +690,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 2,
isSelectable: 1,
isSelectable: widget.maxValue > 2 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -581,7 +698,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 3,
isSelectable: 1,
isSelectable: widget.maxValue > 3 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -594,7 +711,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 4,
isSelectable: 1,
isSelectable: widget.maxValue > 4 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -602,7 +719,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 5,
isSelectable: 1,
isSelectable: widget.maxValue > 5 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -610,7 +727,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 6,
isSelectable: 1,
isSelectable: widget.maxValue > 6 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -623,7 +740,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 7,
isSelectable: 1,
isSelectable: widget.maxValue > 7 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -631,7 +748,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 8,
isSelectable: 0,
isSelectable: widget.maxValue > 8 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -639,7 +756,7 @@ class _NumberPadState extends State<NumberPad> {
Number(
currentSelected: NumSelected,
num: 9,
isSelectable: 0,
isSelectable: widget.maxValue > 9 ? 1 : 0,
onSonChanged: (int newId) {
updateId(newId);
},
@ -649,7 +766,7 @@ class _NumberPadState extends State<NumberPad> {
],
),
),
widget.numberThrow == 1
widget.currentRound.shotIsStrike()
? StrikeButton(
currentSelected: NumSelected,
onSonChanged: (int newId) {
@ -661,6 +778,7 @@ class _NumberPadState extends State<NumberPad> {
onSonChanged: (int newId) {
updateId(newId);
},
valueToReturn: widget.maxValue,
)
],
);

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

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