---
tags: materials
---
# Шашки Го

## Класна робота
Вивчити правила гри в Го та пройти туторіал:
- https://online-go.com/learn-to-play-go
## Домашня робота
### Пазли
Отримати на уроці номер завдання і вирішити 10+ пазлів з нього. Список:
1. https://online-go.com/puzzle/15438
2. https://online-go.com/puzzle/21075
3. https://online-go.com/puzzle/9681
4. https://online-go.com/puzzle/7834
5. https://online-go.com/puzzle/6401
6. https://online-go.com/puzzle/14773
7. https://online-go.com/puzzle/14785
8. https://online-go.com/puzzle/14801
9. https://online-go.com/puzzle/14812
10. https://online-go.com/puzzle/14725
11. https://online-go.com/puzzle/2868
12. https://online-go.com/puzzle/2888
13. https://online-go.com/puzzle/1295
14. https://online-go.com/puzzle/1309
15. https://online-go.com/puzzle/1382
При виконанні завдання:
- намагатися ДУМАТИ при вирішенні пазлу, а не рандомно тикати або використовувати підказки
- всі рішення повинні бути в одному документі
- додавати посилання на конкретний пазл
- додавати картинку-рішення для пазлу
- писати чесно, чи вийшло зробити з першого разу, чи тикали поки не натикали
:::info
Додаткові вправи по вашому рівню можна знайти на https://online-go.com/puzzles
:::
## Вправи (Python)
### Поле для гри в Го
З допомогою черепашки, намалювати поле для гри в Го. Ви вже робили завдання "Сітка" на минулих уроках, можете первеикористати для малювання сітки 9х9 або 13х13 або 19х19.
### Установка каменів
- гра починається чорними
- при кліку на полі потрібно поставити камінь в те місце
- потім колір каменю міняється на протилежний і можна знову ставити камінь
Реалізувати установку каменів можна через `turtle.shape("circle")`, `turtle.onscreenclick()` та `turtle.stamp()`, а зміну кольорів --- через глобальні змінні (або через перевизначення turtle.onscreenclick).
Бонус: прив'язувати камені до сітки, а не просто ставити по координатам.
### Автозбереження
- після кожного ходу зберігати цей хід в матрицю
- зберігати матрицю та хто зараз ходить у файл після кожного ходу
- при запуску гри зчитувати поле з файлу (якщо файл є) і починати гру з того місця де було закінчено
### Реалізувати правила гри
- зробити перевірку ходів по правилам: не будь-де можна ставити камені
- зробити детект закривання області каменями. Реалізувати забирання каменів. Для цього доведеться відмовитись від `turtle.stamp()` і зробити кожен камінь "черепашкою" (скільки каменів --- стільки і додаткових черепашок на сцені).
- для початку можна реалізувати це тільки для випадку "4 камені оточили 1"
- потім потрібно буде використовувати більш складний алгоритм для визначення чи якийсь камінь оточений. Може згодитись [алгоритм "заливки"](https://uk.wikipedia.org/wiki/%D0%97%D0%B0%D0%BB%D0%B8%D0%B2%D0%BA%D0%B0)
- в кінці гри зробити підрахунок очків
### Гра по мережі
Реалізувати сервер та клієнт версії, які спілкуються по сокетам (звичайним або websockets), щоб можна було грати двум гравцям на різних комп'ютерах.
### Автосолвер
- написати алгоритм, який буде перебирати всі можливі варіанти
- і він же буде грати за іншого гравця, тобто, зможе оцінити які ходи є виграшними
- і буде вирішувати пазли, які можна вирішити за 5 ходів максимум
### Парсер картинок
Написати алгоритм, який по картинці, зображенню гри (камені розставлені на дошці) визначить конфігурацію гри і відтворить її на екран.і