Implementing bowling game algorithm
continuous-integration/drone/push Build is failing Details

Arthur_BowlingAlgo
Arthur VALIN 2 years ago
parent a2257a8711
commit 86d6f5afb5

@ -1,3 +1,6 @@
import 'package:bowl_in/model/AbstractRound.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';
@ -38,6 +41,9 @@ 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();
},
),

@ -4,12 +4,13 @@ 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);
AbstractRound(this._firstThrow, this._secondThrow, this._points, this._player, this._number);
// Getters and setters
int? get firstThrow => _firstThrow;
@ -30,6 +31,13 @@ abstract class AbstractRound {
_points = value;
}
int get number => _number;
set number(int value) {
_number = value;
}
Player get player => _player;
set player(Player value) {
@ -44,6 +52,7 @@ abstract class AbstractRound {
bool computeNext(int val);
void computePoints();
bool shotIsStrike();
bool isStrike() {
return firstThrow==10;
@ -57,6 +66,7 @@ abstract class AbstractRound {
return (firstThrow ?? 0)+(secondThrow ?? 0)==10;
}
void subscribe(AbstractRound nextRound){
nextRound.previousRound=this;
}

@ -1,4 +1,7 @@
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';
@ -6,7 +9,7 @@ import 'Round.dart';
class GameDetail {
int _id;
DateTime _time;
int _winner;
int? _winner;
int _nbPoints;
bool _isFinished;
int _host;
@ -21,8 +24,19 @@ class GameDetail {
this._nbPoints,
this._isFinished,
this._host,
this._rounds,
this._players);
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 +51,9 @@ class GameDetail {
_time = value;
}
int get winner => _winner;
int? get winner => _winner;
set winner(int value) {
set winner(int? value) {
_winner = value;
}

@ -3,27 +3,42 @@ import 'package:flutter/cupertino.dart';
import 'GameDetail.dart';
import 'package:go_router/go_router.dart';
import 'Round.dart';
class GamePlayer{
final GameDetail game;
late GameDetail _game;
int currentRoundIndex = 0;
final BuildContext context;
GamePlayer(this.game, this.context);
GameDetail get game => _game;
set game(GameDetail value) {
currentRoundIndex = 0;
_game = value;
}
void onNext(bool isRoundFinished){
void onNext(bool isRoundFinished, BuildContext context){
if(isRoundFinished){
print("++");
currentRoundIndex++;
}
if(currentRoundIndex>game.rounds.length){
if(currentRoundIndex>=game.rounds.length){
print("FINISHED");
context.go("/scoreboard");
}else{
context.go("/in-game", extra: game.rounds[currentRoundIndex]);
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){
if(currentRoundIndex<game.rounds.length-game.players.length){
print("ON SPAREORSTRIKE");
game.rounds[currentRoundIndex].subscribe(game.rounds[currentRoundIndex+game.players.length]);
}
}

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

@ -5,7 +5,7 @@ import 'Player.dart';
class LastRound extends AbstractRound{
int? _thirdThrow;
LastRound(super.firstThrow, super.secondThrow, super.points, super.player, this._thirdThrow);
LastRound(super.firstThrow, super.secondThrow, super.points, super.player, super.number, this._thirdThrow);
int? get thirdThrow => _thirdThrow;
@ -21,14 +21,11 @@ class LastRound extends AbstractRound{
previousRound?.update(val);
}
return false;
}else if(secondThrow!=null){
}else if(secondThrow==null){
secondThrow=val;
return false;
return ((firstThrow??0)+(secondThrow??0)<10);
}else if((firstThrow??0)+(secondThrow??0)>=10){
thirdThrow=val;
return false;
}
computePoints();
return true;
@ -44,5 +41,14 @@ class LastRound extends AbstractRound{
unsubscribePreviousRound();
}
@override
bool shotIsStrike(){
if(firstThrow==null){
return true;
}else if(secondThrow==null){
return firstThrow==10;
}else{
return secondThrow==10;
}
}
}

@ -3,9 +3,7 @@ import 'GamePlayer.dart';
class Round extends AbstractRound{
GamePlayer gamePlayer;
Round(super.firstThrow, super.secondThrow, super.points, super.player, this.gamePlayer);
Round(super.firstThrow, super.secondThrow, super.points, super.player, super.number);
@override
bool computeNext(int val) {
@ -15,13 +13,12 @@ class Round extends AbstractRound{
previousRound?.update(val);
unsubscribePreviousRound();
}
return false; //Le round n'est pas fini
}else if(firstThrow==10){
return val==10;
}else if(firstThrow!=10 && secondThrow!=null){
secondThrow=val;
return false; //Le round n'est pas fini
}
computePoints();
return true; //Le round est fini
return true;
}
@override
@ -31,12 +28,13 @@ class Round extends AbstractRound{
if(previousRound?.isStrike() ?? false){
previousRound?.update(points ?? 0);
}
if(isSpareOrStrike()){
gamePlayer.onSpareOrStrike();
}
unsubscribePreviousRound();
}
@override
bool shotIsStrike(){
return firstThrow==null;
}
}

@ -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,66 +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, 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]]));
// 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], gamePlayer));
rounds.add(Round(4, 1, 5, players[8], gamePlayer));
rounds.add(Round(4, 5, 9, players[7], gamePlayer));
rounds.add(Round(4, 1, 5, players[1], gamePlayer));
rounds.add(Round(4, 5, 9, players[7], gamePlayer));
rounds.add(Round(1, 5, 6, players[8], gamePlayer));
rounds.add(Round(4, 1, 5, players[7], gamePlayer));
rounds.add(Round(1, 5, 6, players[8], gamePlayer));
rounds.add(Round(4, 5, 9, players[7], gamePlayer));
rounds.add(Round(9, 0, 9, players[8], gamePlayer));
rounds.add(Round(4, 5, 9, players[7], gamePlayer));
rounds.add(Round(4, 5, 9, players[8], gamePlayer));
rounds.add(Round(4, 2, 6, players[0], gamePlayer));
rounds.add(Round(3, 5, 8, players[1], gamePlayer));
rounds.add(Round(4, 5, 9, players[2], gamePlayer));
rounds.add(Round(4, 5, 9, players[4], gamePlayer));
rounds.add(Round(1, 5, 6, players[6], gamePlayer));
rounds.add(Round(4, 5, 9, players[8], gamePlayer));
rounds.add(Round(4, 2, 6, players[7], gamePlayer));
rounds.add(Round(3, 5, 8, players[8], gamePlayer));
rounds.add(Round(4, 5, 9, players[7], gamePlayer));
rounds.add(Round(4, 5, 9, players[8], gamePlayer));
rounds.add(Round(1, 5, 6, players[7], gamePlayer));
rounds.add(Round(4, 5, 9, players[8], gamePlayer));
rounds.add(Round(4, 5, 9, players[7], gamePlayer));
rounds.add(Round(4, 1, 5, players[8], gamePlayer));
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",

@ -1,3 +1,5 @@
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';
@ -7,30 +9,42 @@ import '../widgets/button_new_party.dart';
import '../widgets/ingame_widgets.dart';
import '../widgets/scores_list_widget.dart';
class InGameScreen extends StatefulWidget {
final Round currentRound;
const InGameScreen({Key? key, required this.currentRound}) : super(key: key);
class InGameScreen2 extends StatefulWidget {
final AbstractRound currentRound;
const InGameScreen2({Key? key, required this.currentRound}) : super(key: key);
@override
State<InGameScreen> createState() => _InGameScreenState();
State<InGameScreen2> createState() => _InGameScreen2State();
}
class _InGameScreenState extends State<InGameScreen> {
late Widget widgetHolder;
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);
widgetHolder = InGameCardThrow(numberThrow: 1, currentRound:
widget.currentRound, setSelectedValue: setSelectedValue);
else if (widget.currentRound.secondThrow == null) {
widgetHolder = InGameCardThrow(numberThrow: 2);
widgetHolder = InGameCardThrow(numberThrow: 2
, currentRound:
widget.currentRound, setSelectedValue: setSelectedValue);
} else {
widgetHolder = InGameCardThrow(numberThrow: 3);
widgetHolder = InGameCardThrow(numberThrow: 3, currentRound:
widget.currentRound, setSelectedValue: setSelectedValue);
}
super.initState();
}
@override
Widget build(BuildContext context) {
return Stack(
children: [
Container(
@ -56,11 +70,15 @@ class _InGameScreenState extends State<InGameScreen> {
Spacer(),
ElevatedButton(
onPressed: () {
setState(() {
widgetHolder = InGameCardThrow(
numberThrow: 2,
bool isFinished = widget.currentRound.computeNext(
selectedValue
);
});
if(widget.currentRound.isSpareOrStrike()){
MyApp.controller.gamePlayer.onSpareOrStrike();
}
MyApp.controller.gamePlayer.onNext(isFinished, context);
},
child: Text(
"PLAY",
@ -81,6 +99,7 @@ class _InGameScreenState extends State<InGameScreen> {
),
minimumSize: Size(200, 80),
),
),
Spacer(),
],

@ -6,6 +6,8 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import '../model/AbstractRound.dart';
class FinalScoreBoard extends StatefulWidget {
const FinalScoreBoard({Key? key}) : super(key: key);
@ -346,14 +348,17 @@ class _UserInGameState extends State<UserInGame> {
class InGameCardThrow extends StatefulWidget {
final int numberThrow;
const InGameCardThrow({Key? key, required this.numberThrow})
: super(key: key);
final AbstractRound currentRound;
final Function(int) setSelectedValue;
const InGameCardThrow({Key? key, required this.numberThrow, required this.currentRound, required this.setSelectedValue}): super(key: key);
@override
State<InGameCardThrow> createState() => _InGameCardThrowState();
}
class _InGameCardThrowState extends State<InGameCardThrow> {
GlobalKey<_NumberPadState> _numberPadKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Container(
@ -388,7 +393,9 @@ 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 +417,14 @@ 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
),
],
),
@ -528,24 +537,26 @@ 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;
const NumberPad({Key? key, required this.numberThrow, required this.setSelectedValue, required this.currentRound}) : 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();
}
@ -649,7 +660,7 @@ class _NumberPadState extends State<NumberPad> {
],
),
),
widget.numberThrow == 1
widget.currentRound.shotIsStrike()
? StrikeButton(
currentSelected: NumSelected,
onSonChanged: (int newId) {

@ -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