package Ġorg . div y . ai . snake . animation . chart Ċ Ċ import Ġjavafx . application . Platform Ċ import Ġjavafx . f xml . FXML Ċ import Ġjavafx . scene . chart . Category Axis Ċ import Ġjavafx . scene . chart . Line Chart Ċ import Ġjavafx . scene . chart . Number Axis Ċ import Ġjavafx . scene . chart . XY Chart Ċ import Ġjavafx . scene . chart . XY Chart . Series Ċ import Ġjavafx . scene . layout . Flow Pane Ċ import Ġorg . div y . ai . snake . model . engine . q learning . Episode Completed Ċ import Ġorg . div y . ai . snake . model . game . Event Ċ import Ġorg . div y . ai . snake . model . game . EventType Ċ import Ġorg . div y . ai . snake . model . game . Game Board Model Ċ import Ġorg . div y . ai . snake . model . game . Game EventListener Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ class ĠProgress Chart Controller ( private Ġval Ġgame Model : ĠGame Board Model ) Ġ: ĠGame EventListener Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġgame Model . addEventListener ( EventType . E PI SO DE _ COMPLETED , this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġscore Series : ĠMutable Map < String , ĠSeries < String ?, ĠNumber ? >> Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġ@ FXML ĊĠĠĠ Ġvar Ġflow Pane : ĠFlow Pane ? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġupdate Data ( xAxis Value : ĠString , Ġstats : ĠMap < String , ĠNumber >) Ġ{ ĊĠĠĠĠĠĠĠ Ġstats . forEach Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġseries Ġ= Ġscore Series [ it . key ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( series == null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseries Ġ= ĠSeries () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Series [ it . key ] Ġ= Ġseries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Axis Ġ= ĠCategory Axis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Axis . label Ġ= Ġ" Episode " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Axis Ġ= ĠNumber Axis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Axis . label Ġ= Ġ" Count " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Chart Ġ= ĠLine Chart ( category Axis , Ġy Axis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart . data . add ( series ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart . title Ġ= Ġit . key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart . min Width Ġ= Ġ 9 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart . pref Width Ġ= Ġ 1 5 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Chart . min Height Ġ= Ġ 4 5 0 . 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflow Pane ?. children ?. add ( line Chart ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclean Up Series ( series ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . data . add ( ĠĠĠĠĠĠĠĠĠĠĠ ĠXY Chart . Data < String ?, ĠNumber ? >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis Value , Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclean Up Series ( series : ĠSeries < String ?, ĠNumber ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( series . data . size Ġ> Ġ 6 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . data . remove At ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Event ( event : ĠEvent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( event Ġis ĠEp isode Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Data ( event . episode . toString (), Ġevent . stats ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ