Блог Людмилы Третьяковой

Игра "Змейка"

2018-05-25 22:43

Следующий проект - небольшая игра "Змейка". Snake (Питон, Удав, Змейка и др.)— компьютерная игра, возникшая в середине или в конце 1970-х.

Игрок управляет длинным, тонким существом, напоминающим змею, которое ползает по плоскости, собирая еду (или другие предметы), избегая столкновения с собственным хвостом. Каждый раз, когда змея съедает кусок пищи, она становится длиннее, что постепенно усложняет игру. Игрок управляет направлением движения головы змеи (обычно 4 направления: вверх, вниз, влево, вправо), а хвост змеи движется следом. Игрок не может остановить движение змеи.

В игре предусмотрены следующие ограничения:

Игра "Змейка"

Этот проект достаточно легкий. Здесь я еще раз поработала с таймером, управлением с клавиатуры и написанием компонентов.

Ссылка на репозиторий

Поиграть

Книжный предсказатель

2018-05-15 22:43

Что бы мне сегодня почитать? Я довольно часто задаю сама себе этот ворос. Наверное, поэтому появилась идея "Книжного предсказателя", который предлагает 4 случайные книги для прочтения.

Книжный предсказатель Книжный предсказатель

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

Запросы к MediaWiki action API сформировать оказалось довольно просто. Для проекта потребовалось 2 вида запросов. Один для получения данных, второй - для получения картинки, находящейся в правом верхнем углу страницы. Сложность заключалась в том, что при обращении к странице часто в качестве ответа приходило сообщение на redirect к новой странице.

Например, для получения данных о писателе Терри Пратчетте в качестве title-параметра строки запроса можно указать <Терри Пратчетт> или <Пратчетт, Терри>. Только в первом случае в качестве ответа придет строка вида

#перенаправление [[Пратчетт, Терри]]

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

Для получения нового title-параметра я написала регулярное выражение:

const redirectReg = /#(?:перенаправление|ПЕРЕНАПРАВЛЕНИЕ|REDIRECT|redirect)\s*\[\[(.*)\]\]/g;

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

Сэр '''Те́ренс Дэ́вид Джон Пра́тчетт''' ({{lang-en|Sir Terence David John Pratchett}}), более известный как '''Те́рри Пра́тчетт''' ({{lang-en2|Terry Pratchett}}; {{д|28|04|1948|1}}, {{нп5|Беконсфилд|||Beaconsfield}}, [[Бакингемшир]], [[Великобритания]] — {{д|12|03|2015|1}}, Брод Чалк, графство [[Уилтшир]], Южная Англия, [[Великобритания]]) — [[Англичане|английский]] [[писатель]]. Наибольшую популярность ему принёс цикл [[Сатира|сатирического]] [[фэнтези]] про [[Плоский мир]] ({{lang-en|Discworld}}). Суммарный тираж его книг составил около 50 миллионов экземпляров. В феврале [[2009 год]]а Пратчетт был посвящён английской королевой [[Елизавета II|Елизаветой II]] в [[Рыцарь-бакалавр|рыцари-бакалавры]]<ref>[http://www.direct.gov.uk/en/Governmentcitizensandrights/UKgovernment/Honoursawardsandmedals/DG_067977?IdcService=GET_FILE&dID=180323&Rendition=Web New Year Honours list 2009.]{{ref-en}}</ref>, оставаясь при этом офицером [[Орден Британской империи|ордена Британской империи]].

Чтобы привести эту информацию к нормальному виду:

Сэр Те́ренс Дэ́вид Джон Пра́тчетт, более известный как Те́рри Пра́тчетт (28|04|1948, Беконсфилд, Бакингемшир, Великобритания — 12|03|2015, Брод Чалк, графство Уилтшир, Южная Англия, Великобритания) — английский писатель. Наибольшую популярность ему принёс цикл сатирического фэнтези про Плоский мир. Суммарный тираж его книг составил около 50 миллионов экземпляров. В феврале 2009 года Пратчетт был посвящён английской королевой Елизаветой II в рыцари-бакалавры, оставаясь при этом офицером ордена Британской империи.

потребовалось добавить регулярные выражения.

about = info.substring(info.search(startAboutSectionReg)).split(splitChar)[0]
        .replace(/(<!--.*-->)/g, '')
        .replace(/(<[^>]*>)/g, '')
        .replace(/{{нп[0-9]\|([^|]*)\|(?:[^}]*)}}/g,'$1')
        .replace(/\{\{[^|]*\|([0-9]*\|[0-9А-Яа-я]*\|[0-9]*)(?:\|[^}]*)?\}\}/g, '$1')
        .replace(/\|К\|[^|]*\|К/g, '')
        .replace(/\{\{[^}]*}}/g, '')
        .replace(/{{[^|]*\|/g, '')
        .replace(/\[\[([^|[\]]*)\|/g, '')
        .replace(/\[\[|\]\]/g, '')
        .replace(/\[http[^\]]*\]/g, '')
        .replace(/'''/g, '')
        .replace(/(''}})|}}/g, '')
        .replace(/\([;,.\s]*/g, '(')
        .replace(/\s*\(\)\s*/g, '')
        .replace(/\s*;\s*;/g, ';')

Ссылка на репозиторий

Может, немного погадаем?

Акварельный мир

2018-05-01 21:43

Идея подобого проекта появилась у меня давно. Акварельный мир - небольшой проект, в котором реализована совсем малая часть от первоначального замысла. Проект сделан именно таким образом потому, что для полной его реализации пришлось бы работать с сервером и по-другому обрабатывать видео. Я пока учу React + JavaScript, поэтому сделала именно так.

Что интересного для меня в этом проекте:

Примеры фотографий акварельного мира.

Акварельный мир Акварельный мир

Ссылка на репозиторий

Сделать фото

Игра "Захват цветового поля"

2018-04-23 21:43

Поле поделено на квадраты. Каждый квадрат окрашен в один из 6 цветов. Человек играет против компьютера. Цель игры - захватить как можно больше квадратов. На каждом игровом ходе выбирается цвет ячеек (кроме цвета противника). Все смежные ячейки выбранного цвета поглощаются и считаются захваченными. Цвет всех захваченных ячеек меняется на выбранный.

Игра "Захват цветового поля"

При написании данной игрушки много задач были реализованы с помощью css:

На стороне React-приложения интересно было делать:

Ссылка на репозиторий

Поиграть