Whirly ..

.. is a generalization of Sokoban game, .. is a root for derivation any #@WebSiteWithTitle@# game, .. where game is defined by rules, map, and objective: Map .. .. is a set of units which are cubes in 3D space. Maps have flat index: location of each unit is defined by x,y planar coordinates of the unit. Units can stack on each other, like wall on ground, target on ground, box on target, or hero on wall, ... Units have attributes: breed, activity, and motive. For example, in Sokoban, breeds are boxes, walls, grounds, ... Activity attribute can be active, passive, or static. Active unit is an unit which can moved by user's action. For example, hero in Sokoban. Passive unit is an unit which can be moved as a result of interaction. Like box in Sokoban. Active and passive units called dynamic. There can be only one dynamic unit in map's cell unit stack and it can be only on top of the stack. Motive can be a baton or goal. Motives used to define objective, like delivering baton-boxes to goals in Sokoban. Breeds Breed is a couple (race, color). Implemented races are: hero, box, target, htarget, wall, ground Colors are: 0, 1, 2, 3, ... denoted as x, a, b, c, d, ... 0 - grey (neutral, black, white, or colorless), 1 - blue, 2 - green, 3 - red, ... For example, hero_x is grey hero, box_a - blue box, ... There is only one race of active units, hero. Rules .. .. is an interaction matrix - matrix of implemented interactions between breeds: push - acting unit can push neighbour unit, actee, like in Sokoban, pull - acting unit pulls neighbour, swap - acting unit swaps with neighbour, leap - neigbour leaps over actor, jump - actor jumps over units Rules have attributes: deepness and flockness. Deepness .. .. is a parameter of interaction, DEEPNESS_LIMIT. It defines how far the inital hero's action can propagate through its neighbours. For examle, pushed box, can push second box if second box is on its way. If second box cannot push any other box, this means that deepness is 2. If 3 boxes can be pushed at once, deepness is 3. #@Sokoban@# is a game with deepness 1. Flockness .. .. is a parameter of interaction, herd_sense, which is a natural number n > = 0 ( 0 stands for no-herd-effect ). Flocked interaction involves neighbours. This means if neighbour touches moved unit before move began, then this neighbour will do the same move if no obstacles are on neighbour's path. Objective .. .. of the game is to "fill" goals with color-matching-batons: Precisely: if number of targets less than number of batons, then deliver color-matching batons to all targets. Otherwise: deliver all batons to color-matching targets. Color-Match-Games .. are such games where rules do not depend on pair of colors, but depend on outcome of their colors match and races. If one of units is gray or units have the same color, then units are "color-matching". Otherwise, they are not color-matching. (This is a match based on "wearing" filter-glasses with own color.) Not all Whirly games are "Color-Match-Games". This term is only for classification. There is no "Color-Match" property to control application behavior.

Features

D u a l G a m e s Two games G, H called co-games if they have equal set of legal positions and 1. for each move a - b in G, there exists move b - a in H and vice versa, 2. there is one-to-one correspondence g |-> h between actions g, h such h results in co-move of g. Examples: #@Sokoban@# and Co-Sokoban. #@PullPush@# and #@Co-PullPush@#: pull and push, left-move and right-move are co-actions. Path uullURdl and ruRUrrdd are copaths. Copath of solution is a solution of cogame. Finding longest departure from given position in co-game helps to construct a map leading to given position in direct game. #@Doubleban@#, #@Colortrain@#, and #@Monkeyban@# have no implemented co-games.

Guide Beginnning

#@WebSiteWithTitle@#: Version: #@version@# Date: #@date@# Copyright: #@copyright@# EMail: #@email@#
When JS finds this token, #@title@# , then JS will make this div visible.
This page won't display if no JavaScript language enabled in your browser. To display this page, turn JavaScript on.