Sudoku на Unity. Часть 1.

Всегда любил играть в судоку 6х6, 9х9, 9х9 с неправильными ячейками.

И вот решил создать эту игру в Unity с генерацией уровней, так как решил что эта задача будет интересной.

Начну с простого. Создам генерацию сетки с границами больших ячеек (на стандартной доске судоку 9х9 81 малая ячейка, и 9 больших ячеек). Я хочу сделать код универсальным, мало ли я захочу добавить судоку 5х5 например.

Sudoku на Unity. Часть 1.

1 скрипт Form, можно будет создавать несколько вариантов судоку 6х6, 9х9 и т.д., и запускать любую при желании.

- size - размер поля, если будет 6, то размер судоку будет 6х6
- size - размер поля, если будет 6, то размер судоку будет 6х6

bigCellIds - если size 6, то размер массива будет 36 (то есть все малые ячейки) и хранить он будет id большой ячейки, позже все поймете.

2 скрипт FormEditor, для удобного создания Form в инспекторе

Что тут происходит? При изменении size создается сетка из int размера size x size.
Что тут происходит? При изменении size создается сетка из int размера size x size.

Вот как это выглядит в инспекторе

Теперь нужно что бы другие системы считывали эти данные и строили сетку с границами больших ячеек.

3 скрипт Params, хранит статические данные

CellSize - размер малой ячейки в пикселях 
CellSize - размер малой ячейки в пикселях 

ThickMeshSize - толщина границы между большими ячейками в пикселях

4 скрипт ThickMesh, задает размер и позицию толстой границы

Этот скрипт находится внутри префаба, на котором еще есть компонент Image. Внутри Image находится спрайт - белый квадрат 8х8 пикселей.
Этот скрипт находится внутри префаба, на котором еще есть компонент Image. Внутри Image находится спрайт - белый квадрат 8х8 пикселей.

5 скрипт Board строит сетку на основе данных из Form

Sudoku на Unity. Часть 1.
_thinMesh - сетка-граница между малыми ячейками. Внутри RawImage находится вот такой спрайт 100х100:
_thinMesh - сетка-граница между малыми ячейками. Внутри RawImage находится вот такой спрайт 100х100:
Sudoku на Unity. Часть 1.

BuildThickMesh() - создает толстую границу
BuildThinMesh() - создает тонкую границу, которая между малыми ячейками.
BuildExternalThickMesh() - создает 4 длинных линии по краям поля(сверху, снизу, слева, справа)
BuildInternalThickMesh() - создает короткие линии между 2мя разными большими ячейками. Внутри цикла берется ячейка и сравнивается bigCellIds с ячейкой правее и ячейкой ниже. Если bigCellIds не совпадают, то между этими ячейками строится граница.

6 скрипт GameGenerator, запускает генерацию уровня.

Sudoku на Unity. Часть 1.

Видео как все настроить в Unity и демонстрация построения поля на основе данных с Form

4
1
Начать дискуссию