Создайте рефлекс-игру с помощью JavaScript
Рефлекторная игра - это простая забавная игра, в которой измеряется скорость вашей реакции. Это довольно просто сделать и понять. Мы разработаем рефлекторную игру, которая рассчитает вашу скорость реакции. Правила просты: просто нажмите кнопку остановки, когда вы увидите изменение цвета фона, и время, которое вы потратили на это, будет вашей скоростью.
Игра предоставляет вам на выбор множество цветов. Более быстрый ответ покажет лучшую похвалу, чем более медленный.
Итак, давайте начнем с базовой HTML-разметки.
Макет HTML:
Макет HTML определяет, как будет выглядеть ваша страница. Эта часть полностью зависит от вашего творчества. Просто не забудьте создать пустой белый фон, чтобы изменения были видны.
Другие необходимые элементы:
- Заголовок, содержащий название игры и некоторую другую информацию.
- Элемент формы, который может включать в себя вариант выбора из нижеприведенного. Это необходимо для того, чтобы пользователь мог выбрать из множества вариантов тот конкретный цвет, который ему нужен.
- Две кнопки: одна для запуска игры, а другая для нажатия кнопки остановки.
Код:
< html > < head > < title >Reflex Game</ title > </ head > < body > < center >< strong > < h1 style = "color: black" >Reflex Game</ h1 > </ strong ></ center > < center > < h2 >Test your Response time!</ h2 > </ center > < center > < h3 >How To Play</ h3 > < p >Click on "Start" first, and wait until the background color changes. As soon as it changes, hit "stop!" </ p > < br > < form name = "response" > Change background color to: < select name = "bgColorChange" > < option selected>deeppink < option >aliceblue < option >crimson < option >darkkhaki < option >cadetblue < option >darkorchid < option >coral < option >chocolate < option >mediumslateblue < option >tomato < option >darkslategray < option >limegreen < option >cornflowerblue < option >darkolivegreen </ select > < br > < br > < input type = "button" class = "btn" value = "Start" onClick = "startit()" > < input type = "button" class = "btn" value = "Stop" onClick = "stopTest()" > </ form > </ center > </ body > </ html > |
Примечание:
Это самый простой макет HTML. Вы можете добавить или удалить в него любые другие части.
Стиль CSS:
Вы можете добавить свой собственный CSS везде, где это возможно. Здесь я просто добавлю к кнопкам базовый CSS.
Код:
< style > input[type=button] { background-color: #77797c; border: none; border-radius: 10%; color: white; padding: 16px 32px; text-decoration: none; margin: 4px 2px; cursor: pointer; } </ style > |
Основная логика игры:
Основная логика игры определяется с помощью JavaScript. Используемый здесь JavaScript также довольно прост, и для понимания этого будет достаточно лишь небольшого знания JavaScript.
Мы сделаем 5 основных функций для работы этой игры:
Шаг 1:
Запускаем игру. Для этой функции потребуется кнопка запуска. Эта функция будет выполнена после того, как пользователь нажмет кнопку «Пуск».
function startTest() { document.body.style.background=document.response.bgColorChange.options[ document.response.bgColorChange.selectedIndex].text; bgChangeStarted= true ; startTime= new Date(); } |
Шаг 2:
Следующая функция будет функцией замечание (). Эта функция будет включать примечания, которые игра покажет по завершении игры.
function remark(responseTime) { var responseString= "" ; if (responseTime < 0.20) responseString= "Well done!" ; if (responseTime >= 0.30 && responseTime < 0.20) responseString= "Nice!" ; if (responseTime >=0.40 && responseTime < 0.30) responseString= "Could be better..." ; if (responseTime >=0.50 && responseTime < 0.60) responseString= "Keep practicing!" ; if (responseTime >=0.60 && responseTime < 1) responseString= "Have you been drinking?" ; if (responseTime >=1) responseString= "Did you fall asleep?" ; return responseString; } |
Шаг 3:
Следующая функция stopTest () будет выполнена при нажатии кнопки остановки. При нажатии кнопки остановки может быть выполнено 3 варианта:
Во-первых, успешное завершение с указанием времени отклика.
Во-вторых, если пользователь нажимает кнопку остановки перед нажатием кнопки запуска.
В-третьих, если пользователь нажимает кнопку остановки до изменения цвета.
function stopTest() { if (bgChangeStarted) { endTime= new Date(); var responseTime=(endTime.getTime()-startTime.getTime())/1000; document.body.style.background= "white" ; alert( "Your response time is: " + responseTime + " seconds " + "
" + remark(responseTime)); startPressed= false ; bgChangeStarted= false ; } else { if (!startPressed) { alert( "press start first to start test" ); } else { clearTimeout(timerID); startPressed= false ; alert( "cheater! you pressed too early!" ); } } } |
Шаг 4:
Четвертая функция - получить случайное время отклика на смену фона.
function randNumber() { randSeed = (randMULTIPLIER * randSeed + randINCREMENT) % (1 << 31); return ((randSeed >> 15) & 0x7fff) / 32767; } |
Заключительный этап:
Последняя функция - убедиться, что кнопка пуска не нажимается дважды.
function startit() { if (startPressed) { alert( "Already started. Press stop to stop" ); return ; } else { startPressed= true ; timerID=setTimeout( 'startTest()' , 6000*randNumber()); } } |
Финальная демонстрация и полный код:
<!DOCTYPE html> < html > < head > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < meta charset = "utf-8" > < style > input[type=button]{ background-color: #77797c; border: none; border-radius: 10%; color: white; padding: 16px 32px; text-decoration: none; margin: 4px 2px; cursor: pointer; } </ style > < title >Reflex Game</ title > </ head > < body >< script language = "JavaScript" > var startTime=new Date(); var endTime=new Date(); var startPressed=false; var bgChangeStarted=false; var maxWait=20; var timerID; function startTest() { document.body.style.background=document.response.bgColorChange.options[ document.response.bgColorChange.selectedIndex].text; bgChangeStarted=true; startTime=new Date(); } function remark(responseTime) { var responseString=""; if (responseTime < 0.20 ) responseString = "Well done!" ; if (responseTime >= 0.30 && responseTime < 0.20 ) responseString = "Nice!" ; if (responseTime >=0.40 && responseTime < 0.30 ) responseString = "Could be better..." ; if (responseTime >=0.50 && responseTime < 0.60 ) responseString = "Keep practicing!" ; if (responseTime >=0.60 && responseTime < 1 ) responseString = "Have you been drinking?" ; if (responseTime >=1) responseString="Did you fall asleep?"; return responseString; } function stopTest() { if(bgChangeStarted) { endTime=new Date(); var responseTime=(endTime.getTime()-startTime.getTime())/1000; document.body.style.background="white"; alert("Your response time is: " + responseTime + " seconds " + "
" + remark(responseTime)); startPressed=false; bgChangeStarted=false; } else { if (!startPressed) { alert("press start first to start test"); } else { clearTimeout(timerID); startPressed=false; alert("cheater! you pressed too early!"); } } } var randMULTIPLIER=0x015a4e35; var randINCREMENT=1; var today=new Date(); var randSeed=today.getSeconds(); function randNumber() { randSeed = (randMULTIPLIER * randSeed + randINCREMENT) % (1 << 31 ); return((randSeed >> 15) & 0x7fff) / 32767; } function startit() { if(startPressed) { alert("Already started. Press stop to stop"); return; } else { startPressed=true; timerID=setTimeout('startTest()', 6000*randNumber()); } } // --> </ script > < center >< strong >< h1 style = "color: black" >Reflex Game</ h1 ></ center ></ strong > < center > < h2 >Test your Response time!</ h2 > </ center > < center >< h3 >How To Play</ h3 > < p >Click on "Start" first, and wait until the background color changes. As soon as it changes, hit "stop!" </ p > < br > < form name = "response" > Change background color to: < select name = "bgColorChange" > < option selected>deeppink < option >aliceblue < option >crimson < option >darkkhaki < option >cadetblue < option >darkorchid < option >coral < option >chocolate < option >mediumslateblue < option >tomato < option >darkslategray < option >limegreen < option >cornflowerblue < option >darkolivegreen </ select >< br > < br > < input type = "button" class = "btn" value = "Start" onClick = "startit()" > < input type = "button" class = "btn" value = "Stop" onClick = "stopTest()" > </ form > </ center > </ body > </ html > |
Выход: