Як я можу реалізувати гру Lights-Out за допомогою логічних воріт або тригерів?


9

По-перше, для тих, хто не знайомий з грою, саме так гра працює,

гра

Мета гри - вимкнути всі світильники, звідси і називається "Lights Out", і кожне натискання кнопки / світла перевертає її стан, а також сусідні сусіди на північ / південь / схід / захід, і це майже все .

Тепер, що я міг би придумати, - використовуючи шльопанці SR або JK. Це пов’язано з його здатністю виконувати роль елемента зберігання (початковий стан і наступний стан). Але я не можу думати про способи їх реальної реалізації.

Інша ідея полягає в тому, що кожен набір кнопок і суміжні з ним кнопки / світильники матимуть власну таблицю істинності, наприклад:

логічна таблиця

але чи можливо, щоб вхідні змінні були такими ж, як вихідні змінні? Чи є інші способи зробити це?

Відповіді:


9

Очевидним підходом було б використовувати процесор і робити все це на прошивці.

Однак, якщо мені справді потрібно було це зробити з кам’яними ножами та ведмедими шкурами, я б присвятив кожній площі гвинтовий флоп. Перекидання кожного квадрата буде перемикатися натисканням його кнопки або будь-якої з чотирьох сусідніх кнопок. Звичайно, ці натискання кнопок потрібно відмовитися. Знову ж, у прошивці це буде простіше.

Апаратне рішення не було б таким складним, але все повторилося б 25 разів, що зробило б його великим і важким для побудови.

Додано:

Мабуть, описаний вище опис недостатньо зрозумілий. Ось схема того, що є у кожній клітині:

Інші 4 входи на ворота NAND керуються за допомогою розблокованих сигналів 4 навколишніх кнопок, які також повинні перемикати стан цього квадрата. Аналогічно, відкликаний сигнал від цієї кнопки також надходить до одного з входів NAND-шлюзу кожної з 4 навколишніх комірок.


1
Це звучить як найдоцільніше зробити. Я б використовував TFF та прив'язував усі входи T до "1.". Тоді я мав би моментний перемикач SPDT для кожної кнопки. Зв’яжіть один кидок на "0", один кидок - на "1", а потім полюс на відповідні входи годинника TFF. Потім, коли ви натиснете перемикач, він переключить навколишні триггери, генеруючи єдиний край / позицію.
Шамтам

1
@Shamtam: Так, це один із способів дебютувати, якщо у вас є перемикачі SPDT. Однак більшість кнопок є звичайно відкритими SPST.
Олін Латроп

Напевно, мені доведеться використовувати перемикач SPDT для розгортання, будь то кнопка чи ні. Тепер я розумію, як підключити входи цієї гри, але я не отримую, як підключити виходи до світлодіодів. Я маю на увазі, що це не може бути просто простий вихід (Q) на світлодіод та його сусіди доповненням (Q ') так? Також ще одне питання: чи потрібно використовувати тактовий сигнал TFF? Якщо так, то як?
Жульєнн

2
Лічильник для кожної комірки керує світлодіодом безпосередньо. Логіка, що стосується сусідніх комірок, входить у вхід до фліппліпа, але вихід залишається локальним для комірки. Ні, SPDT-комутатори не потрібні для деблокування. Існують різні методи роз'єднання одного сигналу, як від перемикача SPST.
Олін Латроп

1
Ні, ви не розумієте логіки. Зазвичай, дебютовані виходи є високими, тому всі входи до NAND-шлюзу високі, що призводить до низького виходу. Після натискання будь-якої кнопки вхід NAND стає низьким, завдяки чому вихід NAND збільшується. Цей низький до високого краю змушує FF переключати свій стан.
Олін Латроп

0

Я б сказав, що T тригмари, мабуть, будуть найпростішими, оскільки ви можете перемикати їх вихідний стан одним входом. Ви можете використовувати по одному фліп-флопу для кожного світлодіода, а вхід прив'язаний до вашої кнопки, а вихідний прив'язаний до вашого світлодіода. Тоді ви можете прив’язати кожну кнопку до входів 4-х сусідніх фліп-флоп, щоб переключити їх стан.

Якщо ви хотіли використовувати шльопанці JK, ви можете зробити з них триггери, передавши свій вклад на обидва входи (J і K)


2
Ви можете розширити свою відповідь, пояснивши, як ви підключаєте 5 перемикачів до кожного тригера, не заважаючи один одному. Крім того, як щодо відмов перемикача?
Дейв Твід

0

Якби хтось хотів побудувати таку гру до розміру 7x7 з дискретної логіки, найбільш практичним дизайном було б, мабуть, використання циркуляційного реєстру змін для утримання стану дошки та шестибітного лічильника, щоб слідкувати за зміною положення даних у реєстрі. Перемістіть дані через перемикач у групах з 8 біт для керування мультиплексованим дисплеєм та сканування мультиплексної клавіатури. Майте семирозрядний лічильник "фліп-лайт", який запускатиметься будь-коли, коли шість бітів нижнього рівня не дорівнюють нулю, або коли стан верхнього біта відповідає стану декодованої в даний час кнопки. Переверніть стан поточного світла, коли застосовуються всі наведені нижче дії.

6-bit counter isn't  xxx111
6-bit counter isn't  111xxx
7-bit counter isn't xxxxx00
7-bit counter isn't xx00xxx
7-bit counter is    00xx0xx

Зауважте, що хоча для розшифровки цих лічильників потрібна значна кількість логіки, це було б тривіально порівняно з кількістю мікросхем, необхідних для реалізації кожного світла окремо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.