---
# System prepended metadata

title: Шашки Го
tags: [materials]

---

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

![](https://i.imgur.com/QzAlcBq.png)

## Класна робота

Вивчити правила гри в Го та пройти туторіал:
- 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 ходів максимум

### Парсер картинок

Написати алгоритм, який по картинці, зображенню гри (камені розставлені на дошці) визначить конфігурацію гри і відтворить її на екран.і