2025-02-28

模倣子 Intro to 3x3 Chimple Game

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


 LeftMidRight
Top  9:TopLeft8:TopMid7:TopRight
Mid 6:MidLeft5:MidMid4: MidRight
Bot(tom) 3: BotLeft2: BotMid1: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