Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ewaldhorn/bouncies

A simple game written in Go and Ebitengine
https://github.com/ewaldhorn/bouncies

ebiten ebitengine game game-development go golang

Last synced: 2 months ago
JSON representation

A simple game written in Go and Ebitengine

Awesome Lists containing this project

README

        

# Bouncies

A simple game experiment written in Go and Ebitengine.

This project can possibly be used as a reference to get you started with Go game development,
especially if you are interested in using the fantastic Ebitengine game engine.

IMPORTANT: This is still very much WIP... I'll be expanding it over the next
few weeks, schedule permitting. This is probably going to form the basis of one of my talks
in the future...

## Demo

You can play a live demo at .

This works best on a computer, though there's support planned for tablets eventually.

![Screen Shot](./screenshot.png "Screenshot")

## What

The number one question I've received after some of my talks (list here: )
from fellow or aspiring Go developers is: "Can I write a game with Go?".

Yup. Absolutely! Go is a general-purpose language and can most definitely be used
to write games. A special bonus is the brilliant Ebitengine project that provides
Go with a fantastic 2D game engine that works across multiple platforms.

## Why

But why do any game development at all? It's not just fun, because game development
can challenge you in different ways. Especially when you have to do a bunch of work
really quickly to keep the framerate up! Games deal with concurrency, event sequencing,
constant data updates and user input, to name but a few things.

I often use game development to learn new strategies and techniques, because the
feedback is instant and visual. This makes it easier to experiment and see the
effect of what I'm doing and turns dry theory into something fun and practical.

### Playing

The idea is to out-bounce your enemy with your Bouncers. You and the enemy both
have a base from where bouncers will spawn over time. A base can store up to six
bouncers, ready to be deployed. Bases have shields which are depleted by enemy
bouncers hitting it and replenished by friendly bouncers. Shields also regenerate
over time.

### Platforms

Ebitengine supports a variety of platforms, and for this game, I am mainly using
WASM as my target platform. Testing is often done as a desktop app and I then
also test via the browser in the WASM form.

The default `task test` command runs the game as a desktop app. It's really handy
to have different options available.

### Technologies

I used a variety of technologies to make this all happen:

| Tech | Where | Why |
| ------------ | ---------------------------- | ---------------------------------- |
| Go | | Development language of choice |
| Ebitengine | | Great 2D engine, with WASM support |
| Task | | Build tool of choice |
| GoLangCILint | | Go linter for code cleanup |

### Tasks

For convenience, I have a Task file. This helps save me from having to remember commands. Instead, Task does that for me!

Run `task` to see a list of available tasks. Some are:

| Task | Action taken |
| --------------- | ------------------------------------------------------------------------------- |
| buildproduction | Builds a production WASM binary, minus debug information |
| buildwasm | Builds the WASM project |
| clean | Removes the './bin/' folder |
| coverreport | Generates the test coverage report |
| default | Lists available tasks |
| lint | Runs the 'golangci-lint' tool on the source code |
| play | Runs the desktop project, handy for quick local testing |
| run | Runs the files in the ./bin/ folder as-is, no build steps envoked. On port 9000 |
| runwasm | Runs the project in WASM on port 9000 |
| setupexecjs | Copies the wasm_exec.js and html files to the './bin/' folder |
| test | Runs the project tests |