package Ġcom . kode inc . con way . ascii Ċ Ċ import Ġcom . kode inc . con way . Map Interface Ċ import Ġcom . kode inc . con way . algorithm . Cell Map Ċ import Ġcom . kode inc . con way . algorithm . is Alive Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ Ċ private Ġfun Ġdraw Map ( map : ĠCell Map , Ġprefix : ĠString Ġ= Ġ" ĠĠĠĠ Ġ", Ġspacing H : ĠInt Ġ= Ġ 1 , Ġspacing V : ĠInt Ġ= Ġ 1 ): ĠString Ġ{ ĊĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠ Ġval Ġspace String H Ġ= Ġ" Ġ". repeat ( spacing H ) ĊĠĠĠ Ġval Ġspace String V Ġ= Ġ"\ n ". repeat ( spacing V ) ĊĠĠĠ Ġwith ( sb ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 .. ( map . h Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 .. ( map . w Ġ- Ġ 1 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( if Ġ( x Ġ== Ġ 0 ) Ġprefix Ġelse Ġspace String H ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( if Ġ( is Alive ( map . cell ( x , Ġy ))) Ġ'*' Ġelse Ġ'.') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( if Ġ( y Ġ< Ġ( map . h Ġ- Ġ 1 )) Ġspace String V Ġelse Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsb . toString () Ċ } Ċ Ċ private Ġfun Ġdraw Header ( generation : ĠInt , Ġmap : ĠCell Map , Ġprefix : ĠString Ġ= Ġ" ĠĠĠĠ Ġ", Ġspacing H : ĠInt Ġ= Ġ 1 ): ĠString Ġ{ ĊĠĠĠ Ġval Ġprefix String Ġ= Ġ"$ prefix ::: ĠCon way Ġ" ĊĠĠĠ Ġval Ġsuffix String Ġ= Ġ" Ġgeneration Ġ$ generation Ġ:: :" ĊĠĠĠ Ġval Ġcenter Width Ġ= Ġ( map . w Ġ* Ġ( spacing H Ġ+ Ġ 1 )) Ġ- Ġ( prefix String . length Ġ+ Ġsuffix String . length ) ĊĠĠĠ Ġval Ġcenter String Ġ= Ġif Ġ( center Width Ġ> Ġ 0 ) Ġ"- ". repeat ( center Width ) Ġelse Ġ"" ĊĠĠĠ Ġreturn Ġ"$ prefix String $ center String $ suffix String \ n \ n " Ċ } Ċ Ċ fun Ġdraw Screen ( cell Map : ĠCell Map , Ġgeneration : ĠInt ) Ġ{ ĊĠĠĠ Ġprint ("\ u 0 0 0 C ") ĊĠĠĠ Ġprint ( draw Header ( generation , Ġcell Map )) ĊĠĠĠ Ġprint ( draw Map ( cell Map )) Ċ } Ċ Ċ class ĠAsc ii Map Drawer ( starting Map : ĠCell Map ? Ġ= Ġnull ): ĠMap Interface ( starting Map Ġ= Ġstarting Map ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġconsole : ĠBufferedReader Ġ= ĠBufferedReader ( System . console ()?. reader () Ġ?: ĠInputStreamReader ( System .` in ` )) ĊĊĠĠĠ Ġoverride Ġfun Ġdraw Map ( m : ĠCell Map , Ġg : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdraw Screen ( m , Ġg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠwaitFor Human (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġprint (" ? Ġ") ĊĠĠĠĠĠĠĠ Ġreturn Ġconsole . readLine () Ġ!= Ġ" q " ĊĠĠĠ Ġ} Ċ }