Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tic-Tac-Toe

Консольные «крестики-нолики» на Rust: человек против компьютера. Учебный проект — порт классического примера из Python на идиоматичный Rust, чтобы разобраться с enum, сопоставлением с образцом (match), срезами и вводом-выводом.

Что тут интересного с точки зрения Rust

  • enum Cell { Empty, X, O } — клетка как перечисление, а не «магическая» строка. Компилятор гарантирует, что клетка всегда в одном из трёх состояний.
  • enum Outcome { Win(Cell), Tie, Ongoing } — исход партии одним типом (перечисление с данными), вместо строк-сентинелов вроде "nobody".
  • type Board = [Cell; 9] — доска это массив фиксированного размера (Copy), без аллокаций в куче.
  • impl Display for Cell — как научить свой тип печататься через {}.
  • match и matches! — разбор исхода и проверки «может ли кто-то выиграть».

Запуск

Нужен установленный Rust (rustc + cargo).

cargo run

Сборка релизной версии:

cargo build --release
./target/release/ticktacktoe

Как играть

  1. Программа спросит, хотите ли вы ходить первым (y/n).

  2. Клетки пронумерованы от 0 до 8:

    0 | 1 | 2
    ---------
    3 | 4 | 5
    ---------
    6 | 7 | 8
    
  3. На свой ход введите номер свободной клетки и нажмите Enter.

Первый игрок ходит крестиками (X), второй — ноликами (O).

Стратегия компьютера

Соперник не использует полный minimax — логика простая и предсказуемая (do_computer_move):

  1. если есть ход, которым можно выиграть прямо сейчас — сделать его;
  2. иначе, если следующим ходом выиграет человек — заблокировать эту клетку;
  3. иначе занять лучшую свободную клетку в порядке приоритета [4, 0, 2, 6, 8, 1, 3, 5, 7] (центр → углы → края).

Такой ИИ невозможно обыграть, но можно свести партию вничью.

Структура

src/main.rs    вся игра (одним файлом)
Cargo.toml     манифест пакета

Проверка кода

cargo build     # компиляция
cargo clippy    # линтер (проходит без замечаний)
cargo fmt       # форматирование

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages