Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Creating a Snake game clone with Rust/Bevy (bbarrows.com)
44 points by bebrws 10 months ago | hide | past | favorite | 11 comments
Code is here: https://github.com/bebrws/bevy-snake

I had a lot of fun practicing Rust and Learning some Bevy concepts with this repository.

Bevy has an incredibly powerful dependency injection system and follows a pattern called ECS which makes it very powerful (and new to me).

This simple < 300 lines of code might help with learning some Bevy concepts.

It also shows how to copmile for the web/WASM and inject a canvas for the game (or use a pre existing div).




Nice.

Speaking of Snake game, if you want to go even deeper, you can try to use the wgpu crate to combine Rust and WebGPU to write everything from scratch. Here is the tutorial:

https://sotrh.github.io/learn-wgpu/#what-is-wgpu

I once wrote a code editor with wgpu, from font rendering to char/line state management (very rough) for music live coding:

https://github.com/glicol/glicol-wgpu

It runs in browsers, even including Safari!


This is the route I would usually prefer. However I was very happy I experimented with Bevy though just to see how powerful the type system and dependency injection ( https://promethia-27.github.io/dependency_injection_like_bev... ) in Rust can be.

It opened my eyes to a new style of game development and a new way to think about dependency injection and types.

I have always thought that a majority of the hardest software engineering problems relate in some way to gaming and when I see solutions like this it makes me think I am right.

Thanks tho! I'll def be checking that out.


Mobile browsers do support wasm, but the game doesn't offer controls for mobile users who aren't using a keyboard.

Taking 100.6 KB (16.46 KB compressed) of javascript and 37.41 MB (8.15 MB compressed) for snake is quite a lot compared to what it would take for normal javascript.


WASM is kind of coming full circle back around to when browsers used to support running Java Applets, or flash, or even ActiveX, however, this time, WASM is safe and is built into the browser.

Figma has been the one platform to take full advantage of it in really jaw-dropping ways that proved you could write real creative professional productive software only in the frame of a Chrome window.

It's just that WASM is not really practical for use for most things you want in a web browser, though the tooling to spit out WASM modules seem to keep getting better.


I mostly agree, but for most of its life, the Flash runtime was ~1MB and shared among every site. Every site needing to download a separate 38MB runtime is an insane amount of overhead.


Could the WASM runtime eventually be shared like that? Also, is there a reason why the overhead is so large compared to Flash?


What are more uses that WASM (or any theoretical technology, really) could have for a web browser? Do you mean scripting to customize the browser itself?


For sure, but snake also doesn't need a game engine. I don't think the exercise was code golf.


Bevy has a lot of features enabled by default that add to the size. You can get bevy-snake down to 12 MB (3.2 MB gzipped, 1.9 MB brotli'd) if you only enable rendering and sprites, and strip the function names section.

It's still a little bigger than I would like, but it's not terrible.


It's a really barebones snake game that should take less than 12 kb. Anyway I get that it's more of a proof of concept for Bevy.


Somewhat tangential, but RustConf last year had a talk[1] about a guy picking up Rust to get better times at Battle Snake[2].

[1] https://www.youtube.com/watch?v=-I1BfSpoWM0

[2] https://play.battlesnake.com/




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: