[{"data":1,"prerenderedAt":239},["ShallowReactive",2],{"project-19707660":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":39,"post_text":42,"what":43,"said":74,"maker_in_thread":125,"shape":134,"grid":137,"attempts":199,"same_week":200,"maker_shows":168,"maker_hidden":231,"reader_version":232,"card":233},"19707660","Tetris","Tetris Implemented in ClojureScript","title","Show HN: Tetris Implemented in ClojureScript","https:\u002F\u002Fdjblue.github.io\u002Ftetris\u002F","djblue.github.io","djblue",1555780796,2019,135,25,337,2195,16,"notable","games","browser tetris clone","web_app",[24,25,26,27],"tetris","clojurescript","reagent","browser game","mixed",0.294,{"positive":31,"neutral":32,"mixed":33,"critical":32},4,1,0,6,{"execution":36,"performance":37,"design":38},{"positive":32,"critical":33},{"positive":32,"critical":33},{"positive":32,"critical":32},[40,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,40,33,33,41,40,32,33,40,33],5,3,null,{"problem":42,"audience":42,"pricing":42,"motivation":42,"time_to_build":42,"stack":44,"openness":71,"stage":72,"team_size":73},[45,55,60,64],{"value":46,"source":47,"evidence":48},"ClojureScript","inferred",[49,51],{"id":50},"post",{"id":52,"by":53,"text":54},"19708104","beders","This is super condensed but still very readable if you know Reagent and Hiccup. It's interesting to compare this to a lot of tetris clones written in TypeScript. There are a few…",{"value":56,"source":57,"evidence":58},"Reagent","commenter",[59],{"id":52,"by":53,"text":54},{"value":61,"source":57,"evidence":62},"Hiccup",[63],{"id":52,"by":53,"text":54},{"value":65,"source":66,"evidence":67},"Redux-style state management","maker",[68],{"id":69,"by":11,"text":70},"19709402","Sweet! Thanks for sharing. I see you're using pure-store to manage your game state. My implementation also uses a redux pattern for state management :)","open_source","launched","solo",{"praise":75,"objections":88,"requests":96,"questions":101,"alternatives":102},[76,84],{"value":77,"source":57,"evidence":78},"Compact, readable code that showcases Lisp data modeling",[79,80],{"id":52,"by":53,"text":54},{"id":81,"by":82,"text":83},"19711102","brabel","The HTML page, which includes the JS scripts embedded, is only 75KB... not bad for a language so different from JS.",{"value":85,"source":57,"evidence":86},"Small page size for a ClojureScript app",[87],{"id":81,"by":82,"text":83},[89],{"value":90,"source":57,"evidence":91},"Rotate on up arrow instead of hard drop is confusing",[92],{"id":93,"by":94,"text":95},"19708078","a_t48","Up being rotate rather than hard drop is tripping me up. I guess I could fork it, though. :)",[97],{"value":98,"source":57,"evidence":99},"Change key mapping so up is hard drop",[100],{"id":93,"by":94,"text":95},[],[103,118],{"value":104,"source":57,"evidence":105},"Other Tetris clones in ClojureScript and TypeScript (t3tr0s, wolandbros tetris, clj-tetris)",[106,110,114],{"id":107,"by":108,"text":109},"19708126","chrisoakman","Nice work! :) A few years ago some friends and I wrote a tetris clone to celebrate the 30th anniversary of tetris and learn ClojureScript in the process. Really fun group…",{"id":111,"by":112,"text":113},"19709266","gunn","Here's my tetris copy: http:\u002F\u002Fwolandbros.com\u002Ftetris\u002F Both the game and the source are much more minimal, it's very easy to customise the rules. You can see the source here:…",{"id":115,"by":116,"text":117},"19713993","yogthos","Here's a shorter cljs version [1], as a bonus it cross-compiles to the JVM and Js reusing the core logic. [1] https:\u002F\u002Fgithub.com\u002Fyogthos\u002Fclj-tetris\u002Fblob\u002Fmaster\u002Fsrc\u002Ftetris\u002Fgame.cljc",{"value":119,"source":57,"evidence":120},"Jstris",[121],{"id":122,"by":123,"text":124},"19708028","soup10","https:\u002F\u002Fjstris.jezevec10.com\u002F",{"comments":34,"answered":33,"key":126},[127,130,133],{"id":128,"text":129},"19708130","Thanks! I really enjoyed the data modeling aspect of this project. I also ended up modeling the board as a mapping of [row, column] -> color which might be different from the…",{"id":131,"text":132},"19708149","Your project is substantially superior to mine. It looks so goooooood!",{"id":69,"text":70},{"commenters":18,"max_depth":40,"maker_replies":34,"first_comment_mins":135,"lifespan_hours":136},52,26,[138,140,142,146,148,150,153,155,158,161,164,166,167,169,170,172,173,177,180,183,185,187,190,193,197],[52,33,40,139,53,33],"project\u002Fpositive\u002Fexecution",[128,33,33,141,11,32],"maker\u002Fpositive\u002Fdesign",[143,33,33,144,145,33],"19708476","commenter\u002Fneutral\u002Fnone","Scarbutt",[147,33,33,144,53,33],"19708932",[149,33,33,144,145,33],"19708978",[151,33,33,144,152,33],"19709400","msvan",[154,33,33,144,53,33],"19709538",[156,33,33,144,157,33],"19709409","ilikehurdles",[159,33,33,144,160,33],"19709587","hota_mazi",[162,33,33,144,163,33],"19710863","lispm",[107,32,33,165,108,33],"other\u002Fneutral\u002Fnone",[131,32,33,144,11,32],[111,168,33,165,112,33],2,[69,168,33,144,11,32],[171,168,33,144,112,33],"19709683",[115,168,33,165,116,33],[174,41,40,175,176,33],"19707969","project\u002Fpositive\u002Fnone","rschachte",[178,41,33,179,11,32],"19707978","maker\u002Fpositive\u002Fnone",[181,31,33,165,182,33],"19710268","city41",[122,40,41,184,123,33],"project\u002Fneutral\u002Fnone",[81,34,40,186,82,33],"project\u002Fpositive\u002Fperformance",[93,188,32,189,94,33],7,"project\u002Fcritical\u002Fdesign",[191,188,33,192,11,32],"19708094","project\u002Fneutral\u002Fdesign",[194,188,40,195,196,33],"19709456","project\u002Fpositive\u002Fdesign","droidist2",[198,188,33,192,11,32],"19708105",[],[201,206,211,216,221,226],{"id":202,"name":203,"points":204,"category":205},"19704418","Causal (buy-to-rent model)",353,"finance_crypto",{"id":207,"name":208,"points":209,"category":210},"19738838","layer",251,"ai",{"id":212,"name":213,"points":214,"category":215},"19705440","Darwin Mail",218,"productivity",{"id":217,"name":218,"points":219,"category":220},"19705511","Mockit",158,"dev_tools",{"id":222,"name":223,"points":224,"category":225},"19694578","hncynic",114,"creative",{"id":227,"name":228,"points":229,"category":230},"19712617","BepuPhysics",108,"languages",false,"v2",{"id":234,"name":5,"line":6,"ai":231,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":235,"top":18,"kw":236,"maker":11,"domain":10,"tier":19,"attempts":33,"strip":237,"url":9,"mix":238,"praise":77,"objection":90,"sub":21},19707660,0.29,[24,25,26,27],"5000000000000000500351050",[31,32,33,32],1794036576875]