
Snake game made in Go - tristangoossens
https://github.com/tristangoossens/snake-go
======
gameswithgo
If you are interested in gamedev and Golang, a while back I did a video series
teaching programming via game projects in Go. Starts out with text games, then
2d, then some opengl 3d stuff at the end. Jump in wherever you like! All free.

[https://gameswithgo.org/](https://gameswithgo.org/)

~~~
tristangoossens
Ill definitely check that out, thanks!

------
compi
Snake games are my go-to when I learn new languages, it's always under 1000
lines of code and can usually be done without libraries. In not a lot of time
you can learn how the language:

    
    
        -   does timers
        -   does sleeping and/or threads
        -   handles user input
        -   gets some kind of output to screen
        -   provides basic data structures
        -   writes and loads files for high scores
    

There are a lot of things that I like about the original Snake that most
people don't put into their hobby projects:

    
    
        -   There is a delay right before you hit the wall.
            If you are playing at the fastest speed and barrel towards the wall,
            it slows down to the slowest speed when you are on the final square
            before game over.
            I always loved this because the it made the most deadly obstacle the
            snake body which is the one that you yourself created.
    
        -   When it polled input it stored one of each press.
            If you pressed up then left, and the next tick the snake would turn
            up, and the next tick the snake would turn left.
    
        -   There are only four parts of the screen max that are updated each
            tick, the new snake head is drawn, the previous snake head is drawn as
            a body, the previous snake butt is cleared, and maybe a new egg is
            drawn.
            Very common to see a snake game draw the entire screen, or redraw the
            entire snake on each tick.  Super frustrating to have a game get start
            to stutter more and more as your snake gets longer.
    
        -   You could play using two buttons instead of four.
            The game could be played by using buttons 2=up 8=down 4=left 6=right.
            But it could also be played using buttons 1=up-or-left and
            9=down-or-right because you can only change from your current
            direction to two other directions since you can't have a button to go
            the opposite direction, and you don't need a button to go the same
            direction.
            It was never super intuitive though, a "right turn" or "left turn"
            button would make more sense.
    

The only critique I have for this is your snake almost doubles speed when you
move up or down which is pretty jarring.

~~~
keyle
Good points, I never realised about the screen update size, although most
renderer will redraw the whole screen every frame (immediate mode).

------
Cheyana
You should call it Go Snake Go!

Also, I always wondered what it would be like if you mixed a snake game with
Conway's Game of Life. Watching a snake go around the screen blasting through
automata would be interesting ( or maybe not).

~~~
Impossible
[http://www.asahi-net.or.jp/~cs8k-cyu/flash/la2/index.html](http://www.asahi-
net.or.jp/~cs8k-cyu/flash/la2/index.html). LA-2 is close to what you're
describing although it's a shmup instead of a snake game. It's old so
unfortunately it's a Java applet that might be hard to run now :(. Google has
been very successful in killing all old interactive content on the web.

~~~
gdm85
Interesting! Let me give this a try :)

------
tristangoossens
I am actually trying to get my project out there, as this is actually my first
big project.So every star would be appreciated(maybe we can even reach
trending)

~~~
K0SM0S
Is your ultimate interest more in game dev or the 'classic' Go problem space
(servers, concurrency, scaling, etc.), or both maybe?

Like what would your 50th project be, ideally?

~~~
tristangoossens
I would’n’t know actually, i would say that they both sound good to me. I am
only 17, so ive got plenty of things ahead of me :)

~~~
K0SM0S
Aha, with that kind of skill and ethics at such a yound age, indeed! Way to Go
;)

------
crehn
Looks good!

Also made something similar, although with much less features and in a single
file: [http://github.com/hoffa/snake](http://github.com/hoffa/snake)

~~~
tristangoossens
i gave it a star! i think the simplicity of the game is what makes it special!

------
Mountain_Skies
This is a bit off topic but since there might be some Go folks in here, does
anyone know of a Go equivalent of WebGoat (an intentionally insecure code base
for testing vulnerability scanners)? Doesn't need to be a WebGoat clone, just
an insecure code base written in Go.

~~~
daehee
The recent Square CTF had some good Go related challenges, e.g.

[https://squarectf.com/2019/lockbox.html](https://squarectf.com/2019/lockbox.html)

------
rishav_sharan
Quick question; Whats been the performance like, specially with Go's GC. I
know snake is probably not a project to push the language run time to its
limit but still would love someone to chime in. I may be wrong here but i
assume that GO's GC is more geared towards concurrent data access tasks like
web servers.

I am currently evaluating 2 tiny frameworks; ebiten and oak. Oak is super
interesting as it doent uses sdl/glfw etc in its core. But has a rougher api.
Ebiten on the other hand feels very frinctionless.

------
jilles
Really cool! As a Go noob, I love the comments everywhere.

~~~
tristangoossens
Yeah i put them there so if anyone would ever want to recreate it, they would
understand my functions and maybe work on top or from them

------
hobojones
Congratulations! It may not seem like a big accomplishment, but it is. It's
one thing to toy around with a language, but creating a fully realized product
is a big deal. There's nothing that compares to that feeling when you load up
your project and it just works as you expect it should. You should definitely
walk around the next few days with a big grin on your face :).

------
kissgyorgy
I have an idea: there are a couple of these already, pretty fun to play. There
could be a service, in which you can SSH into then play these games! with
scoreboards, forum, discoverability and stuff. It would be a pretty niche
product/service, but would be fun to build and play! It could be the steam of
modern terminal games :D

------
amasad
If you want to play it online I just cloned it into repl.it and it worked:
[https://repl.it/@amasad/snake-go](https://repl.it/@amasad/snake-go)

~~~
tristangoossens
i think we might need more users to test it, here is a link to the pull
request. please test these and leave your feedback

[https://github.com/tristangoossens/snake-
go/pull/2](https://github.com/tristangoossens/snake-go/pull/2)

------
stupidcar
Finally QBasic has a serious competitor.

~~~
tristangoossens
I dont really know what you mean by that, but thanks?!

~~~
stupidcar
Just a silly joke. one of the more famous example programs that came with
QBasic for MS-DOS was a snake game called Nibbles:
[https://en.m.wikipedia.org/wiki/Nibbles_(video_game)](https://en.m.wikipedia.org/wiki/Nibbles_\(video_game\))

------
ubu7737
What next, a chess game?

Oops.

~~~
lspears
Plug: [https://github.com/notnil/chess](https://github.com/notnil/chess)

~~~
tristangoossens
This looks awesome, i gave it a star

------
archarios
Now write it in Clojure and compare your line counts

~~~
sahil-kang
Here’s one in Common Lisp if you’re interested in comparing loc with a lisp :)
[https://github.com/SahilKang/cl-snake](https://github.com/SahilKang/cl-snake)

