diff --git a/README.md b/README.md index 84d6f7f..6608cf1 100644 --- a/README.md +++ b/README.md @@ -80,3 +80,171 @@ leo run make_move 2u8 2u8 2u8 "{ r1: { c1: 1u8, c2: 0u8, c3: 0u8 }, r2: { c1: 0u | 1 | 0 | 0 | | 0 | 2 | 0 | | 0 | 0 | 0 | + + + +[//]: # (workshop/tictactoe) + +A standard game of Tic-Tac-Toe in Leo. + +⭕ ❕ ⭕ ❕ ❌ + +➖ ➕ ➖ ➕ ➖ + +⭕ ❕ ⁣❌ ❕ ⭕ + +➖ ➕ ➖ ➕ ➖ + +❌ ❕ ❌ ❕ ⭕ + +## Representing State +Leo allows users to define composite data types with the `struct` keyword. +The game board is represented by a struct called `Board`, which contains three `Row`s. +An alternative representation would be to use an array, however, these are not yet supported in Leo. + +## Language Features +- `struct` declarations +- conditional statements +- early termination. Leo allows users to return from a function early using the `return` keyword. + +## Running the Program + +Leo provides users with a command line interface for compiling and running Leo programs. +Users may either specify input values via the command line or provide an input file in `inputs/`. + +### Providing inputs via the command line. +1. Run +```bash +leo run ... +``` +See `./run.sh` for an example. + + +### Using an input file. +1. Modify `inputs/tictactoe.in` with the desired inputs. +2. Run +```bash +leo run +``` + +## Executing the Program +```bash +leo execute ... +``` + +## Playing the Game + +### 1. Create a new game board +```bash +leo run new +``` +| | | | +|---|---|---| +| 0 | 0 | 0 | +| 0 | 0 | 0 | +| 0 | 0 | 0 | + +### 2. Player 1 makes a move +```bash +leo run make_move 1u8 1u8 1u8 "{ r1: { c1: 0u8, c2: 0u8, c3: 0u8 }, r2: { c1: 0u8, c2: 0u8, c3: 0u8 }, r3: { c1: 0u8, c2: 0u8, c3: 0u8 } }" +``` +| | | | +|---|---|---| +| 1 | 0 | 0 | +| 0 | 0 | 0 | +| 0 | 0 | 0 | + +### 3. Player 2 makes a move +```bash +leo run make_move 2u8 2u8 2u8 "{ r1: { c1: 1u8, c2: 0u8, c3: 0u8 }, r2: { c1: 0u8, c2: 0u8, c3: 0u8 }, r3: { c1: 0u8, c2: 0u8, c3: 0u8 } }" +``` +| | | | +|---|---|---| +| 1 | 0 | 0 | +| 0 | 2 | 0 | +| 0 | 0 | 0 | + + + + +[//]: # (workshop/tictactoe) + +A standard game of Tic-Tac-Toe in Leo. + +⭕ ❕ ⭕ ❕ ❌ + +➖ ➕ ➖ ➕ ➖ + +⭕ ❕ ⁣❌ ❕ ⭕ + +➖ ➕ ➖ ➕ ➖ + +❌ ❕ ❌ ❕ ⭕ + +## Representing State +Leo allows users to define composite data types with the `struct` keyword. +The game board is represented by a struct called `Board`, which contains three `Row`s. +An alternative representation would be to use an array, however, these are not yet supported in Leo. + +## Language Features +- `struct` declarations +- conditional statements +- early termination. Leo allows users to return from a function early using the `return` keyword. + +## Running the Program + +Leo provides users with a command line interface for compiling and running Leo programs. +Users may either specify input values via the command line or provide an input file in `inputs/`. + +### Providing inputs via the command line. +1. Run +```bash +leo run ... +``` +See `./run.sh` for an example. + + +### Using an input file. +1. Modify `inputs/tictactoe.in` with the desired inputs. +2. Run +```bash +leo run +``` + +## Executing the Program +```bash +leo execute ... +``` + +## Playing the Game + +### 1. Create a new game board +```bash +leo run new +``` +| | | | +|---|---|---| +| 0 | 0 | 0 | +| 0 | 0 | 0 | +| 0 | 0 | 0 | + +### 2. Player 1 makes a move +```bash +leo run make_move 1u8 1u8 1u8 "{ r1: { c1: 0u8, c2: 0u8, c3: 0u8 }, r2: { c1: 0u8, c2: 0u8, c3: 0u8 }, r3: { c1: 0u8, c2: 0u8, c3: 0u8 } }" +``` +| | | | +|---|---|---| +| 1 | 0 | 0 | +| 0 | 0 | 0 | +| 0 | 0 | 0 | + +### 3. Player 2 makes a move +```bash +leo run make_move 2u8 2u8 2u8 "{ r1: { c1: 1u8, c2: 0u8, c3: 0u8 }, r2: { c1: 0u8, c2: 0u8, c3: 0u8 }, r3: { c1: 0u8, c2: 0u8, c3: 0u8 } }" +``` +| | | | +|---|---|---| +| 1 | 0 | 0 | +| 0 | 2 | 0 | +| 0 | 0 | 0 | +