|
-3 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 55
|
||||||
Как обратиться к массиву?12.04.2018, 17:47. Показов 2182. Ответов 5
Метки нет (Все метки)
Хотелось бы узнать как работает данный массив. Что такое PAD_MAX . И как обращаиться к данному массиву? Он должен выводить часть поля для игры крестики нолики. И мне нужно к нему обратиться , но я не знаю как. Подскажите люди добрые.
0
|
||||||
| 12.04.2018, 17:47 | |
|
Ответы с готовыми решениями:
5
Почему нельзя обратиться к массиву, не указывая индекс его элемента Как обратиться к массиву |
|
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
|
|||||||||||
| 12.04.2018, 18:06 | |||||||||||
|
- Господин, массив?
#define PAD_MAX 4 Это команда для препроцессора, перед компиляцией программы в каждом месте, где встретится текст PAD_MAX, вместо это текста будет подставлено значение 4. Если так понять сложно, представьте себе, что это константа, т.е.
В целом тут происходит следующее: Задается первая размерность двумерного массива mass[][], затем объявляется сам массив mass[4][16], ну и после этого происходит печать каждой строки этого двумерного массива на экран. Обратиться к элементам этого массива можно как к элементам любого другого двумерного массива:
0
|
|||||||||||
|
-3 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 55
|
||||||
| 12.04.2018, 18:49 [ТС] | ||||||
|
А вы не подскажите как , вывести на игровое поле "нолик" или "крестик" вместо дефиса по средине. Я пытался как на видео сделать ,а там человек пишет на Си++. Я пытался через if else но ничего не вышло.
Вот полностью код моей игры я хотел функции меин , где цикл сделать вывод крестика или нолика на игровое поле массива.
0
|
||||||
|
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
|
||||||
| 12.04.2018, 23:49 | ||||||
Сообщение было отмечено K4RT3R как решение
Решение
Я бы изменил принцип самой программы до чего-нибудь вроде такого:
Т.е. смысл в том, что у нас есть игровое поле 3х3 , и это поле хранится в массиве в main(), а когда нам нужно что-то сделать с полем, например записать в него новый ход игрока, мы передаем его в нужную функцию. При этом для печати нам достаточно просто передать поле и посмотреть какие ходы в нем записаны, т.е. например ходы первого игрока обозначены числом 1, ходы второго игрока - числом 2, и соответственно свободное поле - числом 0. Тогда мы просто смотрим что записано в текущую ячейку поля и в зависимости от этого выводим на экран илбо крстик, либо нолик. либо прочерк... Ну и так далее.
1
|
||||||
|
-3 / 0 / 0
Регистрация: 21.10.2017
Сообщений: 55
|
|
| 13.04.2018, 11:24 [ТС] | |
|
Большущее вам спасибо!
Добавлено через 1 час 24 минуты Для того , чтобы сделать вывод победителя необходимо с помощью if задать нужно условие в нашем случае это a[...][...] к примеру > 3 . 3 т.к кол-во шагов не должно превышать по вертикали и горизонтали. Правильно я мыслю?
0
|
|
|
2487 / 1151 / 709
Регистрация: 25.04.2016
Сообщений: 3,315
|
|||||||||||||||||||||
| 13.04.2018, 23:22 | |||||||||||||||||||||
Сообщение было отмечено 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 | |
|
Помогаю со студенческими работами здесь
6
Как обратиться к массиву?
Как обратиться к инициализированному массиву Как обратиться к массиву буквой?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|