Описание проблемы

Занимаюсь изучением английского языка и в процессе заметил, что главная моя проблема - это забывать английские слова. Знаю точно что знаю это слово, но не могу вспомнить. Думаю, что многие сталкиваются с данной проблемой. В Интернет данная проблема стоит на третьем месте при изучении иностранного языка.

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

Существует множество методик решения проблемы забывания иностранных слов. Данные методики делятся на две группы:

  1. Механические методики. По сути это зазубривание новых слов. Проблема данных методик - мозг откладывает данную информацию в краткосрочную память и долго этот эффект не держится.

  2. Использование слов в контексте. То есть Вам нужно составлять фразы, предложения с этим словом. Можно произносить вслух или записывать. Данный подход считается наиболее эффективным, так как данная информация откладывается в долгосрочную память, а значит быстро не забывается.

Задача

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

Задачи которые должна решить данная разработка:

  1. Изучение новых английских слов, повторение старых.

  2. Для ребенка повысить навык скорости печати на клавиатуре.

  3. Сделать интересную задачу в надежде что пригодится не только мне.

Действия

Мой родной язык программирования - C#, поэтому он и выбран для разработки. Графическая среда - WPF. Задумка реализации следующая (не новая): В центре игрового поля располагается планета Земля. С разных сторон (игра в 2D-пространстве) по очереди к Земле летят космические корабли намереваясь уничтожить родную нам планету. Чтобы не допустить столь неподходящего для нас варианта мы будем отбиваться от вражеских захватчиков. У каждого корабля есть подсказка на русском языке, а нам нужно ввести в поле ввода английское соответствующее слово. Ввод правильного слова гарантирует уничтожение врага. Чем больше врагов уничтожено, тем больше набранных очков. Список необходимых для реализации фич:

  1. Игровое поле представляет собой форму круга и расположено в центре главного окна приложения.

    X_{центра} = \frac{\text{ширина окна}}{2}Y_{центра} = \frac{\text{высота окна}}{2} = R_{\text{игрового поля}}

  2. Центр игрового поля - изображение планеты. Это цель для вражеских кораблей. Это место вылета снарядов выпускаемых по кораблям.

  3. Точка появления вражеского корабля - край игрового поля представляющего собой круг. Значит точка появления корабля лежит на окружности, у которой центр совпадает с центром игрового поля (координаты известны), а также известен радиус - это радиус игрового поля. Остается только случайным образом задать угол появления корабля от 0 до 360 градусов. Поиск точки расположения корабля сводится к поиску координат точки на окружности с известным центром, радиусом и углом.

  4. У каждого корабля есть своя скорость - количество пикселей которое проходит корабль за 1 тик времени. За каждый тик времени дистанция корабля до цели сокращается на полученное количество пикселей.

  5. Объект корабля представляет собой изображение корабля, текст подсказки на русском языке снизу изображения и текст подсказки на английском языке сверху изображения.

  6. Изображение корабля зависит от длины искомого слова. Чем длиннее слово тем больше должен быть корабль (в данный момент изображение разных типов кораблей одного размера, поэтому самый мощный корабль может выглядеть не самым устрашающим).

  7. Текст подсказки на русском языке представляет собой слово или фразу с помощью которого/которой игрок отгадывает слово.

  8. Текст подсказки на английском языке необходим на случай когда игрок не знает этого слова или забыл его. Текст подсказки при появлении корабля скрыт символами '-', что позволяет игроку узнать длину искомого слова. При движении корабля происходит расчет процента пройденного пути от которого рассчитывается сколько символов нужно открыть в искомом слове (стараемся научить игрока словам, а не хотим его пройгрыша). Если игрок не знает слова, то оно постепенно откроется полностью при подлете к планете.

  9. В центре игрового поля поверх планеты расположено поле ввода для ответов. Игрок пишет слова для уничтожения кораблей.

  10. В момент нажатия клавиши 'Enter' происходит запуск ракеты. В случае ввода неправильного слова ракета летит мимо - поиск угла полета ракеты происходит наугад от 0 до 360 градусов (можно было еще добавить ограничение для полета в сторону корабля +- 10 градусов). В момент пересечения ракеты края игрового поля объект ракеты уничтожается. В случае ввода правильного слова ракета летит в направлении корабля (это угол полета корабля + 180 градусов). В момент когда пройденное ракетой расстояние больше или равно оставшемуся кораблю до цели расстоянию происходит "взрыв" корабля - изменение изображения корабля на анимацию взрыва.

  11. В нижнем левом углу окна расположен счетчик уничтоженных кораблей. Счетчик добавляет плюс один в момент уничтожения корабля.

  12. В игре задумано 3 уровня сложности: начинающий, опытный, продвинутый. Уровни отличаются сложностью слов. Слова выбираются наугад из соответствующего словаря.

  13. В верхнем левом углу окна расположены 3 кнопки начала игры (для каждого кровня сложности).

  14. В приложении сделано 3 словаря: один для каждого уровня сложности. Словари в данный момент составлены из 1000 самых важных слов английского языка.

  15. В правом верхнем углу окна расположена таблица рекордов. Таблица состоит из 3 частей (для каждого кровня сложности).

  16. Сохраненные данные таблицы рекордов хранятся в реестре операционной системы.

  17. Для красоты на карту игрового поля добавлено изображение звезды меняющей координаты каждые 2 секунды.

Результат

Дочь довольна, запускает эту игру. На некоторое время этого ей хватит. Я запускаю игру чтобы вспомнить английские слова. Вижу, что если каждый день что-нибудь делать для изучения нового языка, то любые подобные действия пойдут на пользу.

Код программы

В моем GitHub