1
1
import { GamePlayerSettings , GameSettings , UserId } from "@lefun/core" ;
2
- import { Game , GameState , PlayerMove } from "@lefun/game" ;
2
+ import { Game , GameState , INIT_MOVE , PlayerMove } from "@lefun/game" ;
3
3
4
4
//
5
5
// Types
@@ -192,14 +192,13 @@ const bet: PlayerMove<DudoGameState, BetPayload> = {
192
192
board . bet = [ numDice , diceValue ] ;
193
193
incrementCurrentPlayer ( board ) ;
194
194
} ,
195
- execute ( { itsYourTurn, board } ) {
196
- itsYourTurn ( {
197
- userIds : [ board . playerOrder [ board . currentPlayerIndex ] ] ,
198
- } ) ;
195
+ execute ( { turns, board } ) {
196
+ turns . end ( "all" ) ;
197
+ turns . begin ( board . playerOrder [ board . currentPlayerIndex ] ) ;
199
198
} ,
200
199
} ;
201
200
202
- const call : PlayerMove < DudoGameState > = {
201
+ const call : PlayerMove < DudoGameState , null > = {
203
202
canDo ( options ) {
204
203
const { userId, board } = options ;
205
204
@@ -209,7 +208,7 @@ const call: PlayerMove<DudoGameState> = {
209
208
board . step === "play"
210
209
) ;
211
210
} ,
212
- execute ( { board, playerboards, itsYourTurn , endMatch } ) {
211
+ execute ( { board, playerboards, turns , endMatch, logPlayerStat } ) {
213
212
const [ betQty , betValue ] = board . bet ! ;
214
213
215
214
const {
@@ -282,20 +281,25 @@ const call: PlayerMove<DudoGameState> = {
282
281
} ) ;
283
282
284
283
// The turn is over, all the people alive must roll.
285
- itsYourTurn ( { userIds : alivePlayers . map ( ( p ) => p . userId ) } ) ;
284
+ turns . end ( "all" ) ;
285
+ turns . begin ( alivePlayers . map ( ( p ) => p . userId ) ) ;
286
286
287
287
if ( winner != null ) {
288
288
const scores : Record < UserId , number > = { } ;
289
289
scores [ winner ] = 0 ;
290
290
board . deathList . forEach ( ( userId , i ) => {
291
291
scores [ userId ] = board . deathList . length - i ;
292
292
} ) ;
293
- endMatch ( { scores } ) ;
293
+
294
+ for ( const [ userId , score ] of Object . entries ( scores ) ) {
295
+ logPlayerStat ( userId , "rank" , score ) ;
296
+ }
297
+ endMatch ( ) ;
294
298
}
295
299
} ,
296
300
} ;
297
301
298
- const roll : PlayerMove < DudoGameState > = {
302
+ const roll : PlayerMove < DudoGameState , null > = {
299
303
canDo ( options ) {
300
304
const { board } = options ;
301
305
return board . step === "revealed" ;
@@ -304,7 +308,7 @@ const roll: PlayerMove<DudoGameState> = {
304
308
playerboard . isRolling = true ;
305
309
board . players [ userId ] . hasRolled = true ;
306
310
} ,
307
- execute ( { board, playerboards, userId, random, itsYourTurn } ) {
311
+ execute ( { board, playerboards, userId, random, turns } ) {
308
312
const { numDice } = playerboards [ userId ] ;
309
313
310
314
// Roll the dice for the player that is ready.
@@ -355,13 +359,10 @@ const roll: PlayerMove<DudoGameState> = {
355
359
board . bet = undefined ;
356
360
357
361
// `everyoneHasRolled` has changed the current player
358
- itsYourTurn ( {
359
- userIds : [ board . playerOrder [ board . currentPlayerIndex ] ] ,
360
- } ) ;
362
+ turns . end ( "all" ) ;
363
+ turns . begin ( board . playerOrder [ board . currentPlayerIndex ] ) ;
361
364
} else {
362
- itsYourTurn ( {
363
- overUserIds : [ userId ] ,
364
- } ) ;
365
+ turns . end ( userId ) ;
365
366
}
366
367
} ,
367
368
} ;
@@ -429,17 +430,30 @@ export const game = {
429
430
return {
430
431
board,
431
432
playerboards,
432
- itsYourTurnUsers : [ playerOrder [ 0 ] ] ,
433
433
} ;
434
434
} ,
435
435
playerMoves : {
436
436
bet,
437
437
roll,
438
438
call,
439
439
} ,
440
+ boardMoves : {
441
+ [ INIT_MOVE ] : {
442
+ execute : ( { turns, board } ) => {
443
+ turns . begin ( board . playerOrder [ 0 ] ) ;
444
+ } ,
445
+ } ,
446
+ } ,
440
447
gameSettings,
441
448
gamePlayerSettings,
442
- playerScoreType : "rank" ,
449
+ playerStats : [
450
+ {
451
+ key : "rank" ,
452
+ type : "rank" ,
453
+ determinesRank : true ,
454
+ ordering : "lowerIsBetter" ,
455
+ } ,
456
+ ] ,
443
457
minPlayers : 2 ,
444
458
maxPlayers : 7 ,
445
459
} satisfies Game < DudoGameState > ;
0 commit comments