7 ms·
Build Pong in Your Terminal with Go for Some Reason
- csixty4 4y agoWho said you need a reason? This is great!
- scoopdewoop 4y agoI also have been using Go with Tcell recently. Making small games is how I have always learned new programming languages. I am coming off of a couple of years of playing with C to understand languages better, and free myself from the complex stacks that I use at work. I've been chatting with a highly-educated PL friend of mine about my language likes/dislikes, and he would always remark on really pragmatic choices Go had made. I had always dismissed Go, and that has really let me see a reddit/HN hivemind I'm susceptible to. It was so easy to think "GC? Google? No thanks". After a while I saw a pattern of people disparaging Go in favor of Rust, but then using Python/JS for their own actual code. It made me feel that maybe the hivemind had overlooked the actual use-cases. I understand that the language had its problems, from sub-par GC performance to poor Windows support, to the "no generics" meme. But for someone just getting into it now, it has been SEAMLESS. VSCode is a first-class dev environment after being configured by the single official Go plugin. Modules are awesome, and coming from C its so nice to just "go build" and have that just work. I really expect Go to pick up a lot of steam with hobby developers soon. For simple games, Go is capable of producing cross-compiled static Windows binaries with SDL2 from Linux. That kind of dev experience could really win over a lot of C++ holdouts from the itch.io and HandMade communities that would prefer if C++ was just C with classes and types. The GC is so fast that it doesn't even cut into a 60fps time budget, and all the preallocation tricks from C still work fine... it has pointers and arrays like we are used to. I was shocked to find how much I'd enjoyed Go. If you are interested in C/Zig/Odin, I think it is certainly worth checking out Go as a tool to play with arrays and structs, a paradigm many programmers enjoy. Having high quality libraries in the stdlib like JSON (de)serializers and even animated GIF authoring means that a lot of the simple code you might write for your own amusement won't be subject to the fast bitrot of other ecosystems.
- shirogane86x 4y agoI don't really buy into go (it's not my type of language), but I wanted to ask a genuine question: are there many semi-mainstream languages that don't have modules that _just work_, or an official plugin for VSCode that just works? I've never found that to be a "plus", as much as it is the bare minimum. and nowadays I don't see that many up and coming languages that miss out on it. Admittedly though the cross compilation is nice (not enough to win me over, at all, but still very nice. The very few times I've needed cross compilation in other languages I reached for nix, and that wasn't very pleasant)
- sk0g 4y agoMost compiled languages have fractured build ecosystems, and may require some tricky invocation orders, external+not-included dependencies, or some funky flags depending on your compiler version. Or may just not work because you have the wrong compiler, missing their preferred build scripting runtime, etc. NPM (packages) frequently go down, doesn't resolve packages, or just does something unexpected. Java has the Gradle/Maven split, C++ has a few extra common ones - Make/CMake, Autotools, Ninja, Meson, etc. Modern C# is the one that's got a similar scene to Go from what I've seen. Go is simple and consistent. It adheres to the Zen of Python, particularly "There should be one– and preferably only one –obvious way to do it.", better than Python itself does (IMO). You check out a repo, you run go build, and 90% of the time you have a binary. A 5 line Python script could automate this process, good luck doing the same with Java or C++.
- shirogane86x 4y agoThat is 100% fair. I mostly develop on .NET+TS at $dayjob so I never really have experienced particular problems with nuget, and I've had the luck of never having an npm package go down on me either - so I just never really experienced the problems that people are frustrated about.
- noodleman 4y agoThis is really the selling point of Go for me that makes up for it's shortcomings. I've probably lost years off my life thanks to gradle.
- rmahan 4y agoThis is a great idea for learning Go! I’ve been trying to pick it up recently and tried to do a CLI for indexing and searching through files. Reading PDFs is such a long hill to climb while trying to learn a new language. A game or something with a TUI sounds like a much more enjoyable goal.
- deleted 4y ago[deleted]
- osiemens 4y agoI learned some basics of Go in much the same way a few years ago. An implementation of Andy Sloane's (famous?) donut in a terminal: https://github.com/onnos/donut https://github.com/onnos/donut And playing with funky patterns using braille characters: https://github.com/onnos/rotaterm https://github.com/onnos/rotaterm It's not great quality code but it got me started! It's nice to have some immediate output you can play with - tcell is lovely.
- belak 4y agoThe article is great, but the title here has been editorialized a bit. I'm not super familiar with HN, so what's the best way to get that fixed to match the actual article?
- phnofive 4y agoSend mail to hn@ycombinator.com :) Note that this was submitted by the author, who's in the thread.
- silisili 4y agoThis was one of my first projects as a kid with Visual Basic. But with working paddles and all! I love Go and use it daily, but I wish we had anything similar to VB, even if it's just a helper UI builder. Being able to shape, position, and name objects visually, then modify attributes in code, is (to me) so much easier than doing it strictly in code. Does any such GUI builder exist? I don't necessarily want VB or a similar IDE, just a way to design using a GUI and program behind it.
- lostgame 4y agoI know it’s Apple-only, but I find Interface Builder in Xcode to be an extremely similar and enjoyable experience.
- mysterydip 4y agoI have longed for such a thing as well, having used VB5&6 in my late teens to make countless games and utility apps.
- pkaye 4y agoLazarus for FreePascal is kind of close but its just for Pascal.
- anigbrowl 4y agoKinda mystified there isn't an equivalent of VB for Python given its popularity. I mostly live in Jupyter notebooks which is fine for me but I sometimes want to make something with a GUI for my non-technical friends. I'd put in some time making an interactive form thing or so with a GUI but don't care badly enough to learn TK. I can't stand scripting a GUI. If I'm gonna have a GUI I want to draw it and know what it's going to look like instead of getting surprises when I run it. Whoever does Visual Python will make a lot of money.
- PresidentFurman 4y agothis is dank
- pipeline_peak 4y agoBuild Pong in Your Terminal, with Go for some reason
- pbardea 4y agoI always love projects that build from nothing and go step-by-step to build something more complex. Reminds me of one of my favorite posts of a similar style building out "Metaballs" with different algorithms: http://jamie-wong.com/2014/08/19/metaballs-and-marching-squares/ http://jamie-wong.com/2014/08/19/metaballs-and-marching-squa.... Nice work!
- kodeninja 4y agoIn Tamizh, "pongo" literally means "go" :).
- jalletto 4y agoThis is amazing. Thank you
- spicybright 4y agoThere's not enough projects like this. Do X and Y language where X and Y are very specific technologies. Or maybe I'm just bad at internet searches!
- kabirgoel 4y agoFantastic game! Have you considered using the Bubble Tea [1] library? I recently used Bubble Tea to write a Flappy Bird-like game [2] and it was incredibly fun. It splits your app up into a Model (state), a View function (that uses the model to return a string), and an Update function (that updates the model), like Elm. Plus the other Charm libraries are great for styling terminal output, spring physics, etc. [1] https://github.com/charmbracelet/bubbletea https://github.com/charmbracelet/bubbletea [2] https://github.com/kbrgl/flapioca https://github.com/kbrgl/flapioca
- not_a_sw_dork 4y ago
- ryjo 4y agoLove the other "this is how I learned <language>, too" comments. I'll add mine into the mix :) note this was implemented in 2014: https://github.com/mrryanjohnston/golang-experiments/tree/master/pong https://github.com/mrryanjohnston/golang-experiments/tree/ma... I think videogames are a great way to showcase channels in Go.
- jalletto 4y agoI've been trying to learn go by building Pong in my terminal. Here is part One where I create a bouncing ball.
- pantulis 4y agoI remember a pretty similar program that was included in the Vic-20 users guide circa 40 years ago. I miss the simplicity of learning by coding something that finally ends up like a game!
- adamgordonbell 4y agoWell now we have a program that says “Hi!” until you press escape. For the loneliest among us, that may be enough. But we came here to build a game, so we’ll need some kind of animation. Love the humor
- boalberto 4y agoThanks! Was great fun following along. Noticed a small typo in the first code segment, `screen` becomes `s` when calling s.Init(). Looking forward to part 2! func main() { screen, err := tcell.NewScreen() if err != nil { log.Fatalf("%+v", err) } if err := s.Init(); err != nil { log.Fatalf("%+v", err) } }
- jalletto 4y agoThank you! I noticed a few grammar errors as well so I’ll be sure to update this.