Merge pull request 'stubdata' branche
continuous-integration/drone/push Build is failing Details

ApiManager
Emre KARTAL 2 years ago
commit 981b3cc8eb

@ -9,5 +9,7 @@
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Dart SDK" level="project" />
<orderEntry type="library" name="Dart Packages" level="project" />
</component>
</module>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

@ -6,6 +6,7 @@ import '../views/ingame_screen.dart';
import '../views/main_screen.dart';
import '../views/rank_screen.dart';
import '../views/welcome_screen.dart';
import '../widgets/ingame_widgets.dart';
final GoRouter router = GoRouter(
routes: <RouteBase>[
@ -36,7 +37,7 @@ final GoRouter router = GoRouter(
GoRoute(
path: 'in-game',
builder: (BuildContext context, GoRouterState state) {
return const InGameScreen();
return InGameScreen();
},
),
],

@ -8,11 +8,15 @@ import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:bowl_in/config/app_router.dart';
import 'model/IManager.dart';
import 'model/StubManager/StubData.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
static IManager controller = StubData();
const MyApp({super.key});
@override
Widget build(BuildContext context) {

@ -1,27 +1,25 @@
import 'package:uuid/uuid.dart';
class Game {
Uuid _id;
DateTime _time;
int _id;
DateTime _date;
int _pointsCurrentUser;
bool _isFinished;
List<Uuid> _playerIds = [];
List<int> _playersId = [];
// Constructor
Game(this._id, this._time, this._pointsCurrentUser, this._isFinished,
this._playerIds);
Game(this._id, this._date, this._pointsCurrentUser, this._isFinished,
this._playersId);
// Getters and setters
Uuid get id => _id;
int get id => _id;
set id(Uuid value) {
set id(int value) {
_id = value;
}
DateTime get time => _time;
DateTime get date => _date;
set time(DateTime value) {
_time = value;
set date(DateTime value) {
_date = value;
}
int get pointsCurrentUser => _pointsCurrentUser;
@ -36,9 +34,9 @@ class Game {
_isFinished = value;
}
List<Uuid> get playerIds => _playerIds;
List<int> get playersId => _playersId;
set playerIds(List<Uuid> value) {
_playerIds = value;
set playersId(List<int> value) {
_playersId = value;
}
}

@ -1,15 +1,14 @@
import 'package:uuid/uuid.dart';
import 'Player.dart';
import 'Round.dart';
class GameDetail {
Uuid _id;
int _id;
DateTime _time;
Uuid _winner;
int _winner;
int _nbPoints;
bool _isFinished;
Round? _currentRound;
Uuid _host;
int _host;
List<Round> _rounds = [];
List<Player> _players = [];
@ -26,9 +25,9 @@ class GameDetail {
this._players);
// Getters and setters
Uuid get id => _id;
int get id => _id;
set id(Uuid value) {
set id(int value) {
_id = value;
}
@ -38,9 +37,9 @@ class GameDetail {
_time = value;
}
Uuid get winner => _winner;
int get winner => _winner;
set winner(Uuid value) {
set winner(int value) {
_winner = value;
}
@ -62,9 +61,15 @@ class GameDetail {
_currentRound = value;
}
<<<<<<< HEAD
Uuid get host => _host;
set host(Uuid value) {
=======
int get host => _host;
set host(int value) {
>>>>>>> origin/stubdata
_host = value;
}
@ -79,4 +84,30 @@ class GameDetail {
set players(List<Player> value) {
_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 = {};
for (var player in players) {
rank.addAll({player.id: this.getPointByPlayerId(player.id)});
}
var sortedByKeyMap = Map.fromEntries(
rank.entries.toList()..sort((e1, e2) => e2.value.compareTo(e1.value)));
return sortedByKeyMap;
}
}

@ -1,8 +1,6 @@
import 'package:uuid/uuid.dart';
import 'package:uuid/uuid_util.dart';
import 'Player.dart';
class Guest extends Player {
// Constructor
Guest(Uuid id, String image, String name) : super(id, image, name);
Guest(int id, String image, String name) : super(id, image, name);
}

@ -1,5 +1,5 @@
abstract class IAuthManager {
// Methods
bool verifiedUser(String name, String password);
bool verifiedUser(String mail, String password);
}

@ -1,15 +1,13 @@
import 'package:uuid/uuid.dart';
import 'package:uuid/uuid_util.dart';
import 'GameDetail.dart';
import 'Player.dart';
import 'User.dart';
abstract class IGameManager {
// Methods
GameDetail getGameById(Uuid id);
List<GameDetail> getGamesByPlayerId(Uuid id);
GameDetail getGameById(int id);
List<GameDetail> getGamesByPlayerId(int id);
List<GameDetail> getGamesByPlayer(Player user);
List<GameDetail> getGamesByPlayers(List<Player> users);
List<User> getPlayersByIdGame(Uuid id);
Map<int, Uuid> getRankByIdGame(Uuid id);
List<Player> getPlayersByIdGame(int id);
Map<int, int> getRankByIdGame(int id);
}

@ -9,9 +9,14 @@ abstract class IManager {
late Game _gameCurrent;
late IUserManager _userMgr;
late IGameManager _gameMgr;
// Getters and setters
User get userCurrent => _userCurrent;
set userCurrent(User user) {
_userCurrent = user;
}
Game get gameCurrent => _gameCurrent;
IUserManager get userMgr => _userMgr;
IGameManager get gameMgr => _gameMgr;

@ -1,4 +1,4 @@
import 'package:uuid/uuid.dart';
import 'Player.dart';
import 'User.dart';
import 'IAuthManager.dart';
@ -10,6 +10,7 @@ abstract class IUserManager {
// Methods
IAuthManager get authMgr => _authMgr;
List<User> getUsersByName(String name);
User getUserById(Uuid id);
List<Player> getUsersByName(String name);
Player getUserById(int id);
List<User> getRankingWithFriends();
}

@ -1,7 +1,5 @@
import 'package:uuid/uuid.dart';
class Player {
final Uuid _id;
final int _id;
String _name;
String _image;
@ -9,7 +7,7 @@ class Player {
Player(this._id, this._name, this._image);
// Getters and setters
Uuid get id => _id;
int get id => _id;
String get name => _name;

@ -1,5 +1,6 @@
library StubLib;
import '../IAuthManager.dart';
import '../User.dart';
import 'StubData.dart';
class AuthManager extends IAuthManager {
@ -8,7 +9,13 @@ class AuthManager extends IAuthManager {
// Constructor
AuthManager(this.parent);
// Methods
bool verifiedUser(String name, String password) {
return false;
bool verifiedUser(String mail, String password) {
for (var user in parent.players) {
if (user is User && user.mail == mail) {
parent.userCurrent = user as User;
return true;
}
}
return false;
}
}

@ -1,43 +1,84 @@
library StubLib;
import '../Game.dart';
import '../IGameManager.dart';
import '../GameDetail.dart';
import '../Player.dart';
import '../User.dart';
import '../Guest.dart';
import 'StubData.dart';
import 'package:uuid/uuid.dart';
class GameManager extends IGameManager {
List<GameDetail> games = [];
final StubData parent;
// Constructor
GameManager(this.parent);
// Methods
GameDetail getGameById(Uuid id) {
return new GameDetail(
Uuid(), DateTime.now(), Uuid(), 290, true, null, Uuid(), [], []);
GameDetail getGameById(int id) {
for (var element in parent.gameDetails) {
if (element.id == id) {
return element;
}
}
throw Exception("Game not found.");
}
List<GameDetail> getGamesByPlayerId(Uuid id) {
return [];
List<GameDetail> getGamesByPlayerId(int id) {
List<GameDetail> games = [];
for (var element in parent.gameDetails) {
for (Player player in element.players) {
if (player.id == id) {
games.add(element);
break;
}
}
}
return games;
}
List<GameDetail> getGamesByPlayer(Player user) {
return [];
List<GameDetail> games = [];
for (var element in parent.gameDetails) {
for (Player player in element.players) {
if (player.id == user.id) {
games.add(element);
break;
}
}
}
return games;
}
List<GameDetail> getGamesByPlayers(List<Player> users) {
return [];
List<GameDetail> games = [];
for (var element in parent.gameDetails) {
if (element.players.toSet().containsAll(users.toSet())) {
games.add(element);
}
}
return games;
}
List<User> getPlayersByIdGame(Uuid id) {
return [];
List<Player> getPlayersByIdGame(int id) {
List<Player> players = [];
for (var element in parent.gameDetails) {
if (element.id == id) {
for (var player in element.players) {
players.add(player);
}
return players;
}
}
throw Exception("Game not found.");
}
Map<int, Uuid> getRankByIdGame(Uuid id) {
return {};
Map<int, int> getRankByIdGame(int id) {
for (var game in parent.gameDetails) {
if (game.id == id) {
return game.getRank();
}
}
throw Exception("Game not found.");
}
}

@ -1,13 +1,17 @@
library StubLib;
import '../IManager.dart';
import '../Game.dart';
import '../IUserManager.dart';
import '../IGameManager.dart';
import '../Player.dart';
import '../Round.dart';
import '../User.dart';
import '../Achievement.dart';
import '../GameDetail.dart';
import '../Stat.dart';
import 'UserManager.dart';
import 'GameManager.dart';
import 'package:uuid/uuid.dart';
class StubData extends IManager {
late IUserManager _userMgr;
@ -16,11 +20,169 @@ class StubData extends IManager {
StubData() {
_userMgr = UserManager(this);
_gameMgr = GameManager(this);
_initRounds();
_initGameDetails();
_initGame();
userCurrent = players[8] as User;
userCurrent.games = games;
}
List<User> users = [
User(Uuid(),"Emre","https://fastly.picsum.photos/id/1060/2000/2000.jpg?hmac=_RrU8GpkCDUlVKfgyWE-GcX-GS5TKNyUzdFbJAGXHV4","emre.kartal@etu.uca.fr", [Achievement("5 games"), Achievement("2 strikes in a row"), Achievement("Win a game")], [], Stat(10,2,12,130,7,6,700,58.33,30.2)),
User(Uuid(),"Dave","https://fastly.picsum.photos/id/820/2000/2000.jpg?hmac=Ctxx2feJNZnG1S7UPx_YrWcEw89tKb7fR8i1W-VTOz4","david.d_almeida@etu.uca.fr", [Achievement("5 games"), Achievement("0 point"), Achievement("Win a game")], [], Stat(2,7,9,80,4,3,250,27.77,10.55))
IUserManager get userMgr => _userMgr;
IGameManager get gameMgr => _gameMgr;
List<Player> players = [
Player(1, "Mathieu", "./assets/images/image_user_cyan.png"),
Player(2, "Robin", "./assets/images/image_user_purple.png"),
Player(3, "Lucas", "./assets/images/image_user_red.png"),
Player(4, "Emre", "./assets/images/image_user_blue.png"),
Player(5, "Louison", "./assets/images/image_user_cyan.png"),
Player(6, "Arthur", "./assets/images/image_user_yellow.png"),
Player(7, "David", "./assets/images/image_user_pink.png"),
User(
8,
"Emre",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 130, 7, 6, 700, 58.33, 30.2)),
User(
9,
"Dave",
"./assets/images/image_user_cyan.png",
"david.d_almeida@etu.uca.fr",
[
Achievement("5 games"),
Achievement("0 point"),
Achievement("Win a game")
],
[
User(
21,
"Arthur",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 110, 7, 6, 700, 58.33, 30.2)),
User(
22,
"Louison",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 150, 7, 6, 700, 58.33, 30.2)),
User(
23,
"Owen",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 10, 7, 6, 700, 58.33, 30.2)),
User(
24,
"LULU",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 40, 7, 6, 700, 58.33, 30.2)),
User(
25,
"Raphael",
"./assets/images/image_user_cyan.png",
"emre.kartal@etu.uca.fr",
[
Achievement("5 games"),
Achievement("2 strikes in a row"),
Achievement("Win a game")
],
[],
Stat(10, 2, 12, 76, 7, 6, 700, 58.33, 30.2)),
],
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]]));
}
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]));
}
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]));
}
List<Game> get games => _games;
}

@ -1,23 +1,45 @@
library StubLib;
import 'package:bowl_in/model/User.dart';
import '../IUserManager.dart';
import '../IAuthManager.dart';
import '../Player.dart';
import 'AuthManager.dart';
import 'StubData.dart';
import '../User.dart';
import '../Player.dart';
import '../Stat.dart';
import 'package:uuid/uuid.dart';
class UserManager extends IUserManager {
final StubData parent;
// Constructor
UserManager(this.parent):super(AuthManager(parent));
UserManager(this.parent) : super(AuthManager(parent));
// Methods
List<User> getUsersByName(String name) {
return [];
List<Player> getUsersByName(String name) {
List<Player> players = [];
for (var player in parent.players) {
if (player.name == name) {
players.add(player);
}
}
return players;
}
User getUserById(Uuid id) {
return User(Uuid(),"","","",[],[], Stat(10,10,10,10,10,10,10,10,10));
Player getUserById(int id) {
for (var player in parent.players) {
if (player.id == id) {
return player;
}
}
throw new Exception("Player not found");
}
@override
List<User> getRankingWithFriends() {
List<User> sortedPlayers = List.from(parent.userCurrent.friends);
sortedPlayers.sort((a, b) => b.stat.highscore.compareTo(a.stat.highscore));
return sortedPlayers;
}
}
}

@ -1,4 +1,3 @@
import 'package:uuid/uuid.dart';
import 'Achievement.dart';
import 'Game.dart';
import 'Player.dart';
@ -12,7 +11,7 @@ class User extends Player {
List<Game> games = [];
// Constructor
User(Uuid id, String name, String image, this._mail, this._achievements,
User(int id, String name, String image, this._mail, this._achievements,
this._friends, this._stat)
: super(id, name, image);
@ -37,7 +36,7 @@ class User extends Player {
Stat get stat => _stat;
set stats(Stat value) {
set stat(Stat value) {
_stat = value;
}
}

@ -1,3 +1,4 @@
import 'package:bowl_in/main.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -20,7 +21,7 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
child: Stack(alignment: Alignment.topCenter, children: [
Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * 1.45,
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
@ -42,15 +43,18 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
children: [
Positioned(
left: 34,
child: SpareCard(score: 12),
child: SpareCard(
score: MyApp.controller.userCurrent.stat.nbSpares),
),
Positioned(
top: 0,
child: StrikeCard(score: 12),
child: StrikeCard(
score: MyApp.controller.userCurrent.stat.nbStrikes),
),
Positioned(
right: 34,
child: GameCard(score: 12),
child: GameCard(
score: MyApp.controller.userCurrent.stat.nbGames),
)
],
),
@ -80,18 +84,13 @@ class _AnalysisScreenState extends State<AnalysisScreen> {
spacing: 10,
verticalDirection: VerticalDirection.up,
children: [
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(title: "Average", val: 12),
StatsCard(
title: "Number of victory",
val: MyApp.controller.userCurrent.stat.nbVictory
.toDouble()),
StatsCard(
title: "Average pins per round",
val: MyApp.controller.userCurrent.stat.avgPinsPerRound),
],
))
]),

@ -29,23 +29,18 @@ class _GameScreenState extends State<GameScreen> {
],
)),
),
Align(
alignment: AlignmentDirectional.topCenter,
child: Container(
height: 120,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_score.png"),
)),
child: Center(
child: Text(
"Scores",
style: TextStyle(
fontWeight: FontWeight.bold,
color: Colors.white,
fontSize: 20),
)),
),
Container(
height: 120,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_score.png"),
)),
child: Center(
child: Text(
"Scores",
style: TextStyle(
fontWeight: FontWeight.bold, color: Colors.white, fontSize: 20),
)),
),
Column(
mainAxisAlignment: MainAxisAlignment.end,
@ -54,19 +49,14 @@ class _GameScreenState extends State<GameScreen> {
mainAxisAlignment: MainAxisAlignment.center,
children: [
ButtonNewParty(),
SizedBox(width: 20),
const SizedBox(width: 20),
ButtonJoinParty(),
],
),
Align(
alignment: Alignment.bottomCenter,
child: Positioned(
bottom: 0,
child: Container(
height: MediaQuery.of(context).size.height - 140,
width: MediaQuery.of(context).size.width,
child: ListCardGame(),
)),
Container(
height: MediaQuery.of(context).size.height - 140,
width: MediaQuery.of(context).size.width,
child: ListCardGame(),
),
],
)

@ -48,7 +48,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
mainAxisAlignment: MainAxisAlignment.start,
verticalDirection: VerticalDirection.up,
children: [
ListAchievementWidget(nbUnlocked: 1),
ListAchievementWidget(nbUnlocked: 0),
Padding(
padding: EdgeInsets.fromLTRB(40, 0, 0, 0),
child: ProfileWidget()),

@ -1,6 +1,8 @@
import 'package:bowl_in/main.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../model/User.dart';
import '../widgets/profil_listpodium_widget.dart';
class RankScreen extends StatefulWidget {
@ -11,6 +13,7 @@ class RankScreen extends StatefulWidget {
}
class _RankScreenState extends State<RankScreen> {
List<User> rank = MyApp.controller.userMgr.getRankingWithFriends();
@override
Widget build(BuildContext context) {
return Stack(alignment: Alignment.center, children: [
@ -60,16 +63,21 @@ class _RankScreenState extends State<RankScreen> {
Positioned(
left: 65,
top: MediaQuery.of(context).size.height * 0.195,
child: ProfilPodiumWidget(isfirst: 0, pseudo: "Louison", score: 122)),
child: ProfilPodiumWidget(
isfirst: 0, pseudo: rank[1].name, score: rank[1].stat.highscore)),
Positioned(
top: MediaQuery.of(context).size.height * 0.114,
child: Align(
child: ProfilPodiumWidget(isfirst: 1, pseudo: "Lucas", score: 167),
child: ProfilPodiumWidget(
isfirst: 1,
pseudo: rank[0].name,
score: rank[0].stat.highscore),
)),
Positioned(
right: 65,
top: MediaQuery.of(context).size.height * 0.219,
child: ProfilPodiumWidget(isfirst: 0, pseudo: "David", score: 102),
child: ProfilPodiumWidget(
isfirst: 0, pseudo: rank[2].name, score: rank[2].stat.highscore),
),
Positioned(
bottom: -40,
@ -82,7 +90,7 @@ class _RankScreenState extends State<RankScreen> {
image: DecorationImage(
image: AssetImage("assets/images/image_podium.png"),
)),
child: ListPodium(),
child: rank.length > 3 ? ListPodium() : Container(),
)
],
)),

@ -1,3 +1,4 @@
import 'package:bowl_in/main.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
@ -84,7 +85,7 @@ class ListAchievementWidget extends StatelessWidget {
imagePath: 'assets/images/achievements/win_locked.png',
imagePathUnlocked:
'assets/images/achievements/win_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath:
@ -105,19 +106,19 @@ class ListAchievementWidget extends StatelessWidget {
'assets/images/achievements/2strikeinarow_locked.png',
imagePathUnlocked:
'assets/images/achievements/2strikeinarow_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath: 'assets/images/achievements/5games_locked.png',
imagePathUnlocked:
'assets/images/achievements/5games_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath: 'assets/images/achievements/10spares_locked.png',
imagePathUnlocked:
'assets/images/achievements/10spares_unlocked.png',
isUnlocked: 1,
isUnlocked: 0,
),
AchievementWidget(
imagePath:
@ -152,7 +153,7 @@ class ProfileWidget extends StatelessWidget {
width: 80,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_orange.png"),
image: AssetImage(MyApp.controller.userCurrent.image),
fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(100)),
),
@ -163,7 +164,7 @@ class ProfileWidget extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Lucas",
MyApp.controller.userCurrent.name,
style: GoogleFonts.roboto(
color: Colors.white,
fontStyle: FontStyle.italic,
@ -186,7 +187,9 @@ class ProfileWidget extends StatelessWidget {
fontSize: 15),
),
TextSpan(
text: "122 pts",
text: MyApp.controller.userCurrent.stat.highscore
.toString() +
" pts",
style: GoogleFonts.roboto(
color: Color(0xffF40375).withOpacity(0.75),
fontStyle: FontStyle.italic,
@ -197,38 +200,44 @@ class ProfileWidget extends StatelessWidget {
),
),
),
RichText(
text: TextSpan(
text: '',
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: "Last game ",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: "23",
style: GoogleFonts.roboto(
color: Colors.white,
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: " days(s) ago",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
],
),
),
MyApp.controller.userCurrent.games.length > 0
? RichText(
text: TextSpan(
text: '',
style: DefaultTextStyle.of(context).style,
children: <TextSpan>[
TextSpan(
text: "Last game ",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: DateTime.now()
.difference(MyApp
.controller.userCurrent.games.first.date)
.inDays
.toString(),
style: GoogleFonts.roboto(
color: Colors.white,
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
TextSpan(
text: " days(s) ago",
style: GoogleFonts.roboto(
color: Colors.white.withOpacity(0.65),
fontStyle: FontStyle.italic,
fontWeight: FontWeight.bold,
fontSize: 15),
),
],
),
)
: Container(),
],
),
)

@ -100,7 +100,7 @@ class GameCard extends StatelessWidget {
class StatsCard extends StatelessWidget {
final String title;
final int val;
final double val;
const StatsCard({Key? key, required this.title, required this.val})
: super(key: key);

@ -1,13 +1,16 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:google_fonts/google_fonts.dart';
import 'ingame_widgets.dart';
class ButtonNewParty extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {},
onPressed: () => context.go('/in-game'),
child: Text("+ New game"),
style: ElevatedButton.styleFrom(
side: BorderSide(
@ -139,6 +142,65 @@ class NewGameModal extends StatelessWidget {
}
}
class ScoreBoardModal extends StatelessWidget {
const ScoreBoardModal({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Dialog(
child: Stack(
alignment: Alignment.topCenter,
children: [
Transform.scale(
scale: 1.14,
child: Image.asset("assets/images/image_scoreboard.png")),
SizedBox(
height: 245,
child:
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Expanded(
child: Padding(
padding: EdgeInsets.fromLTRB(0, 40, 0, 0),
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,
)
],
),
)),
]),
)
],
),
);
}
}
class ButtonJoinParty extends StatelessWidget {
@override
Widget build(BuildContext context) {

@ -3,6 +3,10 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../main.dart';
import '../model/Player.dart';
import '../model/User.dart';
class ProfilPodiumWidget extends StatelessWidget {
final int isfirst;
final String pseudo;
@ -149,58 +153,22 @@ class ListPodium extends StatelessWidget {
@override
Widget build(BuildContext context) {
List<User> rank = MyApp.controller.userMgr.getRankingWithFriends();
return Padding(
padding: EdgeInsets.fromLTRB(20, 80, 20, 0),
child: SizedBox(
height: 500,
child: ScrollConfiguration(
behavior: CustomScroll(),
child: ListView(
children: [
ProfilListWidget(
position: 4,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 5,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 6,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 7,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 8,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 9,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 10,
pseudo: 'Emre',
score: 35,
),
ProfilListWidget(
position: 11,
pseudo: 'Emre',
score: 35,
),
SizedBox(
height: 50,
),
],
child: ListView.builder(
itemCount: rank.length - 3,
itemBuilder: (BuildContext context, int index) {
return ProfilListWidget(
position: 4 + index,
pseudo: rank[index + 3].name,
score: rank[index + 3].stat.highscore,
);
},
),
)));
}

@ -1,13 +1,23 @@
import 'package:bowl_in/main.dart';
import 'package:bowl_in/widgets/button_new_party.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 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
import 'package:simple_gradient_text/simple_gradient_text.dart';
import '../model/Game.dart';
class CardGame extends StatelessWidget {
final Game game;
const CardGame({Key? key, required this.game}) : super(key: key);
@override
Widget build(BuildContext context) {
initializeDateFormatting();
return Padding(
padding: EdgeInsets.fromLTRB(41, 0, 41, 10),
child: GestureDetector(
@ -29,7 +39,7 @@ class CardGame extends StatelessWidget {
),
),
child: Padding(
padding: EdgeInsets.fromLTRB(130, 3, 0, 0),
padding: EdgeInsets.fromLTRB(120, 0, 3, 0),
child: ClipRect(
clipBehavior: Clip.hardEdge,
child: Opacity(
@ -37,7 +47,7 @@ class CardGame extends StatelessWidget {
child: Stack(
children: [
GradientText(
"125",
game.pointsCurrentUser.toString(),
style: GoogleFonts.karla(
fontSize: 105.0,
fontWeight: FontWeight.w900,
@ -56,7 +66,7 @@ class CardGame extends StatelessWidget {
],
),
GradientText(
"125",
game.pointsCurrentUser.toString(),
style: GoogleFonts.karla(
fontSize: 105.0,
fontWeight: FontWeight.w900,
@ -77,13 +87,17 @@ class CardGame extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Toast(),
Toast(),
],
),
Padding(
padding: EdgeInsets.fromLTRB(5, 3, 10, 3),
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Toast(
value: DateFormat('dd MMMM', 'fr_FR')
.format(game.date)),
Toast(value: DateFormat('HH:mm').format(game.date)),
],
)),
Stack(
children: [
Row(
@ -93,25 +107,23 @@ class CardGame extends StatelessWidget {
Padding(
padding: EdgeInsets.fromLTRB(25, 15, 0, 0),
child: SizedBox(
width: 130,
child: Wrap(
spacing: 5,
runSpacing: 5,
children: [
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
ProfilPicture(),
],
),
)),
Spacer(),
width: 130,
child: Wrap(
spacing: 5,
runSpacing: 5,
children: game.playersId
.map((e) => ProfilPicture(
path: MyApp.controller.userMgr
.getUserById(e)
.image
.toString(),
))
.toList()))),
const Spacer(),
Padding(
padding: EdgeInsets.fromLTRB(0, 30, 15, 0),
padding: EdgeInsets.fromLTRB(0, 25, 15, 0),
child: GradientText(
"125",
game.pointsCurrentUser.toString(),
style: TextStyle(
fontSize: 40.0,
fontWeight: FontWeight.w900,
@ -133,7 +145,13 @@ class CardGame extends StatelessWidget {
),
],
),
onTap: () => context.go('/in-game'),
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return ScoreBoardModal();
});
},
));
}
}
@ -151,36 +169,27 @@ class ListCardGame extends StatelessWidget {
Widget build(BuildContext context) {
return ScrollConfiguration(
behavior: CustomScroll(),
child: ListView(
child: ListView.builder(
shrinkWrap: false,
children: <Widget>[
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
CardGame(),
],
itemCount: MyApp.controller.userCurrent.games.length,
itemBuilder: (BuildContext context, int index) {
return CardGame(game: MyApp.controller.userCurrent.games[index]);
},
));
}
}
class ProfilPicture extends StatelessWidget {
final String path;
const ProfilPicture({Key? key, required this.path}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
height: 25,
width: 25,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/images/image_user_green.png"),
fit: BoxFit.cover),
image: DecorationImage(image: AssetImage(path), fit: BoxFit.cover),
borderRadius: BorderRadius.all(Radius.circular(20)),
),
);
@ -188,6 +197,9 @@ class ProfilPicture extends StatelessWidget {
}
class Toast extends StatelessWidget {
final String value;
const Toast({Key? key, required this.value}) : super(key: key);
@override
Widget build(BuildContext context) {
return Padding(
@ -200,7 +212,7 @@ class Toast extends StatelessWidget {
child: Padding(
padding: EdgeInsets.fromLTRB(11.0, 3, 11.0, 3),
child: Text(
"12 janv.",
value,
style: TextStyle(
fontSize: 10,
color: Colors.white,

@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: archive
sha256: ed7cc591a948744994714375caf9a2ce89e1d82e8243997c8a2994d57181c212
sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d
url: "https://pub.dev"
source: hosted
version: "3.3.5"
version: "3.3.6"
args:
dependency: transitive
description:
name: args
sha256: "139d809800a412ebb26a3892da228b2d0ba36f0ef5d9a82166e5e52ec8d61611"
sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
version: "2.4.0"
async:
dependency: transitive
description:
@ -156,10 +156,10 @@ packages:
dependency: "direct main"
description:
name: go_router
sha256: f611d4396469c46db1c61e934a86e2a590ce02de2a6050d01f677879ce151f4a
sha256: b4bb06205ec607278b6fc23db238278417bca84a3905779cc68d1eb7afae37e2
url: "https://pub.dev"
source: hosted
version: "6.0.1"
version: "6.2.0"
google_fonts:
dependency: "direct main"
description:
@ -192,6 +192,13 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.3.0"
intl:
dependency: "direct main"
description:
name: intl
url: "https://pub.dartlang.org"
source: hosted
version: "0.18.0"
js:
dependency: transitive
description:
@ -220,10 +227,10 @@ packages:
dependency: transitive
description:
name: logging
sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946
sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
version: "1.1.1"
matcher:
dependency: transitive
description:
@ -260,50 +267,50 @@ packages:
dependency: transitive
description:
name: path_provider
sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95
sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9"
url: "https://pub.dev"
source: hosted
version: "2.0.12"
version: "2.0.13"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e
sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e"
url: "https://pub.dev"
source: hosted
version: "2.0.22"
version: "2.0.23"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "6637955e38a5f1851c023482c25a60c93972ea06c8608e2f25ad0064c46c0939"
sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.2"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379
sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a"
url: "https://pub.dev"
source: hosted
version: "2.1.7"
version: "2.1.9"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76
sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec"
url: "https://pub.dev"
source: hosted
version: "2.0.5"
version: "2.0.6"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c
sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.4"
petitparser:
dependency: transitive
description:
@ -324,10 +331,10 @@ packages:
dependency: transitive
description:
name: plugin_platform_interface
sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a
sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.4"
pointycastle:
dependency: transitive
description:
@ -441,10 +448,10 @@ packages:
dependency: transitive
description:
name: xdg_directories
sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86
sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1
url: "https://pub.dev"
source: hosted
version: "0.2.0+3"
version: "1.0.0"
xml:
dependency: transitive
description:

@ -40,6 +40,8 @@ dependencies:
google_fonts: ^3.0.1
go_router: ^6.0.1
uuid: ^3.0.7
intl: ^0.18.0
dev_dependencies:
flutter_test:

@ -5,9 +5,9 @@ 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';
import 'package:uuid/uuid.dart';
void main() {
List<Stat> stats = [];
@ -35,7 +35,7 @@ void main() {
}
User ami = User(
Uuid(),
5,
"Lucas",
"https://fastly.picsum.photos/id/288/2000/2000.jpg?hmac=AUboE-jzAzofYj_O3w_EqtZU3JHzcg7HR1IQd1Ce7lY",
"Lucas.delanier@etu.uca.fr",
@ -44,17 +44,17 @@ void main() {
stats[1]);
List<Player> players = [
Player(Uuid(), "Rami",
Player(1, "Rami",
"https://fastly.picsum.photos/id/1060/2000/2000.jpg?hmac=_RrU8GpkCDUlVKfgyWE-GcX-GS5TKNyUzdFbJAGXHV4"),
Player(Uuid(), "Emre",
Player(2, "Emre",
"https://fastly.picsum.photos/id/670/2000/2000.jpg?hmac=zWqTr_vDEab3dBtp7JZgJP8TRCPNanJ4tYwDDd-jGYA"),
Guest(Uuid(), "Bot1",
Guest(3, "Bot1",
"https://fastly.picsum.photos/id/820/2000/2000.jpg?hmac=Ctxx2feJNZnG1S7UPx_YrWcEw89tKb7fR8i1W-VTOz4"),
Guest(Uuid(), "Bot2",
Guest(4, "Bot2",
"https://fastly.picsum.photos/id/288/2000/2000.jpg?hmac=AUboE-jzAzofYj_O3w_EqtZU3JHzcg7HR1IQd1Ce7lY"),
ami,
User(
Uuid(),
6,
"Louison",
"https://fastly.picsum.photos/id/1029/2000/2000.jpg?hmac=_K3pMobVk00dfNR7rsj1NLnEBB5Gf88SvGPbbjoH-Uc",
"louison.parant@etu.uca.fr",
@ -70,42 +70,23 @@ void main() {
print("Players :");
// afficahge de toutes les informations de tous les joueurs
for (var player in players) {
if (player is Guest) {
print(
"\tID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: Guest");
} else if (player is User) {
print(
"\tID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: User");
print("\tAchievements:");
for (var achievement in player.achievements) {
print("\t\tNom: ${achievement.name}");
}
print("\tAmis:");
for (var amis in player.friends) {
print("\t\tNom: ${amis.name}, Mail: ${amis.mail}");
}
print(
"\tVictoires: ${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(
"\tID: ${player.id}, Nom: ${player.name}, Image: ${player.image}, Type: Player");
}
displayPlayer(player,1);
}
//GameDetail
List<GameDetail> games = [
GameDetail(
Uuid(), DateTime.now(), players[0].id, 290, true, null, players[0].id, [
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]),
Round(5, 1, 12, players[0])
], [
players[0],
players[1]
]),
GameDetail(Uuid(), DateTime.now().subtract(Duration(days: 2)),
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]),
@ -115,7 +96,7 @@ void main() {
players[0],
players[1]
]),
GameDetail(Uuid(), DateTime.now().subtract(Duration(days: 4)),
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]),
@ -126,13 +107,13 @@ void main() {
players[2]
]),
GameDetail(
Uuid(),
DateTime.now().subtract(Duration(days: 7)),
players[3].id,
120,
true,
Round(12, null, 12, players[3]),
players[3].id, [
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]),
@ -143,7 +124,7 @@ void main() {
players[2],
players[3]
]),
GameDetail(Uuid(), DateTime.now().subtract(Duration(days: 10)),
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]),
@ -155,8 +136,8 @@ void main() {
players[3],
players[4]
]),
GameDetail(Uuid(), DateTime.now().subtract(Duration(days: 12)),
players[1].id, 240, true, null, players[1].id, [
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]),
@ -167,7 +148,7 @@ void main() {
players[2],
players[4]
]),
GameDetail(Uuid(), DateTime.now().subtract(Duration(days: 15)),
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]),
@ -183,30 +164,115 @@ void main() {
print("GameDetail :");
for (var game in games) {
print("\tGame ID: ${game.id}");
print("\tTime: ${game.time}");
print("\tWinner: ${game.winner}");
print("\tNumber of Points: ${game.nbPoints}");
print("\tIs Finished: ${game.isFinished}");
print("\tCurrent Round: ${game.currentRound}");
print("\tHost: ${game.host}");
print("\tRounds:");
for (var round in game.rounds) {
print("\t\tRound Score: ${round.firstThrow}");
print("\t\tRound Bonus: ${round.secondThrow}");
print("\t\tRound Total: ${round.points}");
print("\t\tRound Player: ${round.player.name}");
}
displayGameDetail(game,1);
print("\t-----------------------------------------");
}
print("StubManager:");
IManager mgr = new StubData();
print("\tPlayers:");
for (var player in game.players) {
print("\t\tPlayer ID: ${player.id}");
print("\t\tPlayer Name: ${player.name}");
}
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');
});
print("\t-----------------------------------------");
print("StubManager:");
}
}
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