Инструкции по выполнению шага
Игра продолжает обрастать новыми фишками. На этот раз давайте добавим в неё доску со статистиками игры. Согласитесь, когда вы видите результат ваших игр, то игровой процесс получается более азартным: есть стремление побить свой прошлый рекорд. На этом шаге мы с вами добавим рядом с холстом игры несколько чисел, которые будут отражать способности игрока:
Current
– текущее число успешно отбитых столкновений с мячиком;Best score
– максимальное число успешно отбитых столкновений с мячиком без проигрышей за всё время;Average
– среднее число успешно отбитых столкновений с мячиком за все игры.
Данные характеристики игры можно добавить на главную страницу с помощью HTML элементов, которые впоследствии нужно будет расположить в нужном месте при помощи CSS. Саму логику же реализуем при помощи скрипта на JavaScript.
Для начала давайте добавим в главный файл index.html
в элементе <body>
перед добавлением скриптов следующие строчки:
<!-- Начало места, которое мы изменяем -->
<img src="assets/background.jpg" id="background"></img>
<h1 class="score">
Current: <a>0</a><br />
Best score: <a>0</a><br />
Average: <a>0</a>
</h1>
<script src="js/render.js"></script>
<!-- Конец редактирования -->
Элемент <h1>
это элемент заголовка – текст будет отображаться большим. Существуют также и заголовки <h2>
, <h3>
, <h4>
, <h5>
. Каждый из них как в матрёшке имеет все меньший размер текста. Для разнообразия добавим вместо уникального идентификатора, как мы уже делали ранее на Шаге 0, имя класса при помощи атрибута class
. Имя класса, в отличие от значения уникального идентификатора может повторяться внутри одного HTML файла. Зачастую рекомендуется использовать именно атрибуты классов, чтобы обращаться к конкретным элементам в CSS или JavaScript. Внутри так же испо льзуются элементы <a>
и <br>
. Последний позволяет сделать перенос строки при отображении текста в браузере. А первый чаще всего используется для добавления гиперссылок, однако в данном конкретном случае мы будем его использовать в качестве маркера. При написании JavaScript кода это позволит изменять конкретное значение содержимого ссылки.
После добавления элемента с текстом рекордов, нужно его правильно расположить на главной странице. Для этого добавим следующие строчки в конец нашего CSS файла style.css
:
Следующая часть добавляется в конец файла style.css
.
.score {
color: white;
position: fixed;
left: 100px;
bottom: 35px;
}
Тут происходит обращение через селектор класса к HTML элементам с таким именем класса (score
). К ним применяется настройки цвета текста, фиксированного положения. После чего элементам задаются координаты от левого и нижнего краёв страницы.
Если вы теперь откроете главную страницу игры, то увидите следующую картину:
Доска рекордов теперь отображается на экране, но в процессе игры ничего не происходит. Всё потому, что у нас нет логики изменения чисел в элементе с оценками. Поэтому создадим в папке js новый скрипт scores.js
и не забудем его подгрузить в index.html
перед скриптом с движком:
<!-- Начало места, которое мы изменяем -->
<img src="assets/background.jpg" id="background"></img>
<script src="js/render.js"></script>
<script src="js/pause.js"></script>
<script src="js/controls.js"></script>
<script src="js/scores.js"></script>
<script src="js/engine.js"></script>
</body>
</html>
<!-- Конец редактирования -->
Вот так будет выглядеть наша папка проекта после создания файла scores.js
:
ping-pong
├── index.html
├── assets
│ ├── ball.png
│ ├── paddle.png
│ ├── background.jpg
│ └── style.css
└── js
├── render.js
├── engine.js
├── controls.js
├── pause.js
└── scores.js
В самом только что созданном файле создадим переменную-словарик scoreStats
аналогичную переменным ball
и rightPaddle
из render.js
:
Следующая часть кода добавляется в начало файла scores.js
.
var scoreStats = {
currentCombo: 0,
bestCombo: 0,
totalTries: 0,
mean: 0
};
Тут мы задали поля с начальными значениями в виде нулей. Текущее число отбитых столкновений хранится в поле currentCombo
, лучшее число отбитых столкновений – в поле bestCombo
. Для подсчёта среднего значения по всем играм нам нужно минимум два поля, это число сыгранных партий и собственно сама средняя оценка. В дальнейшем мы реализуем алгоритм, который позволит обновлять значение среднего по следующей рекуррентной формуле: