Skip to content

Implementation of the Blokus board game as an exercise to learn Rust.

Notifications You must be signed in to change notification settings

bstee615/blokus.rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

blokus.rs

Implementation of the Blokus board game as an exercise to learn Rust. Currently supports single-player only, with limited rules and termination conditions.

TODOs

Main game

  • Make the pieces in hand like the actual game
  • Add bot to play against
  • Handle multiple players

GUI

  • Handle pieces bigger than one cell
  • Handle returning pieces to the hand after deselecting
  • Allow rotating pieces
  • Abolish globals -- configurable board size, pixel size

Usage

Run tests:

$ cargo test

How to run GUI:

$ cargo run --bin gui

Example of the CLI output:

$ cargo run --bin console
    Finished dev [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/blokus`
Pieces:
[0]
  0
0 x
1 x
2 x
[1]
  0 1 2
0 x x x
[2]
  0 1 2
0 x x x
1 x . .
2 x . .
Choose piece:
1
Moves: 2
[0]
  0 1 2 3 4 5 6 7 8 9
0 o o o . . . . . . .
1 . . . . . . . . . .
2 . . . . . . . . . .
3 . . . . . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[1]
  0 1 2 3 4 5 6 7 8 9
0 o . . . . . . . . .
1 o . . . . . . . . .
2 o . . . . . . . . .
3 . . . . . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
Choose move:
0
Grid:
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . . . . . . . .
2 . . . . . . . . . .
3 . . . . . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
Pieces:
[0]
  0
0 x
1 x
2 x
[1]
  0 1 2
0 x x x
1 x . .
2 x . .
Choose piece:
1
Moves: 4
[0]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . o . . . . . .
2 . . . o . . . . . .
3 . o o o . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[1]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . o o o . . . .
2 . . . o . . . . . .
3 . . . o . . . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[2]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . o . . . . . .
2 . . . o . . . . . .
3 . . . o o o . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[3]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . o o o . . . .
2 . . . . . o . . . .
3 . . . . . o . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
Choose move:
3
Grid:
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
Pieces:
[0]
  0
0 x
1 x
2 x
Choose piece:
0
Moves: 7
[0]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . o o o . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[1]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 o o o . . x . . . .
3 . . . . . x . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[2]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . . . . . o . . .
5 . . . . . . o . . .
6 . . . . . . o . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[3]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . o . . x . . . .
3 . . o . . x . . . .
4 . . o . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[4]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . . . . . o o o .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[5]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . . . o . . . . .
5 . . . . o . . . . .
6 . . . . o . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
[6]
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . o o o .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . . . . . . . . .
5 . . . . . . . . . .
6 . . . . . . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .
Choose move:
5
Used all pieces!
Final grid:
  0 1 2 3 4 5 6 7 8 9
0 x x x . . . . . . .
1 . . . x x x . . . .
2 . . . . . x . . . .
3 . . . . . x . . . .
4 . . . . x . . . . .
5 . . . . x . . . . .
6 . . . . x . . . . .
7 . . . . . . . . . .
8 . . . . . . . . . .
9 . . . . . . . . . .

About

Implementation of the Blokus board game as an exercise to learn Rust.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages