From 250fdb9ca7b503d3bde78a44ebb90d57fa61a3d7 Mon Sep 17 00:00:00 2001 From: Thomas Hintz Date: Sun, 26 Apr 2020 11:29:21 -0700 Subject: [PATCH] Adding 'roller' stats. --- src/components/farm/Board.jsx | 2 + src/server/farm.scm | 92 ++++++++++++++++++++++------------- 2 files changed, 60 insertions(+), 34 deletions(-) diff --git a/src/components/farm/Board.jsx b/src/components/farm/Board.jsx index c702425..9aa9985 100644 --- a/src/components/farm/Board.jsx +++ b/src/components/farm/Board.jsx @@ -2105,6 +2105,8 @@ class BoardApp extends React.Component {

{alert.contents.stats.back}

{alert.contents.stats.taxPerson}

{alert.contents.stats.emergency}

+

{alert.contents.stats.highRoller}

+

{alert.contents.stats.lowRoller}

); diff --git a/src/server/farm.scm b/src/server/farm.scm index 3ca0cd1..dff324f 100644 --- a/src/server/farm.scm +++ b/src/server/farm.scm @@ -134,7 +134,9 @@ '((pro . 0) (back . 0) (tax-person . 0) - (emergency . 0)) + (emergency . 0) + (num-harvests . 0) + (harvest-rolls . 0)) accessor: player-stats))) (define-class () @@ -914,39 +916,59 @@ (* (player-debt player) -1))) (define (do-end-of-game game) - (message-players! - game - #f - `((results - . ,(list->vector - (map (lambda (p i) - (conc i ". " (player-name p) " with $" (player-net-worth p))) - (sort (game-players game) - (lambda (p1 p2) - (> (player-net-worth p1) - (player-net-worth p2)))) - (iota (length (game-players game)) 1)))) - (stats . ((pro . ,(let ((p (car (sort (game-players game) - (lambda (p1 p2) - (> (alist-ref 'pro (player-stats p1)) - (alist-ref 'pro (player-stats p2)))))))) - (conc "Most suns aligned: " (player-name p) " (" (alist-ref 'pro (player-stats p)) ")"))) - (back . ,(let ((p (car (sort (game-players game) - (lambda (p1 p2) - (> (alist-ref 'back (player-stats p1)) - (alist-ref 'back (player-stats p2)))))))) - (conc "Most licences expired: " (player-name p) " (" (alist-ref 'back (player-stats p)) ")"))) - (taxPerson . ,(let ((p (car (sort (game-players game) - (lambda (p1 p2) - (> (alist-ref 'tax-person (player-stats p1)) - (alist-ref 'tax-person (player-stats p2)))))))) - (conc "Needs a tax person: " (player-name p) " (" (alist-ref 'tax-person (player-stats p)) ")"))) - (emergency . ,(let ((p (car (sort (game-players game) - (lambda (p1 p2) - (> (alist-ref 'emergency (player-stats p1)) - (alist-ref 'emergency (player-stats p2)))))))) - (conc "Living on the edge: " (player-name p) " ($" (alist-ref 'emergency (player-stats p)) ")")))))) - type: "end-of-game")) + (let ((rollers (sort (game-players game) + (lambda (p1 p2) + (> (/ (alist-ref 'harvest-rolls (player-stats p1)) + (max (alist-ref 'num-harvests (player-stats p1)) 1)) + (/ (alist-ref 'harvest-rolls (player-stats p2)) + (max (alist-ref 'num-harvests (player-stats p2)) 1))))))) + (message-players! + game + #f + `((results + . ,(list->vector + (map (lambda (p i) + (conc i ". " (player-name p) " with $" (player-net-worth p))) + (sort (game-players game) + (lambda (p1 p2) + (> (player-net-worth p1) + (player-net-worth p2)))) + (iota (length (game-players game)) 1)))) + (stats . ((pro . ,(let ((p (car (sort (game-players game) + (lambda (p1 p2) + (> (alist-ref 'pro (player-stats p1)) + (alist-ref 'pro (player-stats p2)))))))) + (conc "Most suns aligned: " (player-name p) " (" (alist-ref 'pro (player-stats p)) ")"))) + (back . ,(let ((p (car (sort (game-players game) + (lambda (p1 p2) + (> (alist-ref 'back (player-stats p1)) + (alist-ref 'back (player-stats p2)))))))) + (conc "Most licences expired: " (player-name p) " (" (alist-ref 'back (player-stats p)) ")"))) + (taxPerson . ,(let ((p (car (sort (game-players game) + (lambda (p1 p2) + (> (alist-ref 'tax-person (player-stats p1)) + (alist-ref 'tax-person (player-stats p2)))))))) + (conc "Needs a tax person: " (player-name p) " (" (alist-ref 'tax-person (player-stats p)) ")"))) + (emergency . ,(let ((p (car (sort (game-players game) + (lambda (p1 p2) + (> (alist-ref 'emergency (player-stats p1)) + (alist-ref 'emergency (player-stats p2)))))))) + (conc "Living on the edge: " (player-name p) " ($" (alist-ref 'emergency (player-stats p)) ")"))) + (highRoller . ,(let ((p (car rollers))) + (conc "High Roller: " (player-name p) " (" (exact->inexact + (/ (round + (* (/ (alist-ref 'harvest-rolls (player-stats p)) + (max (alist-ref 'num-harvests (player-stats p)) 1)) + 10)) + 10)) ")"))) + (lowRoller . ,(let ((p (last rollers))) + (conc "Low Roller: " (player-name p) " (" (exact->inexact + (/ (round + (* (/ (alist-ref 'harvest-rolls (player-stats p)) + (max (alist-ref 'num-harvests (player-stats p)) 1)) + 10)) + 10)) ")")))))) + type: "end-of-game"))) (define (create-ws-response player event misc) (append `((event . ,event) ,@misc) @@ -2333,6 +2355,8 @@ (player-harvest-mult player))))) (if (not (already-harvested? (alist-ref '?value action) player)) (begin + ((make-player-stat 'num-harvests 1) player) + ((make-player-stat 'harvest-rolls rolled) player) (safe-set! (player-cash player) (+ (player-cash player) income)) (safe-set! (player-harvest-mult player) 1)