[//]: # (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 |