Екцел / ВБА - игра Боггле

Правила игре
Као што је објашњено на Википедији ... // ен.википедиа.орг/вики/Боггле:
"Игра почиње потресањем покривене посуде од шеснаест кубичних коцкица, свака са различитим словима отиснутим на свакој страни. Коцке се смјештају у ладицу 4к4 тако да је видљиво само горње слово сваке коцке. решетка, три минута песка је покренут и сви играчи истовремено почињу главну фазу игре.
Сваки играч тражи ријечи које се могу конструисати из слова секвенцијално сусједних коцки, гдје су "сусједне" коцке оне које су хоризонтално, вертикално или дијагонално сусједне. Ријечи морају бити дугачке најмање три слова, могу укључивати појединачно и множину (или друге изведене облике) одвојено, али не могу користити исту коцку слова више од једном по ријечи. Сваки играч снима све речи које пронађе пишући на приватном листу папира. Након три минута, сви играчи морају одмах престати писати и игра улази у фазу оцјењивања. "
Предувјети
У Боггле.клс радној књизи, потребна вам је решетка за смјештај 16 слова. Да бисмо то урадили, поставићемо опсег 4Кс4 ћелија, у примеру Д2: Г5:
Уметните дефинисано име:
Мени: Инсертион
Избор: Ном
Кликните: Дефинир
Имена у радној књизи => типе: грилле
Односи се на => ентер: Феуил1! $ Д $ 2: $ Г $ 5
Кликните на Додај.
ВБА кодови
Опција Екплицит 'Вариаблес де дименсион' модул »Дим ЛистеМотс () Ас Стринг Димна абецеда (25) Дим решетка (1 до 4, 1 до 4) Дим Т_Оут () Дим Инди &, НумЦол &, МотсТраитес Ас Лонг 'процедуре принципале сервант д'аппел аук аутрес процедурес Суб Алеатоире_ПроцедуреПринципале () Дим Всх Као радни лист, НбреМотсТроувес Ас Лонг, и &, ј &, цпт МотсТраитес = 0 Постави Всх = ТхисВоркбоок.Ворксхеетс ("Феуил2") Листови ("Феуил1"). Домет ("Ц10: Х65536") Опсег ("Е7") ЦлеарЦонтентс цпт = 0 За и = 1 до 4 За ј = 1 до 4 Ако су ћелије (и + 1, ј + 3) "" Затим цпт = цпт + 1 Даље ј Даље и Ако је цпт 16 Онда МсгБок "Веиллез а биен ремплир ла грилле", вбЦритицал: Екит Суб За НумЦол = 2 до 7 ЛистерМотс Всх, НумЦол РетирерМотсЛеттресМанкуантес МотсДансГрилле Нект За и = 3 до 8 НбреМотсТроувес = НбреМотсТроувес + (Колоне (и) ) .Индд ("*",,,, клБиЦолумнс, клПревиоус) .Ров - 9) Следећи листови ("Феуил1"). Ранге ("Е7") = "Номбре де мотс троувес:" & НбреМотсТроувес Енд Суб ' дес леттрес, а цоммандер депуис ун боутон данс ла феуилле Суб Тираге () Дим и &, ј &, нумер, и За и = 0 до 25 алфабета (и) = Цхр (65 + и) Нект За и = 1 до 4 За ј = 1 до 4 Рандомизе нум = ЦИнт (25 * Рнд) - 5 Ако нумер> 25 Тада нумер = нум - нумер + 10 Ако је нумер <0 Онда нумер = нумер + 5 решетка (и, ј) = алфабет (број) Следећи ј Следећи и За и = 1 4 За ј = 1 до 4 Ћелије (и + 1, ј + 3) = решетка (и, ј) Следеће ј Следеће и Крај Суб 'Ефаце лес леттрес ет лес солутионс, а командант депуис ун боутон данс ла феуилле Суб Еффаце () Листови ("Феуил1") .Домет ("Ц10: Х65536") Цлеар Лист ("Феуил1") .Домет ("Е7") ЦлеарЦонтентс Схеетс ("феуил1"). Ранге ("грилле"). ЦлеарЦонтентс Енд Суб ' Листе тоус лес мотс (решења) на Феуил2 Суб ЛистерМотс (Сх као радни лист, БиВал Цол као Интегер) Дим и &, ј & Обриши ЛистеМотс са Сх за и = 0 То .Цолумнс (Цол) .Финд ("*",,, , клБиЦолумнс, клПревиоус) .Ров РеДим Пресерве ЛистеМотс (ј) ЛистеМотс (ј) = .Целлс (и + 2, Цол) ј = ј + 1 Следи Крај С МотсТраитес = МотсТраитес + УБоунд (ЛистеМотс) Крај Суб 'Енлеве де ла ли сте, лес мотс цонтенант дес леттрес не фајзант пас партие ду тираге Суб РетирерМотсЛеттресМанкуантес () Дим леттресутилисеес (), леттресманкуантес () Дим ЛистеМотсТемп () Ас Стринг, леттр $, мот $ Дим и &, ј &, к &, тест Ас Боолеан Дим МонДицо1 Ас Објецт, МонДицо2 Ас Објецт, ц леттресутилисеес = Домет ("грилле") '-----> Мену Инсертион / Номс / Дефинир Сет МонДицо1 = ЦреатеОбјецт ("Сцриптинг.Дицтионари") Фор Евери ц Ин леттресутилисеес МонДицо1 (ц) = " "Нект ц Постави МонДицо2 = ЦреатеОбјецт (" Сцриптинг.Дицтионари ") За сваки ц У абецеди Ако не МонДицо1.Екистс (ц) Затим МонДицо2 (ц) =" "Следећи ц леттресманкуантес = Апплицатион.Транспосе (МонДицо2.Кеис) ЛистеМотсТемп = ЛистеМотс Ерасе ЛистеМотс Фор и = 0 За УБоунд (ЛистеМотсТемп) мот = ЛистеМотсТемп (и) За ј = 1 За УБоунд (леттресманкуантес) леттр = леттресманкуантес (ј, 1) Ако је ИнСтр (мот, леттр) = 0 Затим тест = Труе Елсе тест = Фалсе Екит Фор Енд Иф Нект ј Ако је тест Затим РеДим Пресерве ЛистеМотс (к) ЛистеМотс (к) = ЛистеМотсТемп (и) к = к + 1 Крај дуре де рецхерцхе дес мотс Суб МотсДансГрилле () Дим ц, мот Дим рнгТроуве Ас Ранге Дим и &, ј &, НумЛеттре & Дим фирстАддресс, Флаг Ас Боолеан Дим МотсТоувесДансГрилле (), к & Дим ЦеллулесУтилисеес ас Објецт За и = 1 до 4 За ј = 1 4 решетка (и, ј) = Ћелије (и, ј) Следеће ј Следеће и За сваки мот у ЛистеМотсу Поставите рнгТроуве = Распон ("решетка"). Целлс.Финд (лево (мот, 1)) Ако не рнгТроуве је ништа Ерасе Т_Оут Индикатор = 0 РеДим Пресерве Т_Оут (Индијски) Т_Оут (Индијски) = рнгТроуве.Аддресс Сет ЦеллулесУтилисеес = ЦреатеОбјецт ("Сцриптинг.Дицтионари") ЦеллулесВоисинес ЦеллулесУтилисеес, рнгТроуве, мот, 1 фирстАддресс = рнгТроуве.Аддресс До сет рнгТроуве = Ранге ( Целлс.ФиндНект (рнгТроуве) Ерасе Т_Оут Индикатор = 0 РеДим Пресерве Т_Оут (Индијски) Т_Оут (Индијски) = рнгТроуве.Аддресс Постави ЦеллулесУтилисеес = ЦреатеОбјецт ("Сцриптинг.Дицтионари") ЦеллулесВоисинес ЦеллулесУтилисеес, рнгТроуве, мот, 1 = Лен (мот) - 1 Затим Флаг = Труе За Индијски = ЛБоунд (Т_Оут) За УБоунд (Т_Оут) Ако је опсег (Т_Оут (Индијски))., Индија + 1, 1) Онда Флаг = Фалсе: Излаз за следећу Индикацију Елсе Флаг = Фалсе Енд Ако је онда означите Екит До Лооп Док не рнгТроуве је ништа и рнгТроуве.Аддресс фирстАддресс Енд Ако Иф Флаг Онда РеДим очување МотсТоувесДансГрилле (к) МотсТоувесДансГрилле (к) = мот к = к + 1 Енд Иф Нект мот Ако к 0 Тада за к = ЛБоунд (МотсТоувесДансГрилле) За УБоунд (МотсТоувесДансГрилле) Листови ("Феуил1"). Ћелије (10 + к, НумЦол + 1) = МотсТоувесДансГрилле ( к) Даље к Крај Ако је крај Суб 'Ен фонцтион дес целлулес воисинес Суб ЦеллулесВоисинес (БиРеф Обј, ЦелИнитиале, Стрмот, нивеау) Дим Цел Ас Ранге, Плаге Ас Ранге, Флаг ас Боолеан, ц Он Еррор Ресуме Нект Сет Плаге = Ранге .Оффсет (-1, -1), ЦелИнитиале.Оффсет (1, 1)) Обј.Адд ЦелИнитиале.Аддресс, Мид (Стрмот, нивеау, 1) За сваки Цел У Плаге Ако је Индијски + 1 = Лен (Стрмот) Затим Излаз Фор Ако је Цел.Валуе = Мид (Стрмот, нивеау + 1, 1) онда Флаг = Труе за сваки ц у Обј.Кеис Ако ц = Цел.Аддресс Онда Флаг = Фалсе Нект Ако Флаг затим Обј.Адд Цел.Аддресс, Мид ( Стрмот, нивеау + 1, 1) Индикатор = Индијски + 1 РеДим очување Т_Оут (Индијски) Т_Оут (Индијски) = Цел.Аддресс ЦеллулесВоисинес Обј, Цел, Стрмот, нивеау + 1 Крај Ако се заврши Ако је следећи Цел Крај Суб Додај стандардном модулу: Из табеле притисните АЛТ + Ф11 Инсерт / Модуле.
Нотес
Изнад свега, обратите посебну пажњу на колоне у Листу 2: Колона Б (од Б2 до БКС: 3 слова), Колона Ц (од Ц2 до Цк: 4 слова), ....., Колона Г (из Г2) у Гк: 8 слова ријечи)
- Датотека је доста тешка (3МБ), јер садржи листу од преко 80.000 речи ...
- Преузмите датотеку овде