-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMultidimensionalArrayTask.txt
More file actions
88 lines (72 loc) · 6.08 KB
/
MultidimensionalArrayTask.txt
File metadata and controls
88 lines (72 loc) · 6.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
Техническое задание (ТЗ):
Прототип "Логической головоломки" для мобильной игры
Проект: TileSwap Puzzle
Концепт: Игрок видит поле (сетку) разноцветных плиток.
Его цель — сделать так, чтобы в каждом ряду (горизонтали) и каждом столбце (вертикали) не было повторяющихся цветов.
Для этого он может менять местами две соседние плитки.
Ваша задача на текущий спринт:
Реализовать ядро игровой логики в консоли (без графики).
Это нужно для быстрого прототипирования и тестирования механик.
Требования к коду (что нужно реализовать):
1. Игровое поле (GameBoard):
- Используйте двумерный массив целых чисел int[,].
Каждое число будет представлять цвет плитки
(например, 1 - Красный, 2 - Синий, 3 - Зеленый, 4 - Желтый).
- Размер поля должен задаваться в начале игры (например, 4x4, 5x5).
2. Инициализация поля:
- Напишите метод GenerateRandomBoard(),
который заполняет массив случайными числами в заданном диапазоне
(например, от 1 до 4 - (для поля 4х4)). Используйте класс Random.
3. Отображение поля в консоли:
- Напишите метод PrintBoard(),
который выводит игровое поле в консоль в читаемом виде.
Можно раскрасить вывод, используя Console.ForegroundColor().
- Пример вывода:
1 2 3 4
3 1 4 2
4 3 2 1
2 4 1 3
4. Игровая механика (Свап плиток):
- Напишите метод SwapTiles(int row1, int col1, int row2, int col2),
который меняет местами значения двух ячеек массива.
- Важно: Реализуйте проверку, что свап происходит только между соседними
по горизонтали или вертикали ячейками.
Используйте логические операторы (&&, ||) и условный оператор if.
- Если игрок пытается свапнуть несоседние плитки, выводите сообщение об ошибке.
5. Проверка победы (Условие головоломки):
- Напишите метод CheckForWin(), который проверяет:
- Для каждой строки: Все элементы в строке уникальны (не повторяются).
Используйте вложенный цикл for.
- Для каждого столбца: Все элементы в столбце уникальны.
- Метод должен возвращать bool.
Если условие выполнено для всех строк и столбцов — игра выиграна.
6. Игровой цикл (Цикл while):
- Реализуйте основной цикл while (!isGameWon), который:
1. Очищает консоль.
2. Выводит текущее поле (PrintBoard()).
3. Запрашивает у игрока координаты двух плиток для обмена
(ряд и столбец для каждой). Используйте Console.ReadLine().
4. Пытается выполнить SwapTiles(...).
5. После каждого хода вызывает CheckForWin().
- При победе — выводится поздравление, и цикл завершается.
Дополнительные задания "со звездочкой" (если хотите углубиться):
1. Старт с решаемой конфигурации:
Вместо полностью случайной генерации, создайте метод,
который генерирует решенную головоломку (где все строки и столбцы уникальны),
а затем выполняет N случайных допустимых свапов, чтобы получить игровое состояние.
Это гарантирует, что у головоломки есть решение.
2. Счетчик ходов:
Добавьте переменную, которая считает количество успешных свапов. Выводите его на экран.
3. Подсказка (Hint):
Реализуйте функцию, которая сканирует поле и находит одну пару соседних плиток,
обмен которых улучшит ситуацию (уменьшит количество повторений в строках/столбцах).
Используйте вложенные циклы и проверки.
Что это охватывает:
- Многомерные массивы: Основа поля.
- Одномерные массивы: Могут пригодиться для временного хранения строки/столбца при проверке.
- Циклы (for, while): Для обхода массива и игрового цикла.
- Условные операторы (if, switch): Для проверок свапа, победы.
- Методы (Functions): Логика разбита на методы.
- Класс Random: Генерация поля.
- Работа с консолью: Ввод/вывод, цвета.
- Логические операторы: Проверка соседства плиток.