Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Люди добрые помогите! Подскажите как при генерации случайных чисел (в моем случае от 1-9) отсеивать уже появившиеся. То есть если выпало число 5 то чтобы до конца цикла 5-ки больше не было, и так с каждым числом, че-то не мого понять как это реализовать.
Добавлено (03 Июня 2013, 07:36) --------------------------------------------- если вкратце, то вам нужно заполнить ListBox нужными числами (1-9) и доставать их оттуда по одному. Чтобы число не повторялось, нужно брать числа по очереди или вовсе удалять из списка если оно больше не нужно чтобы попадалось.
Отличная идея! Спасибо большое буду пробовать. У меня еще вопрос, в связи с тем что как вы уверен знаете принцип судоку, цифры недолжны повторяться как в самом блоке из 9-ти клеток так и по горизонтале и вертикали не будет-ли Neobook тормозить из-за многочислинных проверок условий? Просто я помню как-то делал прогу, для сохранения буфера в текстовый файл с именем первых 8 букв самого текста (из буфера) и проверка и замена запрещенных символов для имени файла в windows (\/:*?"<>|) занемала на мой взгляд слиском много времени. За ранее благодарен! P.S. Еще раз спасибо за идею.
будет или нет - зависит от алгоритма. можно такой ерунды понаписать, что... думаю лучше сначала поискать в интернете оптимизированный рабочий алгоритм заполнения клеток и попытаться его реализовать средствами нб
Добавлено (03 Июня 2013, 12:14) --------------------------------------------- _http://www.billybear4kids.com/Sudoku/Software.shtml вот вроде как на нб сделано, но точно не знаю, не ковырял
Подскажите как сделать цикл чтобы цифры 1-9 ходили по кругу (123456789123456789123456789) причем начиная с любой цифры например: 89123456789, или 3456789123456789 короче чтобы после 9-ки было 1 а не 10 к примеру есть масив переменных типа:
Код
[D1] [D2] [D3] [D4] [D5] [D6] [D7] [D8] [D9] надо к примеру чтобы в [D1] = 9 в [D2] = 1 [D3] = 2 9 1 2 3 4 5 6 7 8
и так далее. Чето немогу панять как это реализовать, что только не пробовал ничего не получается. Помогите!
Woha28, мой тебе совет. Не связывайся с судоку. Если только так, для общего развития или только для себя. Или найди готовые примеры которые сможешь загружать в программу. Правильное судоку должно иметь одно единственное решение, и ни как иначе. По вопросу, два цикла надо. Цикл в цикле. Поищи лучше в интернете правильный алгоритм составления или построения судоку. Что то мне подсказывает что интерес сразу отпадет. Не хочешь читать хелп?
нужно крутить числа в списке, перемещая первый элемент в конец списка, тогда первым станет второй элемент и т.д. Чисто с массивами без списка трудно будет. Как задавать вопросы
На счет сложности я уже понял что очень трудно, а на счет алгаритма судоку я нашел решение, только в примере реализация алгаритма судоку приведена для Java а я теперь пытаюсь реализавать это в Neobook. Судоку делаю для себя. А на счет цикла о котором я прошу то я и раньше сталкивался с подобной проблемой когда нужно чтобы определенные цифры ходили по кругу. Проблема всегда была в том что к примеру если создать такой масив
Код
Loop "1" "9" "[i]" SetVar "[D[i]]" "[i]" EndLoop
то понятно что в переменных с [D1] по[D9] находяться нужные мне цифры (1,2,3,4,5,6,7,8,9) но я немогу понять как вытащить эти цифры в нужном мне порядке, к примеру начиная с 5 нужно вытащить 9 цифр (5,6,7,8,9,1,2,3,4) Если вас не затруднит можете привести пример. За ранее благодарен!
Вот тебе 49 000 готовых примеров. И не забивай себе голову. Но я не помню, по моему у них попадается несколько вариантов решения. Хотя автор заверял что одно. Есть хорошая программа simplesudoku, в ней по моему можно проверить сколько возможных решений есть.
Добавлено (03 Июня 2013, 21:21) ---------------------------------------------
Цитата (Woha28)
Если вас не затруднит
Затруднит. Я в больнице когда лежал от нечего делать пытался составить алгоритм. Помню что бился долго и по моему решения так и не нашел. Так что возвращаться к решению желания нету. Не хочешь читать хелп?
Вроде более менее получилось прописать алгоритм и все остальное, но теперь возникла другая проблема. По моей задумке при нажатии на пустую клетку (например с переменной [A1]) появляется 9 кнопок с цифрами от 1до 9 после нажатие на одну из кнопок в пустой клетке должна появится соответствующая цифра.Но не могу ни как сообразить как передать в какую переменную нужно внести соответствующую цифру. Помогите кто нибудь разобраться!
Когда нажимаешь на пустую кнопку(да и вообще на любую) в перемнной [Self] находится имя объекта с которым в данный момент происходит какое либо действие. Например при клике на кнопку A1 в переменной [Self] будет находится А1. Пишешь в действии на левый клик например
Ну вот постепенно начинается геморрой... В момент щелчка по клетке, причем любой клетке, еще до показа группы с цифрами, ты уже должен определить по какой клетке щелкнули. Чтобы потом, при нажатии на цифру, скрипт в цифре уже знал куда надо передавать выбранное значение.
Для этого проще всего в каждой клетке прописать идентификатор, переменную, куда класть имя щелкнутой клетки, например для A1: Setvar "[CELL]" "A1" Теперь в кнопках уже будет известно какую клетку выбрали и куда записывать цифру, прописать в каждой кнопке, напр. для 5: SetVar "[[CELL]]" "5" Обрати внимание на двойные скобки - в [CELL] лежит только имя переменной для клетки, а [[CELL]] превращает это имя в... действующую переменную: [[CELL]] = [A1], куда и записывается щелкнутая цифра (5).
На этом твои проблемы не кончаются, т.к. в момент показа блока с цифрами нужно проверять горизонталь и вертикаль и деактивировать кнопки с уже имеющимися в клетках цифрами, не давая вводить их повторно. Дальше все еще хуже...
Добавлено (07 Июня 2013, 03:12) ---------------------------------------------