МЕХаника МАджонга
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

152 lines
4.6KB

  1. const ЗАДЕРЖКА = 100;
  2. // // // //
  3. УведомитьОРезультатеЕслиКонец = мир =>
  4. {
  5. if (мир.количествоХодовВМаджонге != 0)
  6. {
  7. return;
  8. }
  9. var фишкиОстались = Object.keys(мир.индексыФишекМаджонга).length > 0;
  10. if (фишкиОстались)
  11. {
  12. мир.уведомить("поражение в маджонге");
  13. }
  14. else
  15. {
  16. мир.уведомить("победа в маджонге");
  17. }
  18. };
  19. // // // //
  20. ПодсчитатьКоличествоХодовВМаджонге = мир =>
  21. {
  22. var номера = мир.доступныеДляВыбораНомераФишекМаджонга;
  23. var фишки = мир.фишкиМаджонга;
  24. var ходов = 0;
  25. for (var н0 in номера)
  26. {
  27. н0 = Number(н0);
  28. // Исключаем уже просмотренные номера.
  29. for (var н1 = н0 + 1; н1 < номера.length; ++н1)
  30. {
  31. var номер0 = номера[н0];
  32. var номер1 = номера[н1];
  33. var группа0 = фишки[номер0]["🚩"];
  34. var группа1 = фишки[номер1]["🚩"];
  35. if (группа0 == группа1)
  36. {
  37. ++ходов;
  38. }
  39. }
  40. }
  41. мир.количествоХодовВМаджонге = ходов;
  42. мир.уведомить("изменили количество ходов в маджонге");
  43. };
  44. // // // //
  45. СобратьДоступныеДляВыбораНомераФишекМаджонга = мир =>
  46. {
  47. var индексы = мир.индексыФишекМаджонга;
  48. var номера = [];
  49. for (индекс in индексы)
  50. {
  51. if (фишкуМаджонгаМожноВыбрать(индексы, индекс))
  52. {
  53. var номер = индексы[индекс];
  54. номера.push(номер);
  55. }
  56. }
  57. мир.доступныеДляВыбораНомераФишекМаджонга = номера;
  58. };
  59. // // // //
  60. ОчиститьИндексыФишекМаджонгаОтУбранных = мир =>
  61. {
  62. for (var номер in мир.убранныеФишкиМаджонга)
  63. {
  64. var н = мир.убранныеФишкиМаджонга[номер];
  65. var позиция = мир.фишкиМаджонга[н]["📍"];
  66. var индекс = индексПозицииФишкиМаджонга(позиция);
  67. delete мир.индексыФишекМаджонга[индекс];
  68. }
  69. };
  70. // // // //
  71. УбратьВыбраннуюПаруФишекМаджонгаСЗадержкой = мир =>
  72. {
  73. setTimeout(
  74. function() {
  75. мир.убранныеФишкиМаджонга = мир.выбранныеФишкиМаджонга.slice();
  76. мир.выбранныеФишкиМаджонга = [];
  77. мир.уведомить("изменили выбранные фишки маджонга");
  78. мир.уведомить("убрали фишки маджонга");
  79. },
  80. мир.задержкаУбиранияФишекМаджонга
  81. );
  82. };
  83. // // // //
  84. ИсключитьИзВыбранныхФишекМаджонгаПервую = мир =>
  85. {
  86. мир.выбранныеФишкиМаджонга.shift();
  87. мир.уведомить("изменили выбранные фишки маджонга");
  88. };
  89. // // // //
  90. СравнитьПаруВыбранныхФишекМаджонга = мир =>
  91. {
  92. // Удостоверяемся в наличии двух фишек.
  93. if (мир.выбранныеФишкиМаджонга.length != 2)
  94. {
  95. return;
  96. }
  97. var н1 = мир.выбранныеФишкиМаджонга[0];
  98. var н2 = мир.выбранныеФишкиМаджонга[1];
  99. var г1 = мир.фишкиМаджонга[н1]["🚩"];
  100. var г2 = мир.фишкиМаджонга[н2]["🚩"];
  101. if (г1 == г2)
  102. {
  103. мир.уведомить("выбрали пару фишек маджонга одной группы");
  104. }
  105. else
  106. {
  107. мир.уведомить("выбрали пару фишек маджонга разных групп");
  108. }
  109. };
  110. // // // //
  111. ПодготовитьМеханикуМаджонга = мир =>
  112. {
  113. мир.выбранныеФишкиМаджонга = [];
  114. мир.задержкаУбиранияФишекМаджонга = ЗАДЕРЖКА;
  115. };