Flappy Rust Save

A Rust SDL2 clone of Flappy Gopher which is a clone of Flappy Bird

Project README

Flappy Rust

Flappy Rust is a mostly complete clone of Flappy Gopher which is a clone of the famous Flappy Bird game developed in Rust with bindings for SDL2.

Flappy Rust

This repo was built significantly faster by referencing Francesc Campoy's version originally based in Go: https://github.com/campoy/flappy-gopher

Why did you write a clone of a clone?

Because I'm home all day after being layed off (along with 70% of the company) on Monday 4/3/2017 and decided to write some code in Rust since it's been on my TODO list AND because I need an outlet for my negative energy.

Features

  • Music soundtrack
  • The game can be paused by pressing P
  • The bird bounces when jumping based on his vertical gravity and speed.
  • Particle effects with additive blending
  • All new background graphics.
  • Work begun to add parallax scrolling.

Thoughts on the Go version vs the Rust version

  • This version's collision detection is complete and has particle effects.
  • Also, I cheated a bit (due to lazy-ness) and simplifed the Scene object and event loop.
  • I also pulled this version off in a single OS thread, no need to add mutexes like Francesc's version.
  • The Go version needs it's main goroutine pinned to an OS thread because Go's runtime is allowed to move goroutines to different threads. If this wasn't done then you'd have the SDL2 event-loop trying to mutate state while Go's runtime mutates state on a competing thread. For more information watch Francesc's video series called Just for Func where he mentions why this is important: https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
  • By sticking to one thread, the Rust version needs no synchronization and furthermore, I can guarantee the full correctness of the application thanks to Rust's super advanced compiler. This means, even if I introduced more threads to; for example, generate the pipes similar to Francesc's version...the compiler will absolutely stop me from having data-races by refusing to compile. This means I get to sleep better at night than Francesc.
  • I didn't go out of my way to optimize anything yet and I'm vaguely familiar with SDL2 since most of my work back in the day was with SDL1.
  • Also, before anyone starts complaining about the code...I hacked on this in a fit of rage over a few hours...it was just for fun.
  • Shoutout to Francesc Campoy https://twitter.com/francesc?lang=en a developer advocate on the Go team. Check out his video series Just for Func if you love Go.

Installation

Please reference the rust-sdl2 crate which has installation instructions for SDL2 based on your platform: https://github.com/AngryLawyer/rust-sdl2

Additionally, you'll need the following addtional dependencies:

sdl2_ttf sdl2_image sdl2_mixer sdl2_gfx

On OSX:

brew install sdl2_mixer --with-flac --with-fluid-synth --with-libmikmod
--with-libmodplug --with-libvorbis --with-smpeg2

Running

cargo run #Inside the flappy-rust repo.

Images, fonts, and licenses

All the images used in this game are CC0 and obtained from Clipart. You can find atlernative birds in there, so you can mod the game!

The fonts are copied from https://github.com/deano2390/OpenFlappyBird.

This project is licensed under Apache v2 license. Read more in the LICENSE file.

Open Source Agenda is not affiliated with "Flappy Rust" Project. README Source: deckarep/flappy-rust
Stars
65
Open Issues
1
Last Commit
7 years ago

Open Source Agenda Badge

Open Source Agenda Rating