|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- #include <map>
- #include <string>
- #include "entities.h"
-
- ////////////////
- // Client initiated input
- ////////////////
-
- // Generate constant playfield
- memory_Context memory_generateConstPlayfield(
- memory_Context& c
- ) {
- std::map<int, int> idGroups = { };
- auto id = 0;
- for (auto gid = 0; gid < c.playfieldSize; ++gid) {
- idGroups[id] = gid;
- id += 1;
- idGroups[id] = gid;
- id += 1;
- }
- c.playfieldItems = idGroups;
- c.recentField = "playfieldItems";
- return c;
- }
-
- // Select item
-
- memory_Context memory_selectItem(
- memory_Context& c
- ) {
- if (
- c.selectedItems.size() == 2
- ) {
- c.selectedItems = [];
- c.selectedItems.append(c.selectedId);
- c.recentField = "selectedItems";
- return c;
- }
-
- ////////////////
- // System initiated reaction
- ////////////////
-
- // Deselect mismatched items
- //
- // Conditions:
- // 0. Two items has just been selected
- // 1. The same item has been selected twice
- // 1. Selected items are of different groups
-
-
-
- memory_Context memory_shouldDeselectMismatchedItems(
- memory_Context& c
- ) {
- if not (;
- c.recentField == "selectedItems" &&;
- c.selectedItems.size() == 2;
- ) {
- c.recentField = None;
- return c;
- if (
- c.selectedItems[0] == c.selectedItems[1]
- ) {
- c.mismatchedItems.clear();
- c.mismatchedItems.append(c.selectedItems[0]);
- c.recentField = "mismatchedItems";
- return c;
- if (
- c.playfieldItems[c.selectedItems[0]] != c.playfieldItems[c.selectedItems[1]]
- ) {
- c.mismatchedItems.clear();
- c.mismatchedItems.append(c.selectedItems[0]);
- c.mismatchedItems.append(c.selectedItems[1]);
- c.recentField = "mismatchedItems";
- return c;
- c.recentField = None;
- return c;
- }
-
- // Detect victory
- //
- // Conditions:
- // 1. Matching items have just been hidden and all items are hidden now
-
- memory_Context memory_shouldDetectVictory(
- memory_Context& c
- ) {
- if (
- c.recentField == "hiddenItems" &&
- c.hiddenItems.size() == len(c.playfieldItems)
- ) {
- c.victory = True;
- c.recentField = "victory";
- return c;
- c.recentField = None;
- return c;
- }
-
- // Hide matching selected items
- //
- // Conditions:
- // 1. Two items are selected and they are of the same group
-
- memory_Context memory_shouldHideMatchingItems(
- memory_Context& c
- ) {
- if (
- c.recentField == "selectedItems" &&
- c.selectedItems.size() == 2 &&
- c.playfieldItems[c.selectedItems[0]] == c.playfieldItems[c.selectedItems[1]]
- ) {
- c.hiddenItems.append(c.selectedItems[0]);
- c.hiddenItems.append(c.selectedItems[1]);
- c.recentField = "hiddenItems";
- return c;
- c.recentField = None;
- return c;
- }
-
|