БлогNot. Javascript: игра 24

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

Javascript: игра 24

Написал за часок с утра и похмелья эту игру, отбывая одно субботнее мероприятие. В принципе, она известна как "24", хотя в "Вики" не нашёл (в английской какой-то вариант с факториалами имеется).

Мы обойдёмся без факториалов, разрешив только 4 арифметических действия и круглые скобки. Компьютер задумывает 4 натуральных числа, а вы расставляете знаки и круглые скобки так, чтобы в результате решения примера получилось значение 24. Пример приведён при входе в игру.

Мне лично кажется, что это интереснее "пятнашек" да и всяких степеней двойки тоже.

В IE8 работать точно не будет, забыл я его особенности :)

Да, и я не знаю, что там делают по нажатию Enter все браузеры. Жалеем стариков, пользуемся мышкой :) Если добавить свистелок-перделок, двигалок, лупоглазок, из этой моей часовой работы можно сделать модную шнягу. А я лично хочу в горизонтальное положение, ту ж ночь не спал, обнаружив подозрительное щёлканье на стойке с "винтами" и сливая гигабайты в "секретное" хранилище :( У меня нет бабла на Raid 5 и кластера нет дома :(

В работе и исходник - ниже.

Извините, для работы приложения нужен включённый Javascript
Ваши числа:

<script type="text/javascript">
var cnt=0;
var numbers;
var help = 
    '<font size="2">'+"\n"+
     'Введите выражение с этими числами, результатом которого будет <font color="red">24</font>'+"\n"+
     '<br>Разрешены только операции *, /, +, - и круглые скобки ()'+"\n"+
     '<br>Числа можно менять местами как угодно, например:'+"\n"+
     '<br>Числа <font color="red">1 8 4 1</font>'+"\n"+
     '<br>Решение <font color="red">(8-1-1)*4</font>'+"\n"+
    '</font>';

function eval24(numbers, input) { //оценка и проверка правильности решения
 var invalidChars = /[^\d\+\*\/\s-\(\)]/;
 
 var validNums = function(str) {
  var mnums = numbers.slice();
  mnums.sort();
  return str.replace(/[^\d\s]/g, " ")
   .trim()
   .split(/\s+/)
   .map(function(n) { return parseInt(n, 10); })
   .sort()
   .every(function(v, i) { return v === mnums[i]; });
 };
 
 var validEval = function(input) {
  try {
   return eval(input);
  } 
  catch (e) {
   return {error: e.toString()};
  }
 };
 
 if (input.trim() === "") return "Нужно что-нибудь ввести :)";
 if (input.match(invalidChars)) return "Найдены недопустимые символы во вводе; разрешены только + - * / ( ) и числа";
 if (!validNums(input)) return "Не использованы нужные числа, попробуйте ещё раз";
 var calc = validEval(input);
 if (typeof(calc) !== 'number') return "Не удалось вычислить выражение, попробуйте ещё раз";
 if (calc !== 24) 
  return "Неверный ответ: " + 
          String(isInteger(calc)?calc:(''+calc).substring(0,8)+'...') + 
          "; попробуйте ещё раз";
 game24();
 return input + " = 24! Поздравляю! Ваш счёт: "+(++cnt);
};
 

function game24 () { //основная функция
 numbers = [1, 2, 3, 4].map(function() {
   return Math.floor(Math.random() * 8 + 1);
 });
 document.form24.text24.value = '';
 document.getElementById('res24').innerHTML = help;
 document.getElementById('data24').innerHTML = numbers.join(" ");
}

function isInteger(num) { //хитрая проверка на целое число
 return (num ^ 0) === num;
}
 
window.onload = game24;
</script>
<noscript><div align="center">Извините, для работы приложения нужен включённый Javascript</div></noscript>

<table align="center" width="600" cellpadding="0" cellspacing="4" border="0">
 <tr>
  <td align="center" valign="middle">
   <form name="form24" method="post" onsubmit="return false;">
     Ваши числа: <span id="data24"></span></font></p>
     <input type="text" name="text24" size="20" maxlength="18" value="" />
     <input type="button" name="action1" value="Выполнить" 
      onclick="document.getElementById('res24').innerHTML = 
       eval24(numbers, document.form24.text24.value);return false;" />
   </form>
  </td>
 </tr>
 <tr>
  <td align="center" valign="top">
   <div id = "res24"></div>
  </td>
 </tr>
</table>

Не предложенные числа использовать по правилам нельзя, а также использовать не все числа из предложенных.


теги: javascript числа игра

комментарии (0)

23.04.2016, 20:54; рейтинг: 4553

  свежие записипоиск по блогукомментироватьстатистика

Наверх Яндекс.Метрика
© PerS
вход