Игра Маджонг | Mahjong game
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.

118 lines
4.0KB

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