Текстовая JS игра "Русская рулетка"

А давай-ка создадим простейшую текстовую игру "Русская Рулетка", в которой будут 2 игрока - человек и компьютер на Javascript. Тут надо будет выбрать число от 1 до 6 - и если оно совпадет с числом, под номером которого лежит условный патрон, то произойдет выстрел и игра будет закончена.
Смысл игры - продержаться живым дольше соперника....
Я уже написал код, потому предлагаю разобраться с ним....

Как создать переменную в JavaScript

Для начала можно определить переменные (естественно, предварительно открыв <script>), которыми будем оперировать всю дорогу. Итак, сперва нам понадобится:

  • переменная n, которая будет считать количество сыгранных раундов
  • comp - число, которое загадывает компьютер
  • igrok - число, которое загадывает игрок
  • random - пуля игрока в конкретном раунде
  • comprandom - пуля компьютера в конкретном раунде.

В Javascript переменные задаются командой var. Определить их значение можно сразу. Например, var n = 0. Или же, если это пока не нужно, можно переменную просто обозначить (Например, var comp;)

Таким образом, врхушка кода будет выглядеть примерно так: (для простоты восприятия, в комментариях // описываю каждое действие еще раз:

<script>
//используются переменные
var n = 0; //количество раундов
var comp; //число загадывает компьютер
var igrok; //число загадывает игрок
var random; //где находится пуля для игрока
var comprandom; //где находится пуля для компьютера

Генератор случайных чисел в JavaScript

Определившись с основными переменными, займемся рандомизатором (генератором случайных чисел), который может быть описан через функцию. К примеру, назовем ее getRandomInt, которая возвращает значение Math.floor(Math.random() * (max - min)) + min - это неплохая формула для выбора случайного числа.

Выглядеть все это будет таким образом:

function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}

При том, важно помнить, что в этой формуле задается диапазон чисел от и до, но чтобы генератор мог также выбрать максимальное число, max должен быть на 1 больше этого максимального числа, то есть, если надо загадать число от 1 до 100, то значение параметров функции function getRandomInt(min, max) будет  getRandomInt(1, 101)

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

Циклы do...while в JavaScript

В нашем проекте играть можно бесконечно до тех пор, пока игрок не откажется от этого. Для этого создадим цикл do...while с запросом у игрока, хочет-ли он играть дельше. Для этого введем еще одну переменную da и при помощи команды prompt узнаем:

do {
var da = prompt('Сыграем? 1= да, остальное = нет'); //будем играть или нет

//потом будем работать здесь

} while(da==1);

То есть, цикл выше будет работать до тех пор, пока da равно 1. В случае, если игрок больше не хочет играть, можно после этого кода добавить сообщение о проведенных раундах и завершить скрипт.

Выведем это при помощи сообщения alert

alert('Раундов сыграно: ' +n);
</script>

Отсюда и далее, будем работать в теле цикла, где стоит комментарий //потом будем работать здесь.

Операторы ветвления if, else, else if

Итак, мы определились с вопросом, хочет-ли игрок сыграть еще. И если его ответ будет ДА (1), то будет запущена сама игра. В противном случае, будет выведено сообщение о количестве сыгранных раундов и скрипт завершит свою работу.

Спросить-то игрока о желании играть - мы спросили, но программа пока еще не знает, как обработать его реакцию. Тут нам поможет оператор if (если). Выглядит это так....

if (da==1){ //если игрок ввел 1 - играем, в остальных случаях - нет
n=0;

do{//тут будет дальнейший код

} while ((igrok!=random)||(comp!=comprandom));

}
else {break};

Переведем на человеческий: если переменная da равна 1, количество раундов задается равным 0 и будет начато выполнение цикла, которое будет продолжаться до тех пор, пока переменные igrok и random или(||) comp и random не равны(!=). Иначе (else) программа будет завершаться.

Сама игра текстовая "Русская рулетка"

Мы уже определились со всеми основными переменными и циклами, спросили у игрока, хочет-ли он играть и дали программе выполнять задание до тех пор, пока игрок или компьютер не застрелятся или игрок не откажется играть дальше.Самое время дать инструкции программе по непосредственным действиям:

Переместимся в тело цикла, а именно туда, где //тут будет дальнейший код

Первым делом, нам необходимо спросить игрока, откуда он собирается стрелять:

var igrok = parseInt(prompt('Выбери от 1 до 6')); //игрок должен ввести значение от 1 до 6

Кодом выше, мы даем команду программе присвоить переменной число, которое введет игрок в окне prompt при помощи команды parseInt (именно она считывает числа)

Теперь определим место хранения пули в револьвере игрока. Это делаем при помощи функции, параметры которой мы определили в самом начале:

random = getRandomInt(1, 7);

Но что если игрок-то у нас хитропопый и нарушает правила, вводя не число от 1 до 6, а другие символы или числа, нарушая установленные правила? Для предотвращения этого, следует выполнить проверку:

if((isNaN(igrok)||(igrok>6)||(igrok<1))) { //проверка корректности ввода чисел игроком
alert('Ствол разорвало!');
break;
}

И если переменная igrok - isNaN (не число) или (||) больше 6 или меньше 1, то будет выведено сообщение, что ствол револьвера разорвало :), а цикл прервется (break)

Но если игрок честен и ввел действительно то, что нам нужно, начнем выполнять сравнения:

else if (igrok == random){ //если загаданное число = месту хранения, то сообщение что застрелились. Игра окончена
n++;
alert('Ты застрелился. Раундов сыграно: ' +n);
break;
}

Тут мы видим: иначе если( переменная igrok равна переменной random, то есть игрок угадал и застрелился);

увеличим количество раундов на 1 (n++. "++" означает увеличение на 1);

выводим сообщение "Ты застрелился. Раундов сыграно: +n".

+n добавит в выводимом в alert сообщении к строке значение переменной n, то есть, количество раундов.

Но что если игрок не угадал номер пули и не застрелился?

else if(igrok != random){ //если числа не совпали, выводим результат
alert('Ты пока жив, ведь выбрал '+igrok+', а Пуля была под номером ' +random+ '. Стреляется противник...');
n++;

В переводе это выглядит так:

иначе если (переменная igrok не равна переменной random), выведем сообщение, которое говорит, какое число было выбрано и где лежала пуля.

Добавляем количество сыгранных раундов на 1.

Теперь пришло время стрелять противнику. Аналогичным образом решаются и действия компьютера, за исключением что он не может жульничать и всегда даст то, что от него просят (в нашем случае, числа от 1 до 6)

comprandom = getRandomInt(1, 7);
comp = getRandomInt(1, 7);

Тут мы определяем место хранения пули компьютера и что он загадал.

Все что нам осталось -  дать указания для сверки случайных чисел, которые загадал компьютер и где была его "пуля" и вывести сообщения:

if(comp == comprandom){//если компьютер застрелился
alert('Противник мертв. Пуля была под номером ' + comprandom + '. Ты победил! Раундов сыграно: ' +n);
break
}
else if (comp !=comprandom){ //компьютер промахнулся
alert('Повезло обоим. Противник выбрал '+ comp + ', а пуля была под номером '+comprandom+'. Раундов сыграно: ' +n);
}
}

На этом все - наша простенькая текстовая игра в "русскую рулетку" написана. По ссылке ниже можно скачать весь код или же перейти по ней и попробовать сыграть. JS русская рулетка текстовая - играть или скачать файл

В дальнейшем мы будем перерабатывать, изменять и улучшать игрушку. Возможно, переделаем ее в более  интересный графический формат, но это потом...