Рейтинг:
26
Richard MacCutchan
Подумайте о том, что вы пытаетесь сделать. Чтобы напечатать одну букву, вам нужна двойная петля. Внешний цикл увеличивается для каждой строки символа, внутренний цикл увеличивается для каждого столбца. Поэтому, если вы хотите печатать символы рядом, вам нужно следовать за всеми столбцами первого символа, со всеми столбцами второго и так далее. Что-то вроде:
for each row of A // B should contain the same number of rows
for each column of A
print next character // print all the columns of A
end for
print some spaces
for each column of B
print next character // ..
end for
end for
Member 14564972
Этот метод доступен для символов, но этот проект отображает 2D-символ.
Я должен попробовать назначить как A[0][1]='#' это своего рода метод .Другой метод, который я пытаюсь использовать, - это использование cout для печати # follow the shape of the character. Если следовать вашему методу, метод 1 , который я пробовал раньше, не может использовать его, так как A и B имеют свои собственные строки и столбцы, и некоторые из них имеют назначение #.для метода 2 это то, о чем мой код выше, я думаю, может
Я удаляю \n по умолчанию, чтобы печатать в той же строке??
Member 14564972
Я знаю, в чем проблема моего кода. Именно из-за епси который я использовал в отображаться и функционировать загру. Если я хочу использовать endl для создания 2D A и B,
затем, когда тестируете условие, и они совпадают с тем, что вводит пользователь, который является AB. Затем он должен вызвать функцию displayA и циклическую функцию displayB, но проблема в том, чтобы удалить \n перед вызовом другой функции.Прав ли я в своей логике?Однако для выделенного символа я думаю, что могу это сделать, но для 2D-массива, который находится внутри функции, я понятия об этом не имею.
Richard MacCutchan
Не имеет значения, есть ли у вас 2D массив или набор 1D массивов, принцип точно такой же, как я описал выше. Если вы будете следовать моему псевдокоду (с немного большей настройкой), он должен работать для любого количества символов. Не печатайте endl
символ до тех пор, пока вы не завершите все столбцы в каждой строке.
Member 14564972
окей.Я стараюсь.
Рейтинг:
2
Richard MacCutchan
Вот скелет, который должен помочь сделать его более ясным. Во - первых, создайте статический массив, содержащий карты символов для каждой буквы. Нет необходимости воссоздавать его каждый раз, когда вы вызываете метод отображения. Я создал карты для букв А, В и С. Создать остальное-тривиальная задача.
static char charMap[][7] =
{
// the bottom six bits of each character represent the positions to mark
// or leave blank in the output grid
{ 0b001000, 0b010100, 0b100010, 0b100010, 0b111110, 0b100010, 0b100010 }, // A
{ 0b111100, 0b100010, 0b100010, 0b111110, 0b100010, 0b100010, 0b111100 }, // B
{ 0b011100, 0b100010, 0b100000, 0b100000, 0b100000, 0b100010, 0b011100 } // C
};
/// <summary>
/// Display a string as large characters
/// </summary>
///
void displayChars(string charList)
{
for (int row = 0; row < 7; ++row) // for each row in the maps
{
for (char x : charList) // for each character in the source text
{
char next = charMap[x - 'A'][row]; // get the map entry corresponding to the current character and row
for (int col = 0; col < 6; ++col) // for each of the six bits in the map
{
if ((next >> (5 - col)) & 1) // if the bit is set
{
cout << '*'; // output a star
}
else // if the bit is not set
{
cout << ' '; // output a space
}
}
cout << " "; // at the end of the columns add two spaces for the next letter
} // repeat for each character in the string
cout << endl; // at the end of the row output a newline
} // end of all seven rows
}
Member 14564972
На самом деле я новичок в программировании, а также В C++. Я хочу задать вам несколько вопросов.
1.для вашей первой линии, после набора символов[][7] &ГТ;&ГТ;[] должен находится в ряду справа?[7] предполагается, что колонка права?? или что означает и то и другое?
2.Почему используется 6 бит? n если подобное означает, что одна строка имеет 6 столбцов??
3. Для этой строки char next = charMap[x - 'A'][строка];
[x-'A'] означает перейти к персонажу?? Вот оно что означает??
4.что &ГТ;&ГТ; (5 - кол))значит
Richard MacCutchan
1. существует 7 строк для каждого символа, и каждая строка представляет собой карту символов, которые отображаются для создания образа символа. Карта использует нижние 6 бит карты для отображения шести столбцов. Таким образом, первая строка для символа а-это два нуля (пробела), один 1 (*) и 3 нуля (пробела).
2. я использовал шесть столбцов, потому что это то, что вы использовали в своем исходном коде; аналогично семь строк. Но вы можете изменить эти числа, чтобы сделать символ больше.
3. массив строк индексируется от нуля вверх. Таким образом, установив x на следующий символ в строке, если мы вычитаем значение 'A', мы получим правильный индекс в таблице. Например, если следующий символ - "D", то " D " - " A " равно 3, что является правильным индексом в таблице.
4. The >>
оператор сдвигает левый операнд на столько битов вправо. поэтому мы сдвигаем значение столбца, чтобы получить поле из байта карты. Например, если значение столбца равно 3, то 5-col = 2, поэтому мы сдвигаем слово карты на столько битов вправо и используем оператор th &, чтобы проверить, установлен ли этот бит. Если он установлен, мы печатаем звездочку, если он не установлен, мы печатаем пробел.
Я предлагаю вам потратить больше времени на изучение основ языка, прежде чем пытаться использовать некоторые из этих функций.
Member 14564972
извини, что задал столько глупых вопросов.
Richard MacCutchan
Все в порядке, мы все должны были начать с самого начала. Но, как я уже говорил выше, вам действительно нужно понять все основы языка, прежде чем переходить к более продвинутым приложениям.
Member 14564972
да.Код запущен:)однако я просто немного понимаю его,так как мне нужно сделать движение для входной строки.Я думаю, что не могу использовать его в данный момент.Могу я узнать, как вы изучаете эти функции?Я буду использовать его, как только самая простая версия кода будет успешно запущена.
Еще одна вещь, я знаю, что использую цикл, чтобы сделать мой предыдущий код вместе, но мой один цикл бесконечно.
(Я опубликую успешный код без зацикливания в решении)
Не могли бы вы посмотреть, как это изменить?Спасибо
Richard MacCutchan
Используйте код, который я дал вам в качестве отправной точки. Первое, что вам нужно сделать, это добавить все остальные буквы и убедиться, что они отображаются правильно.
Прокрутка немного сложнее, потому что вам нужно создать немного более сложный цикл. самый простой способ-повернуть строку на одну букву за раз и напечатать каждый набор с задержкой после него.
Итак, взяв строку "GOODFOOD", вы бы вывели
"GOODFOOD"
"OODFOODG"
"DFOODGOO"
"FOODGOOD"
"OODGOODF"
"ODGOODFO"
"DGOODFOO"
"GOODFOOD"
с небольшой задержкой после каждого набора. Но помните, что при отображении на консоли вам нужно будет очищать экран после каждого раза, чтобы текст появлялся в одном и том же положении.
Member 14564972
как отобразить весь этот символ, который в char map не превышает строки: 19(которые начинаются с 0) и столбца :39 (также считайте FR0M 0). Это означает, что он не может выйти за эту границу.Если он превышает , то часть строки не отображается. Кроме того, как определить координату строки,когда пользовательский ввод, например пользовательский ввод x=2, y=1 означает, что строка может начинаться только в x=2 и y=1 на большой доске, я имею в виду только сейчас(что не превышает 39 и 19)
Richard MacCutchan
Как я уже несколько раз пытался подчеркнуть, забудьте о пользовательском вводе. Сначала заработает базовая система, а затем вы сможете перейти к более продвинутым частям. Если вы хотите измерить отображение (и прокрутку) по столбцу, а не по большому символу, то вам нужно добавить дополнительный код, чтобы вести подсчет фактического столбца, в котором будет отображаться следующий символ.
Member 14564972
Я использую приведенный выше код.
Member 14564972
Но это не то движение, о котором вы говорили выше.Это как GOODFOOD все персонажи прилипают к другим и двигаются.
Richard MacCutchan
Так и будет, если все сделать правильно.
Member 14564972
Я имею в виду GOODFOOD без изменения порядка букв вся строка перемещается слева направо и сверху вниз.
Может?
Richard MacCutchan
Нет. Я уже объяснял выше, как заставить текст появляться для прокрутки. Если вы просто хотите, чтобы одно слово перемещалось по экрану, добавьте перед ним пробелы. Если вы хотите, чтобы он двигался вертикально, добавьте новые символы строки. В качестве альтернативы вы можете использовать (старый) conio.h
заголовок позволяет точно определить, где на экране консоли должен отображаться ваш текст. Но все это гораздо проще сделать в соответствующем оконном приложении, хотя это еще одна система, которая может занять некоторое время для обучения.
Richard MacCutchan
for (int i = 0; i < 10; ++i)
{
for (int j = 0; j < i; ++j)
cout << " ";
cout << "GOODFOOD\r";
Sleep(500);
}
Member 14564972
Я хочу напечатать 2D-массив, следуя коду, выше которого я задал много вопросов, и я хочу переместить строку .
Richard MacCutchan
Точно так же, как и маленький кусочек кода, который я показал вам выше. Вам нужно напечатать пробелы в начале каждой строки. Но печать нескольких строк на экране консоли, которые перемещаются по экрану, становится немного сложнее, так как вам нужно начинать с одного и того же вертикального положения для каждого набора. Итак, как я уже сказал выше, вы можете изучить использование функций conio.h, которые позволяют вам управлять позиционированием экрана.
Member 14564972
Для 6-битного кода тоже так?
Richard MacCutchan
Все будет работать именно так. Коды, которые я вам дал, - это просто примеры того, что можно сделать. Вы можете изменить их так, как вам нравится, чтобы сделать большие символы, разные символы, больше пробелов впереди, чтобы двигаться по экрану и т. д. Вот что значит быть разработчиком: учиться, думать, тестировать и практиковать, практиковать, практиковать.