Code Monkey home page Code Monkey logo

si's People

Contributors

crafterkolyan avatar dependabot[bot] avatar superheher avatar vladimirkhil avatar wurunduk avatar zaq007 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

si's Issues

Древовидный редактор с большей производительностью

В текущей реализации древовидного редактора всё построено на TextBox'ах. Это неэффективно.
Можно попробовать построить редактор на TextBlock'ах. А TextBox для редактирования создавать динамически при клике по области редактора.
Дополнительно заменить TreeView на набор вложенных шаблонов. TreeView здесь не очень нужно, так как глубина иерархии фиксирована.

Broadcasting мультимедиа при игре без фальстартов

В настоящий момент при игре без фальстартов сервер отдаёт клиентам ссылку на медиафайл. Когда кто-то нажимает на кнопку, клиенты прекращают воспроизведение файла. Но ссылка на файл доступна, и недобросовестный игрок может загрузить файл по ссылке и прослушать его полностью.
Данная проблема усложняет создание игр наподобие "Угадай мелодию".
Одно из решений проблемы - создание broadcast-сервера, который бы раздавал игрокам контент одновременно и прекращал бы это делать при паузе или нажатии кем-то на кнопку.
Одновременная раздача контента гарантировала бы, что ни один из участников не успел бы загрузить контент большей длительности, чем остальные.
Задача выглядит сложной и пока не в приоритете.

Переход на HTTPS

Задел под реализацию аккаунтов и работы с защищённых сессиях. Дополнительно защищает API сервера от сторонних атак.

Необходимо:

  • переключить сервер на работу через 80-й порт
  • зарегистрировать новое доменное имя и обеспечить работу сервера через него (нынешний домен проксируется Cloudflare, а оно не обеспечивает нужной производительности по веб-сокетам
  • получить сертификат при помощи Certbot и обеспечить работу сервера через HTTPS.

Развитие правил игры

Решение ни по чему не принято, это просто варианты.

Табло:

  • Вопросы с неизвестной стоимостью (?). Стоимость становится известна после открытия (или после ответа?)
  • Нестандартная форма табло (3D, гексагональная,...)
  • Возможность перемещения по табло как по лабиринту

Спецвопросы:

  • "Закрытый" вопрос со ставкой - ставки делаются втёмную. Играет тот, кто поставил больше остальных (ва-банки учитываются, как и прежде). По сути дела, тот же вариант, что финал, но отвечает только один игрок
  • То же, что и выше. Но ставки делаются после зачитывания части вопроса (аналог ТВ-игры "Ставка")
  • Аналог финального раунда, но в виде рядового вопроса в игре
  • Вопрос, стоимость которого постоянно растёт, пока на него не ответят. Возможность для следующего вопроса в теме продолжить рост со стоимости, достигнутой предыдущим вопросом
  • Ставки на понижение (вопрос задаётся не полностью. Показывается лишь часть вопроса, которую поставил участник)
  • "ГОНГ-игра". Сумма постоянно растёт до тех пор, пока участник не нажмёт на кнопку. В какой-то момент сумма сгорает
  • "Дуэль". Игрок выбирает оппонента, и они вдвоём соревнуются за сумму, отвечая на общий вопрос.

Для пакетов с дополнительными возможностями фиксируется версия. Софт, который их открывает, проверяет их версию, и предлагает обновиться, если он соответствующую версию не поддерживает.

При старте игры ей проставляется версия пакета. При подключении к такой игре появляется требование обновить клиент.

Новое API для получения списка игр в лобби

Когда число активных игр становится более 1000, получение информации о них начинает подтормаживать.

Следует разбить этот запрос на два: получение минимальной информации о списке игр (Id, название, тип и наличие пароля - последние два свойства нужны для фильтрации) и получение полной информации о конкретной игре по Id.

Проблема музыкальных вопросов с кросс-платформенными играми

Как воспроизводится:

  1. Создается игра онлайн, в которой есть люди с десктоп-версии и хоть один из веб-версии. Должны быть отключены фальстарты.
  2. Разыгрывается музыкальный вопрос.
  3. Во время воспроизведения музыки кто-то отвечает на вопрос.

Что происходит:
У людей, играющих в десктоп-версии музыка прерывается, а в веб-версии не останавливатся.
Как правило, такая ошибка приводит к рассинхрону игрового времени, из-за чего у отвечающего человека может резко прерваться время ответа на вопрос, и начинается стадия выбора следующего вопроса. И эта стадия обычно "сломанная", и вопрос выбрать обычно никто, даже ведущий, не может.
Порой рассинхрон может привести и к более необычным последствиям.

Полноценный плиточный редактор

Доработать правую панель плиточного редактора, чтобы с её помощью можно было редактировать произвольные поля элементов пакета (в режиме самого подробного представления).

Поддержать квоты по Upload'у пакетов и аватаров

Для защиты сервера от переполнения пакетами и аватарами нужно поддержать квоты по Uploady: на более 200 Мб за 2 часа на один IP-адрес.

Для этого необходимо:

  • #46 Установить Redis
  • Доработать сервер для хранения квот в Redis

SIGame 7.4

Новая версия клиента в работе.

  • Новый дизайн - cancelled
  • Новая музыка
  • Максимальное число игроков в игре увеличено до 12
  • Мультимедиа перестаёт проигрываться при паузе в игре
  • Добавлена экспериментальная функция озвучки текста вопросов
  • Улучшена передача мультимедиа при игре по сети
  • Исправлены многочисленные ошибки

Data Binding для TabControl

Сейчас основной TabControl не использует привязку к данным. Вкладки создаются программно.
Чтобы обеспечить автогенерацию вкладок, нужно обеспечить корректный возврат положений курсора и прокрутки при возврате к документу.

Заменить MediaElement с WPF на WinUI

При помощи XAML Islands.

Существующий медиапроигрыватель имеет два недостатка:

  • не умеет воспроизводить медиа по HTTPS; -> решено посредством перехода на .NET 6.
  • поддерживает ограниченный набор форматов.

Но надо понимать, что новый MediaElement будет работать только с определённой версии Windows 10 и не будет работать на Windows 7.

UI Issues

1. Оверлап кнопки и ника после апдейта

image

2. Предложение: может рамки для аватаров сделать одного размера?

Хранение пакета в формате JSON

Позволит проще открывать пакеты в веб-клиенте.
Но сейчас огромное количество пакетов уже создано в XML.
Так что если и браться за это, то будет длительный (несколько лет) переходный период, в течение которого пакеты будут содержать контент в двух форматах. И всё равно останется проблема старых непереконвертированных пакетов.
С другой стороны, XML в веб-клиенте можно спокойно читать.
Так что, возможно, переход не имеет смысла.
Обсуждаемо.

Сделать в SIQuester нормальный интерфейс для выбора стоимости вопроса с секретом

Реальная стоимость вопроса:

  • Число > 0 — фиксированная сумма.
  • 0 — на выбор из минимума или максимума вопросов в раунде. Эти величины вычисляются просмотром стоимостей всех вопросов раунда.
  • Три числа в формате [a;b]/h — означают, что игрок может выбрать стоимость вопроса из интервала [a;b] с шагом в h. Если третье число опущено, то можно выбирать только крайние значения.

Проблема с обновлением до 7.4.1

По какой то причине, обновление игры до 7.4.1 не происходит. При попытку обновления, диспетчер обновления просто закрывается.

Завершение мультимедиа-фрагмента вопроса

Во время отыгрыша вопроса серверу нужно понимать, когда закончилось мультимедиа и нужно двигаться дальше (показывать следующий фрагмент или предлагать нажимать на кнопку). Сервер не знает длительности мудьтимедиа-файла (если только при создании пакета для фрагмента не указали его длительность). Поэтому он полагается на сообщения от клиентов.
Этот метод ненадёжен: работа сервера не должна нарушаться в случае использования багованных версий клиентов.
Варианта решения пока нет. Но, возможно, на сервере нужно использовать какую-то библиотеку для работы с мультимедиа-файлами и с её помощью определять корректную длительность файла.

Поддержка режима "Угадай мелодию"

Первый раунд игры "Угадай мелодию" может быть проведён уже сейчас. Он почти ничем не отличается от SIGame. Насчёт минусов только не помню. Возможно, нужно поддержать блокировку кнопки на несколько вопросов при неправильном ответе.

Для второго раунда нужно поддержать:

  • вопрос, стоимость которого динамически растёт по мере истечения времени. Тот, кто отвечает верно, получает итоговую стоимость (тот, кто отвечает неверно, её теряет?);
  • тему, в которой в одной клетке содержится несколько вопросов, выбираемых друг за другом (причём стоимость следующего равна стоимости, на которой остановился предыдущий).

Для третьего раунда нужно поддержать:

  • возможность торговаться за понижение по длине вопроса (играет тот, кто будет отвечать на вопрос минимальной длины);
  • новый тип контента - midi. Будет содержать только ноты мелодии.

Размещение прямой ссылки на скачивание SIGame и SIQuester

У сайта http://vladimirkhil.com/ проблемы с установлением связи с SQL сервером.
Пример страницы, где вызывается ошибка: https://vladimirkhil.com/si/game

До исправления данной проблемы необходимо где-либо на видном месте разместить прямые ссылки на скачивание SIGame и SIQuester (например закрепить в группе ВКонтакте).
SIGame (SIGame.Setup.exe): http://vladimirkhil.com/content/redist/si/game/SIGame.Setup.exe
SIQuester (SIQuester.Setup.exe): http://vladimirkhil.com/content/redist/si/siquester/SIQuester.Setup.exe

Клиент своей игры // изменение способа распространения вопросов (пре-кеширование)

На данный момент клиент получает вопрос и его медиа-данные в реальном времени в момент выбора игроком вопроса.
Данный способ вызывает проблемы с отображениям медиа-данных у разных игроков (в зависимости от нагрузки серверов СИ, расположения игроков, а также канала до серверов СИ), что ведет либо к преимуществу одних игроков над другими, либо к невозможности отыграть пак с картинками, музыкой итд

В идеале клиент своей игры должен получать весь пак перед игрой, по следующей схеме:

  1. Хост при создании игры на каждый вопрос генерирует случайный ключ шифрования и запоминает его
  2. Хост конвертирует исходный пак в немного другой, шифруя каждый вопрос своим собственным ключом
  3. Хост отправляет измененный пак кажому подключившемуся к игру
  4. Клиент ожидает полной загрузки пака и только тогда игрок входит в игру
  5. При выборе игроком вопроса хост отправляет каждому игроку ключ де-шифрования на данный конкретный вопрос (что существенно уменьшит поток данных во время игры) и игроки всегда будут видеть вопрос примерно одновременно (будет зависеть только от пинга)

В целом схема подойдет и для браузерной версии игры (можно использовать локальное хранилище для хранения бинарных данных)

Шаблоны документа

Возможность сохранить произвольный документ как шаблон под некоторым именем. При создании нового документа можно выбрать в качестве начального документа как любой из 4-х предустановленных шаблонов, так и любой из собственных.
Документ сохраняется как есть, со всеми вопросами и авторами. Пользователь сам несёт ответственность за формирование шаблона.
Добавить возможность удаления кастомных шаблонов прямо из диалога создания нового документа.
Преобразовать встроенные шаблоны в единый формат хранения шаблонов (сложности могут быть только с параметризуемым шаблоном).

Добавить в СИмулятор автотестирование веб-кнопок

При старте игры отправлять запрос на localhost по заданному порту и проверять, что вызывается обработчик кнопок. Если тест не проходит, выводить сообщение об этом.
Добавить кнопку для запуска повторного теста.

Игровая статистика

Сохранение персональной статистики по игроку и по серверу. Возможность увидеть в интерфейсе клиенте прошедшие игры (и итоги), общее их количество, количество пакетов, другую статистическую информацию.

Переход на .NET 5

Перейти с .NET Framework 4.6.1 на .NET Core 3.1. Интересное упражнение. Плюс должна повыситься производительность IO-операций.

Поддержка постоянных аккаунтов

Важнейшая функциональность.

Позволит пользователям:

  • регистрировать свои аккаунты в системе
  • входить по логину и паролю
  • входить при помощи сторонних OAuth-провайдеров (в первую очередь, VKontakte)
  • хранить информацию о себе на сервере (логин, возраст, пол, аватар, настройки)

Дополнительно нужно подумать, не подпадает ли данная функциональность под закон о персональных данных. Сейчас сервер находится во Франции.

Когда начинает воспроизводиться мультимедиа, громкость звука сбрасывается в микшере

Windows 10 x64 с Anniversary Update.
Версия СИ 6.2.8
Когда начинает играть мультимедиа (звук или видео), делаю звук тише в микшере Windows, затем при следующем проигрывании мультимедиа звук СИ сбрасывается снова на максимум.
Происходит это в игре онлайн, по сети и локалке не проверял. Так же данный баг повторяется на Windows 7 x86 и x64

Контакты
ВКонтакте: Дмитрий Дарко

Актуальная версия Lingware.Spard

Сейчас текстовый импорт использует устаревшую версию. Новая версия использует другой синтаксис языка.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.