-3 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 55
|
||||||
1 | ||||||
Как обратиться к массиву?12.04.2018, 17:47. Показов 2000. Ответов 5
Метки нет (Все метки)
Хотелось бы узнать как работает данный массив. Что такое PAD_MAX . И как обращаиться к данному массиву? Он должен выводить часть поля для игры крестики нолики. И мне нужно к нему обратиться , но я не знаю как. Подскажите люди добрые.
0
|
12.04.2018, 17:47 | |
Ответы с готовыми решениями:
5
Необходимо обратиться к исходному массиву Почему нельзя обратиться к массиву, не указывая индекс его элемента Как обратиться к массиву Как обратиться к массиву? |
2489 / 1147 / 707
Регистрация: 25.04.2016
Сообщений: 3,294
|
|||||||||||
12.04.2018, 18:06 | 2 | ||||||||||
- Господин, массив?
#define PAD_MAX 4 Это команда для препроцессора, перед компиляцией программы в каждом месте, где встретится текст PAD_MAX, вместо это текста будет подставлено значение 4. Если так понять сложно, представьте себе, что это константа, т.е.
В целом тут происходит следующее: Задается первая размерность двумерного массива mass[][], затем объявляется сам массив mass[4][16], ну и после этого происходит печать каждой строки этого двумерного массива на экран. Обратиться к элементам этого массива можно как к элементам любого другого двумерного массива:
0
|
-3 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 55
|
||||||
12.04.2018, 18:49 [ТС] | 3 | |||||
А вы не подскажите как , вывести на игровое поле "нолик" или "крестик" вместо дефиса по средине. Я пытался как на видео сделать ,а там человек пишет на Си++. Я пытался через if else но ничего не вышло.
Вот полностью код моей игры я хотел функции меин , где цикл сделать вывод крестика или нолика на игровое поле массива.
0
|
2489 / 1147 / 707
Регистрация: 25.04.2016
Сообщений: 3,294
|
||||||
12.04.2018, 23:49 | 4 | |||||
Сообщение было отмечено K4RT3R как решение
Решение
Я бы изменил принцип самой программы до чего-нибудь вроде такого:
Т.е. смысл в том, что у нас есть игровое поле 3х3 , и это поле хранится в массиве в main(), а когда нам нужно что-то сделать с полем, например записать в него новый ход игрока, мы передаем его в нужную функцию. При этом для печати нам достаточно просто передать поле и посмотреть какие ходы в нем записаны, т.е. например ходы первого игрока обозначены числом 1, ходы второго игрока - числом 2, и соответственно свободное поле - числом 0. Тогда мы просто смотрим что записано в текущую ячейку поля и в зависимости от этого выводим на экран илбо крстик, либо нолик. либо прочерк... Ну и так далее.
1
|
-3 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 55
|
|
13.04.2018, 11:24 [ТС] | 5 |
Большущее вам спасибо!
Добавлено через 1 час 24 минуты Для того , чтобы сделать вывод победителя необходимо с помощью if задать нужно условие в нашем случае это a[...][...] к примеру > 3 . 3 т.к кол-во шагов не должно превышать по вертикали и горизонтали. Правильно я мыслю?
0
|
2489 / 1147 / 707
Регистрация: 25.04.2016
Сообщений: 3,294
|
|||||||||||||||||||||
13.04.2018, 23:22 | 6 | ||||||||||||||||||||
Сообщение было отмечено K4RT3R как решение
Решение
Это зависит от того, как мы кодируем наше игровое поле, допустим, пусть пустая клетка - это 0, крестик - это 1 и нолик - это 2, проще всего найти победителя посчитав сумму в трех клетках, т.е.
1 + 1 + 1 = 3 2 + 2 + 2 = 6 на первый взгляд все хорошо, но если у нас будет строка: 2 1 0 то 2 + 1 + 0 = 3 а это сумма для крестиков... т.е. стоит выбирать такие значения, сумму которых можно определить однозначно, например: пустая клетка - 0 крестик - 1 нолик - 5 в этом случае, как бы мы ни старались, но в любом случае нам нужно в сумме либо 3, либо 15 для победы таким образом для определения победителя нам нужно посчитать суммы всех строк в массиве, всех столбцов и двух диагоналей: главной и побочной, и если хотя бы в одном из подсчетов мы получим нужную для победы сумму, мы определяем победителя: пусть: х х х х х х х х х - это наш массив. тогда нам нужно найти и проверить суммы всех горизонталей: х х х х х х х х х х х х х х х х х х х х х х х х х х х затем точно так же, всех вертикалей: х х х х х х х х х х х х х х х х х х х х х х х х х х х и всех диагоналей: х х х х х х х х х х х х х х х х х х и если хотя бы в одном случае встретится совпадение с 3 или 15, значит победитель определен и игра закончена. Добавлено через 8 минут нахождение и проверку суммы по горизонталям и вертикалям лучше поручить вложенным циклам, например:
В общем, это ненамного сложнее, чем просто if прописать... Хотя можно, конечно посчитать все суммы вручную...
выглядеть будет конечно кошмарно, зато будет железно работать. Добавлено через 5 часов 21 минуту Думаю это не единственный вопрос, который может у вас возникнуть, поэтому я просто оставлю этот код здесь:
Единственное, что тут требует разъяснений, так это алгоритм, по которому мы из хода игрока получаем индексы массива: вот индексы нашего двумерного массива: 0,0 0,1 0,2 1,0 1,1 1,2 2,0 2,1 2,2 мы можем сопоставить ему одномерный массив: 0 1 2 3 4 5 6 7 8 Ну, на деле он, конечно выглядит просто как лента индексов: 0 1 2 3 4 5 6 7 8, но в виде матрицы проще сопоставить соответствующие клетки. Т.е. клетке 0,0 соответствует клетка 0, клетке 1,1 соответствует клетка 4, и т.д. и у нас есть таблица ходов для игрока: 7 8 9 4 5 6 1 2 3 т.е. если мы знаем ход игрока, то каким-то образом нам нужно превратить ход в индексы двумерного массива, в котором у нас записано поле, т.е. когда игрок вводит число 1, это число должно преобразоваться в индексы 2 и 0. Как это происходит? 1. Сначала мы переводим ход игрока в соответствующий ему индекс одномерного массива: массив | ходы: 0 1 2 | 7 8 9 3 4 5 | 4 5 6 6 7 8 | 1 2 3 т.е. из числа 1 в правой части должно получиться число 6 в левой, а из числа 9 в правой части должно получиться число 2 в левой. Преобразование производится по следующему принципу: n = a - 7 | if a >= 7 && a <= 9 n = a - 1 | if a >= 4 && a <= 6 n = a + 5 | if a >= 1 && a <= 3 за это отвечает функция convert_2d() т.е. она получает ход игрока a и возвращает индекс воображаемого одномерного массива n теперь все, что остается - это преобразовать индекс воображаемого одномерного массива в реальные индексы двумерного массива, т.е. из числа 0 получить индексы 0 и 0, из числа 8 получить индексы 2 и 2. На самом деле это довольно просто. Первый индекс мы получаем делением с отбрасыванием дробной части, т.е. мы делим индекс воображаемого одномерного массива на размер массива, в нашем случае - это 3: a[i][k] i = (int) n /3; мы просто делим n нацело, с отбрасыванием дробной части и второй индекс k получается получением остатка от деления n на размер массива: k = n % 3; почему так? Допустим, у нас индекс одномерного массива 0 тогда i = 0 / 3 = 0 k = 0 % 3 = 0 т.е. получаются индексы 0 и 0 Давайте преобразуем обратно: n = i*3 + k = 0*3 + 0 = 0 т.е. все работает... Как вариант можно было не париться с пересчетом индексов и просто хранить их где-нибудь в программе, но тогда где-то в коде должна лежать длиннющая колбаса switch-case, которая будет ход игрока переводить в индексы, что не совсем красиво, хотя и довольно просто. Пример с такой колбасой вы можете посмотреть в первом недоработанном коде. Добавлено через 38 минут Вообще думаю этот код можно значительно улучшить и оптимизировать, поскольку я над ним особо не думал - просто писал первое, что в голову придет.
1
|
13.04.2018, 23:22 | |
13.04.2018, 23:22 | |
Помогаю со студенческими работами здесь
6
Как обратиться к массиву string Как обратиться к инициализированному массиву Как обратиться к массиву буквой? Как обратиться к массиву структур Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Какой язык программирования лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
|
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
|
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
|
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
|
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
|
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
|
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
|
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
|
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций
История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
|
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
|
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы
В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
|
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
|