Перейти к основному содержимому

Работа с функциями

Перед тем как приступить к написанию сценария бота мы напишем несколько функций, которые будут осуществлять механику игры.

Основные функции игры

В папке src создайте файл responseCity.js. Здесь будут храниться основные функции игры, которые мы будем вызывать из сценария:

function responseCity(parseTree, keys, cities) {
var city = parseTree._City.name
var letter = city[city.length - 1]
var response = 0

keys.forEach(function(elem) {
if (cities[elem].value.name[0].toLowerCase() == letter) {
response = elem
}
})

if (response == 0) {
letter = city[city.length - 2]
keys.forEach(function(elem) {
if (cities[elem].value.name[0].toLowerCase() == letter) {
response = elem
}
})
}
return response
}

function findByName(city, keys, cities) {
var response = 0
var i = 0

keys.forEach(function(elem) {
if (cities[elem].value.name == city) {
response = i
}
i++
})

return response
}

function checkCity(parseTree, keys, cities) {
var city = parseTree._City.name
var response = false

keys.forEach(function(elem) {
if (cities[elem].value.name == city) {
response = true
}
})
return response;
}

function checkLetter(playerCity, botCity) {
var response = false
if ((playerCity[0].toLowerCase() == botCity[botCity.length - 1])
|| (playerCity[0].toLowerCase() == botCity[botCity.length - 2])) {
response = true
}
return response
}

function chooseRandCityKey(keys) {
var i = 0
keys.forEach(function(elem) {
i++
})
return $jsapi.random(i);
}

function isAFullNameOfCity() {
return $jsapi.context().parseTree._City.name.toUpperCase() == $jsapi.context().parseTree.text.toUpperCase();
}

В нашем проекте будем использовать системный модуль city/cities-ru.csv, в котором хранится список более 8500 городов. В дальнейшем рассмотрим подключение этого модуля в разделе Разработка сценария.

Каждый город представляет собой запись в следующем виде:

6556;Санкт-Петербург,Ленинград,Петербург,СПб,Питер,Петроград,Северная Пальмира,Северной Пальмире,Северная Столица,Северной Столице,город на Неве,город Петра,город Святого Петра,Санктпетербург,Санкт Петербург;
{
"name":"Санкт-Петербург",
"lat":59.93863,
"lon":30.31413,
"country":"RU",
"timezone":"Europe/Moscow",
"population":5028000,
"capital":"false",
"continent":"Europe"
}

Мы будем использовать только поля id и name.

подсказка

Описание функций

responseCity()

Функция responseCity() возвращает город, который начинается на последнюю букву введенного пользователем города. Если города на определенную букву закончились, то возвращаем город начинающийся с предпоследней буквы.

function responseCity(parseTree, keys, cities) {
// сохраняем введенный город
var city = parseTree._City.name
// берем последнюю букву города
var letter = city[city.length - 1]
// будем присваивать переменной ключ найденного города
var response = 0

/* пройдемся по элементам списка городов пока не найдем город,
который начинается на последнюю букву предыдущего города*/
keys.forEach(function(elem) {
if (cities[elem].value.name[0].toLowerCase() == letter) {
response = elem
}
})

/* если города, начинающиеся с определенной буквы закончились,
то используем вторую букву с конца */
if (response == 0) {
letter = city[city.length - 2]
keys.forEach(function(elem) {
if (cities[elem].value.name[0].toLowerCase() == letter) {
response = elem
}
})
}
return response
}

findByName()

Функция findByName() осуществляет поиск введенного города в списке городов по ключу.

/* будем вызывать эту функцию из сценария
для удаления введенного города из всего списка */
function findByName(city, keys, cities) {
// будем хранить ключ найденного города
var response = 0
var i = 0

// пройдемся по элементам списка городов пока не найдем введенный город
keys.forEach(function(elem) {
if (cities[elem].value.name == city) {
response = i
}
i++
})

return response
}

checkCity()

Функция checkCity() проверяет наличие введенного города в списке city/cities-ru.csv. Возвращает true или false.

function checkCity(parseTree, keys, cities) {
// сохраняем введенный город
var city = parseTree._City.name
var response = false

// пройдемся по элементам списка городов пока не найдем введенный город
keys.forEach(function(elem) {
if (cities[elem].value.name == city) {
response = true
}
})
return response;
}

checkLetter()

Функция checkLetter() предназначена для проверки совпадения первой буквы введенного пользователем города с последней или предпоследней буквой города, который ввел бот.

function checkLetter(playerCity, botCity) {
var response = false
/* выводим true, если первая буква введенного пользователем города
совпадает с последней буквой введенного ботом города */
if ((playerCity[0].toLowerCase() == botCity[botCity.length - 1])
|| (playerCity[0].toLowerCase() == botCity[botCity.length - 2])) {
response = true
}
return response
}

chooseRandCityKey()

Функция chooseRandCityKey() возвращает случайное значение ключа города. Вызывается из сценария, когда игру начинает бот.

function chooseRandCityKey(keys) {
return $jsapi.random(keys.length);
}

isAFullNameOfCity()

Функция isAFullNameOfCity() проверяет, ввел ли пользователь полное название города. Результатом функции будет true или false.

function isAFullNameOfCity() {
return $jsapi.context().parseTree._City.name.toUpperCase() == $jsapi.context().parseTree.text.toUpperCase();
}

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