DEV Community

Cover image for Bevy Minesweeper: Introduction
Qongzi
Qongzi

Posted on

60 6 1

Bevy Minesweeper: Introduction

Check the repository

Hello, in this tutorial we will introduce game development in Rust using Bevy, a free and open source data-driven game engine.

The final result of this course is a cross-platform minesweeper you can test in this live version:

Demo

Disclaimer

The tutorial focuses on the following goals:

  • Breakdown basic Bevy features and the ECS making a minesweeper
  • Using development tools such as the inspector gui, the logger, etc.
  • Developing a generic bevy plugin making good use of the state system and resources
  • Having Web Assembly support

The programming choices are not the most efficient but allow to fulfill the goals. For example, you may notice that the uncovering system has a 3 to 4 frames delay:

  • frame 1: click event read and tile trigger event send
  • frame 2: tile trigger event read and Uncover component insert
  • frame 3: Actual uncovering

There are better ways to do this but this way you learn to receive and send events, place components in order for a system to query it, etc.

A decent understanding of the Rust language is a prerequisite.

Note that this is my first Bevy project, there may be improvements so trust the latest version of the code.

Technologies

Why an ECS?

I have experience in game development using Unity3D component system using C#.
It is very user-friendly, but I think Object-oriented programming is getting obsolete, and I wanted to try an Entity component system.

Unity made an ECS, why not use it?

Unity is taking the leap towards ECS, but looking at the documentation I found it very complex and honestly, bad.
Maybe they were forced to compromise with the existing core but it doesn't stand the comparison with Bevy's ECS.

Why Rust?

I love the rust language, I love game dev, I wanted to try the combination.
Also, since I wanted to experiment with an ECS which is the incarnation of the Compound VS Inheritance pattern in game dev,
using Rust is very natural.

Furthermore, I find garbage collection to be a critical issue in game dev and Rust completely wipes it away.

Resources

We will be using the 0.6 version of the Bevy engine:

Some resources I used that you should check out:

The assets I used are not mine, they are all free for personal use, please check the credits.

I suggest you follow the tutorial using a modern IDE, like Jetbrains CLion or VS Code with the Rust plugin.

ECS

So what's an Entity component system?

The Unity documentation has a nice graphic explanation of ECS:

ECS Infographic

It's a data-oriented coding paradigm using the following elements:

  • Entities: representing an object via a simple identifier (usually a classic integer)
  • Components: structures that can be attached to entities, containing data but no logic
  • Systems: functions using Component queries to apply logic

The point is to apply identical logic to all Health components instead of applying logic to a complete object.
It is more modular and makes it easier to manage in threads.

The final element would be Resources which are data shared across systems.


Next Chapter


Author: Félix de Maneville
Follow me on Twitter

Published by Qongzi

Top comments (1)

Collapse
 
kapaseker profile image
PangoSea

Good job

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more