Meme Index - 4x4 Chimple Game
Introduction
A game on a three-by-three nine-square grid, with pieces only at the corners has fewer moving parts than the 4x4 game, obviously, and may make it easier to understand. I want to lay out all of the deployment descriptors for this game.
The Game
![]() |
![]() |
|
![]() |
||
![]() |
![]() |
![]() |
fig. 1.1. Starting Board for Chimple
![]() |
![]() |
|
![]() |
![]() |
![]() |
![]() |
fig. 1.2. Movement of Pieces
![]() |
![]() |
|
![]() |
||
![]() |
![]() |
fig. 1.3. Capture Directions
Left | Mid | Right | |
---|---|---|---|
Top | 9:TopLeft | 8:TopMid | 7:TopRight |
Mid | 6:MidLeft | 5:MidMid | 4: MidRight |
Bot(tom) | 3: BotLeft | 2: BotMid | 1:BotRight |
fig. 2.1. Positional Notation
Deployment Descriptors
For every space on the board, we write a deployment descriptor for capturing another piece that might be there, or spaces that it might move to. These make references to the same sort of (though smaller) collision and capture matrices that I describe in the 4x4 version of the game. Each of these start with the state as defined by the position of the piece (agent) which potentially move.
The "enemy" bit is a virtual agent, in other words, it's the AND intersection of the capture filter matrix and the rotated position matrix of the opponent side. There's either nobody there, or somebody, and we sort of don't care who. The capture is either up or down, and then left or right, in other words, "up-left" or "up-right" or "down-left" or "down-right" or capture!(up-left), capture!(up-right), capture!(down-left), or capture!(down-right). Motion of a piece is either up! down! left! right! Further, "block" is a superposed virtual agent which can be either one's own pieces or the opponent's, and is constructed by superposing one's own position matrix with the rotation of the opponents, and ANDed with the collision matrix for the position in question. no-block is the negation of this, i.e., there's nobody blocking the spot, that is, for example, no-block.MidRight. This gives us whether anybody is blocking the spot MidRight.
Capture Memes from Lower Right Corner
agent.BotRight.enemy.MidMid.agent.capture!(up-left) => agent.MidMid
Movement Memes from Lower Right Corner
agent.BotRight.no-block.MidRight.agent.up! => agent.MidRight
agent.BotRight.no-block.BotMid.agent.left! => agent.BotMid
So the above deployment descriptors may be generated for every space on the board, and it's symmetric for both players, since they may be rotated and superposed with one another. The state of the system may be represented, as I write in the 4x4 version, by rotating the white side, multiplying by two, and superposing with the black position matrix. This is a 9-digit base-3 number, one distinct number for each possible state. There are a number of impossible states, and at least five of the spaces are blank, so the representation is sparse.
Complete List of Deployment Descriptors
The total number of capture descriptors is one for each of the corners and two for each of the four sides, and four for the center, or 4 + 2 x 4 + 4 = 16. For the motion descriptors, we have two for each of the corners, three for each of the four sides, and four for the center, or 2 x 4 + 3 x 4 + 4 = 24. So we're looking at some forty descriptors for the whole board.
agent.BotRight.enemy.MidMid.agent.capture!(up-left) => agent.MidMid
agent.BotRight.no-block.MidRight.agent.up! => agent.MidRight
agent.BotRight.no-block.BotMid.agent.left! => agent.BotMid
agent.BotMid.enemy.MidRight.agent.capture!(up-right) => agent.MidRight
agent.BotMid.enemy.MidLeft.agent.capture!(up-left) => agent.MidLeft
agent.BotMid.no-block.MidMid.agent.up! => agent.MidMid
agent.BotMid.no-block.BotLeft.agent.left! => agent.BotLeft
agent.BotMid.no-block.BotRight.agent.right! => agent.BotRight
agent.BotLeft.enemy.MidMid.agent.capture!(up-right) => agent.MidMid
agent.BotLeft.no-block.MidLeft.agent.up! => agent.MidLeft
agent.BotLeft.no-block.BotMid.agent.right! => agent.BotMid
agent.MidRight.enemy.TopMid.agent.capture!(up-left) => agent.TopMid
agent.MidRight.enemy.BotMid.agent.capture!(down-left) => agent.BotMid
agent.MidRight.no-block.MidMid.agent.left! => agent.MidMid
agent.MidRight.no-block.TopRight.agent.up! => agent.TopRight
agent.MidRight.no-block.BotRight.agent.down! => agent.BotRight
agent.MidMid.enemy.TopLeft.agent.capture!(up-left) => agent.TopLeft
agent.MidMid.enemy.TopRight.agent.capture!(up-right) => agent.TopRight
agent.MidMid.enemy.BotLeft.agent.capture!(down-left) => agent.BotLeft
agent.MidMid.enemy.BotRight.agent.capture!(down-right) => agent.BotRight
agent.MidMid.no-block.TopMid.agent.up! => agent.TopMid
agent.MidMid.no-block.MidLeft.agent.left! => agent.MidLeft
agent.MidMid.no-block.MidRight.agent.right! => agent.MidRight
agent.MidMid.no-block.BotMid.agent.down! => agent.Bot.Mid
agent.MidLeft.enemy.TopMid.agent.capture!(up-right) => agent.TopMid
agent.MidLeft.enemy.BotMid.agent.capture!(down-right) => agent.BotMid
agent.MidLeft.no-block.MidMid.agent.right! => agent.MidMid
agent.MidLeft.no-block.TopLeft.agent.up! => agent.TopLeft
agent.MidLeft.no-block.BotLeft.agent.down! => agent.BotLeft
agent.TopRight.enemy.MidMid.agent.capture!(down-left) => agent.MidMid
agent.TopRight.no-block.MidRight.agent.down! => agent.MidRight
agent.TopRight.no-block.BotMid.agent.left! => agent.TopMid
agent.TopMid.enemy.MidRight.agent.capture!(down-right) => agent.MidRight
agent.TopMid.enemy.MidLeft.agent.capture!(down-left) => agent.MidLeft
agent.TopMid.no-block.MidMid.agent.down! => agent.MidMid
agent.TopMid.no-block.BotLeft.agent.left! => agent.TopLeft
agent.TopMid.no-block.BotRight.agent.right! => agent.TopRight
agent.TopLeft.enemy.MidMid.agent.capture!(down-right) => agent.MidMid
agent.TopLeft.no-block.MidLeft.agent.down! => agent.MidLeft
agent.TopLeft.no-block.BotMid.agent.right! => agent.TopMid
All this means is that if the enemy.MidMid or the no-block.MidRight virtual agents come back with a positive, i.e., the move or the capture are possible, these simply get put down as "eligible moves." It remains to work out how the team decides what it's going to do and that's a whole other kettle of fish. I try to poke at this idea in my earlier essay on Skins and Games. It could be a random selection model, it could be ideomemeplex models (which are ultimately arbitrary and unsatisfactory), and then some kind of accumulative historical model.
Summary & Conclusions
I think I have gotten all of the deployment descriptors needed for 3x3 Chimple. I might add the filter matrices for each of these no-block.BotMid and enemy.MidRight and such as matrix operations based on the filter matrices and so forth.
Still very much needing to be investigated on deployment decision models. The above model only provides a way of generating the possible memes which may be deployed at any given moment. The trick is to come up with something that is satisfyingly non-abitrary.
No comments:
Post a Comment