Online 4-In-A-Row

Personal Project
Windows
Unity
C#

View project on GitHub: 

GitHub Repository

Download from GitHub:

Download

Online 4-In-A-Row is a naughts & crosses styled game that I have developed as a hobby to learn more about multiplayer games and create something that I can call a finished game for people to play.

 

This project uses the following Unity packages and other types of work that were not created by myself:

  • Netcode for GameObjects (Unity)
  • Relay (Unity)
  • Lobby (Unity)
  • Visual effects

  • Audio (Ovani Sound)

  • Good times font

See the project's README for more details.

Why Naughts & Crosses?

I wanted to create a fun multiplayer game that I could complete as a solo developer. So, I chose to use naughts & crosses as a foundation to build upon because it's a classic game that already works well. The simple rules and mechanics also meant that it was a great choice for creating my first online multiplayer game.

Description Image

New Mechanics

The game introduces new rules and mechanics through optional settings called mutators. Enabling these mutator settings can apply board-wide effects for all counters or spawn collectible power-ups for players to use. For example, the bridge-gap power-up changes the rules for placing counters to allow for more ways to play, while others allow players to interact with counters that have already been placed by blowing them up or flinging them around.

User Interface

Almost all of the game exists on a screen-space or world-space canvas, the only non-UI game-objects are the counters and visual effects.

 

Lobby Browser

I created a user interface for a lobby browser, powered by Unity's Lobby package, so players can search, browse, and host public or private lobbies.

 

Scoreboard

The scoreboard appears once a match has finished and provides details about each player's statistics during that match, with the best statistic in each category being highlighted. Implementing a scoreboard allowed me to learn about sharing custom data types over a network using Unity's Relay package.

 

Loading screen

The loading screen appears as a simple transition between scenes to mask the application essentially pausing while multiple clients load content separately. It makes use of Unity's network scene manager to ensure all clients see the loading screen appear and hide at the same time.

 

Menus

There are several types of menus featured throughout the game such as:

  • Main menu
  • Lobby browser
  • Match settings
  • Mutator settings
  • Game settings

I utilised Unity's UI components to create a prefab of a scrollable list of options which is used by most of the menus. Scrollable elements are hidden with a mask when out of bounds and I did some extra programming to ensure the scrollbar is always the correct size and behaves correctly for different length lists.

 

Scaling UI

I've considered how different screen sizes might affect the display of the UI and utilised Unity's layout components to ensure that the game maintains its intended layout across all sizes.

Lobby Browser Menu
Scoreboard
Game Settings Menu

Multiplayer

The game features local and online multiplayer for two players. I created a lobby system with the help of Unity's Lobby package that allows players to search, browse, and host public or private password-protected lobbies. The game's other multiplayer features are powered by Unity's Relay package, which allows clients to share data in the form of network variables and remote procedure calls.

Online Match

GitHub

GitHub has been an important asset in managing this project. I used it throughout the game's development to document issues, plan content for the game, and release builds for anyone to play.

 

Planning Board

I also made use of GitHub's projects feature which allowed me to create a planning board for sorting issues when planning what content to work on for current and future updates.

GitHub Planning Board