Треки
/
Tcl
Tcl
/
Вправи
/
Шибениця
Шибениця

Шибениця

Складна

Вказівки

Реалізуйте логіку гри Hangman за допомогою функціонального реактивного програмування.

Hangman - це проста гра на вгадування слів.

Функціональне реактивне програмування - це спосіб писати інтерактивні програми. Воно відрізняється від звичного погляду: замість того щоб казати «коли кнопку натиснуто, збільшуємо лічильник», ми пишемо «значення лічильника дорівнює сумі кількості натискань кнопки».

Реалізуйте базову логіку гри Hangman за допомогою функціонального реактивного програмування. Для цього потрібно встановити бібліотеку для функціонального реактивного програмування; про це йдеться у файлах вправи, специфічних для конкретної мови.

Новий підхід до вправи

Проігноруйте частину про бібліотеку FRP: для цієї вправи стороння бібліотека не потрібна. Ця вправа зосереджується на подієво-орієнтованому програмуванні з використанням колбеків і циклу подій Tcl.

Потрібно створити TCP-сервер і предметно-орієнтований протокол. Цей сервер запускають зі словом, яке потрібно вгадати. Тестовий скрипт реалізує клієнт, який надсилає серверу команди.

Предметно-орієнтований протокол

Команди протоколу, які потрібно реалізувати:

  • STATUS повертає поточний стан гри. Відповідь буде масивом із трьох елементів:
    1. кількість невдалих спроб, що залишилися,
    2. слово, замасковане символами підкреслення замість невгаданих літер, і
    3. поле статусу (одне з «ongoing», «win» або «lose»)
  • GUESS x, де x це літера, яку потрібно вгадати. Після кожного вгадування сервер відповідатиме масивом зі статусом.
  • SHUTDOWN віддалено вимикає сервер. Інакше сервер завершує роботу після перемоги або поразки.

Сервер має вміти обробляти ці команди незалежно від регістру.

Який порт використовує сервер?

Запустіть свій сервер на порті з номером 0: Tcl знайде невикористаний порт, тож нам не доведеться жорстко вписувати номер порту в тестовий скрипт. Усі інтерпретатори, що працюють в одному процесі (включно з потоками), спільно використовують одне середовище, тож сервер може повідомити свій порт тестовому скрипту через глобальний масив env. Приклад є у початковому файлі hangman.tcl.

Підказки

Знадобляться такі команди Tcl: socket, fileevent, vwait.

Цей приклад програми із сокетами допоможе зробити перший крок.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Tcl Exercism

Час розпочати Шибениця?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Tcl, а також 135 вправ та справжнє наставництво від людей, і все це безкоштовно.