Research portable Memory game | Исследовать портируемую игру Память
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

121 行
2.5KB

  1. #include <map>
  2. #include <string>
  3. #include "entities.h"
  4. ////////////////
  5. // Client initiated input
  6. ////////////////
  7. // Generate constant playfield
  8. memory_Context memory_generateConstPlayfield(
  9. memory_Context& c
  10. ) {
  11. std::map<int, int> idGroups = { };
  12. auto id = 0;
  13. for (auto gid = 0; gid < c.playfieldSize; ++gid) {
  14. idGroups[id] = gid;
  15. id += 1;
  16. idGroups[id] = gid;
  17. id += 1;
  18. }
  19. c.playfieldItems = idGroups;
  20. c.recentField = "playfieldItems";
  21. return c;
  22. }
  23. // Select item
  24. memory_Context memory_selectItem(
  25. memory_Context& c
  26. ) {
  27. if (
  28. c.selectedItems.size() == 2
  29. ) {
  30. c.selectedItems = [];
  31. c.selectedItems.append(c.selectedId);
  32. c.recentField = "selectedItems";
  33. return c;
  34. }
  35. ////////////////
  36. // System initiated reaction
  37. ////////////////
  38. // Deselect mismatched items
  39. //
  40. // Conditions:
  41. // 0. Two items has just been selected
  42. // 1. The same item has been selected twice
  43. // 1. Selected items are of different groups
  44. memory_Context memory_shouldDeselectMismatchedItems(
  45. memory_Context& c
  46. ) {
  47. if not (;
  48. c.recentField == "selectedItems" &&;
  49. c.selectedItems.size() == 2;
  50. ) {
  51. c.recentField = None;
  52. return c;
  53. if (
  54. c.selectedItems[0] == c.selectedItems[1]
  55. ) {
  56. c.mismatchedItems.clear();
  57. c.mismatchedItems.append(c.selectedItems[0]);
  58. c.recentField = "mismatchedItems";
  59. return c;
  60. if (
  61. c.playfieldItems[c.selectedItems[0]] != c.playfieldItems[c.selectedItems[1]]
  62. ) {
  63. c.mismatchedItems.clear();
  64. c.mismatchedItems.append(c.selectedItems[0]);
  65. c.mismatchedItems.append(c.selectedItems[1]);
  66. c.recentField = "mismatchedItems";
  67. return c;
  68. c.recentField = None;
  69. return c;
  70. }
  71. // Detect victory
  72. //
  73. // Conditions:
  74. // 1. Matching items have just been hidden and all items are hidden now
  75. memory_Context memory_shouldDetectVictory(
  76. memory_Context& c
  77. ) {
  78. if (
  79. c.recentField == "hiddenItems" &&
  80. c.hiddenItems.size() == len(c.playfieldItems)
  81. ) {
  82. c.victory = True;
  83. c.recentField = "victory";
  84. return c;
  85. c.recentField = None;
  86. return c;
  87. }
  88. // Hide matching selected items
  89. //
  90. // Conditions:
  91. // 1. Two items are selected and they are of the same group
  92. memory_Context memory_shouldHideMatchingItems(
  93. memory_Context& c
  94. ) {
  95. if (
  96. c.recentField == "selectedItems" &&
  97. c.selectedItems.size() == 2 &&
  98. c.playfieldItems[c.selectedItems[0]] == c.playfieldItems[c.selectedItems[1]]
  99. ) {
  100. c.hiddenItems.append(c.selectedItems[0]);
  101. c.hiddenItems.append(c.selectedItems[1]);
  102. c.recentField = "hiddenItems";
  103. return c;
  104. c.recentField = None;
  105. return c;
  106. }