Urgent.News

What's breaking now, across thousands of outlets.

Tech

Snake and Ladder in Go

Snake and Ladder in Go This is a small console Snake and Ladder game in Go. Use it to see how a program can be split into a few types that each do one thing. The board has 100 squares, plus snakes and ladders. Three coins take turns. A coin wins only when it lands on exactly 100 . roll dice → move → if over 100, stay → apply snake/ladder (can chain) → if 100, that coin wins Solid arrow = has /…

The provided source code describes a console implementation of the classic board game Snake and Ladder using the Go programming language. The game consists of a 100-square board with snakes and ladders, and three players take turns rolling a dice to move their tokens.

The key components of the game are:

1. Game Rules: The game follows a set of rules where a coin wins only when it lands exactly on square 100. When a coin moves past square 100, it stays in that position and then applies the snake or ladder rules, which can potentially move the coin further along the board. If after applying the snake or ladder the coin lands on square 100, that coin wins the game.

2. Game Structure: The game is designed with a clear separation of concerns. The Game struct acts as the "facade" that hides the implementation details from the callers. It knows about the dice, coins, and jumps (snakes and ladders) but does not know how to wire them together. This design allows for polymorphism, meaning that different types of jumps (ladders and snakes) are treated the same way in the game logic.

3. Types Used in the Game:

- Square: Represents a single square on the board, identified by a number.

- Dice: Represents the dice that players roll to determine movement. It only has the ability to roll and does not care whose turn it is.

- Coin: Represents a player's token on the board, identified by a color and a current position on the board. It does not understand the rules of the game.

- Jump: An interface that both Ladder and Snake structs conform to. This allows the game to uniformly handle different types of jumps without knowing their specific implementation details.

- Ladder and Snake: Both are types of jumps. A Ladder moves a player's token from a start square to an end square, while a Snake moves a player's token from a start square to an end square, potentially in the opposite direction. Both implement the Jump interface.

- Board: Represents the overall state of the game, including all squares, ladders, snakes, and a combined list of all jumps. The board itself does not directly participate in the game turn logic; it merely stores the state for the Game to manipulate.

4. Constructors: The game makes use of constructor functions to create instances of the different game components such as Board, Dice, Coin, Ladder, and Snake. This encapsulation ensures that the creation of these objects happens in one place, keeping the code organized and easier to maintain.

5. Polymorphism: The use of interfaces and shared implementations allows the game to treat ladders and snakes uniformly. This means that the game logic only needs to know about the Jump interface and can apply the same movement rules to both ladders and snakes, without needing to distinguish between them.

6. Dependence on Interfaces: The game's turn logic is designed to depend on the Jump interface rather than specific types. This means that whether a snake or a ladder is encountered, the game applies the same logic to move the coin accordingly. This abstraction allows for easy addition of new types of jumps in the future without altering the core game logic.

In summary, this Go implementation of Snake and Ladder demonstrates good object-oriented design principles, including encapsulation, polymorphism, and dependency inversion. By separating concerns into distinct types and using interfaces where appropriate, the code remains modular, easy to extend, and maintain.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

504 vs 503: What Actually Triggers Each in nginx, ALB, and Cloudflare

You're staring at a 5xx in your logs at 2am. Is it a 503 or a 504, and does the difference actually change what you do next? Yes — a lot.

  • 503 error indicates upstream server actively refusing request
  • 504 error signifies upstream server processed request but failed to respond in time
  • Each platform (nginx, ALB, Cloudflare) has distinct settings and triggers for these errors

Flutter OTA Updates with Shorebird

Flutter OTA Updates with Shorebird Why We Needed OTA Updates We pushed a build with a small logic error. It was a one-line fix.

  • Flutter developers discovered OTA updates needed after logic error caused crashes.
  • Shorebird tool enables sending Dart code updates directly to users' devices.
  • Shorebird patches fix issues without store review, speeding up bug fixes.

Pricing an economy off its difficulty model

Originally published on indiecore.net . Part 8 of 10 on building a word-block puzzle engine. Part 7: testing a level pack you did not write. The first economy paid 20 coins for finishing a level.

More from Saturday 19 September →