In Harmony, each blink is assigned a different element. Elements have different interactions with each other (Ex: water can’t be next to fire). The goal of Harmony is to have the most amount of points by having the most faces of blinks ‘in harmony’.
A face of a blink is happy if it is -Next to a blink face of it’s own element -Next to a blink face it doesn’t particularly disagree with Blink faces that are happy will slowly flash between white and their element.
A face of a blink is angry if it is next to a blink face of an opposing type. Blink faces that are angry will rapidly flash between off and their element.
A face of a blink is neutral if it is not next to another face. Blink faces that are neutral will stay one solid color.
The elements and disagreements between them are as follows:
Water (blue), fire (red), plants (green), rocks (orange), and lightning (yellow).
-Water cannot be next to fire or lightning
-Fire cannot be next to plants or water
-Plants cannot be next to rocks or fire
-Rocks cannot be next to lightning or plants
-Lightning cannot be next to water or rocks.
Two happy faces together are worth 1 point
A neutral face is worth 0 points
Two angry faces together are worth -1 point
Winning: Try to maximize your point total. You have won if you have the maximum point total for a setup of elements.
Double click any blink in the cluster to give all blinks in the cluster a new element.
Triple click any blink in the cluster to turn all blinks in the cluster into ‘challenge mode’.
In Challenge Mode: Blink faces are angry if they are next to a blink face of their type.
Github: GitHub - DethDefier/Harmony: a game for Blinks by Move38
2 Likes
Oh I love interactive toys like this. Reminds me of Honey where you’re trying to arrange tiles to maximize potential.
Instead of turning them white, how about this. I presume each of the five elements are a different color? How about faces default to a neutral mid-brightness, mid-saturation color on their face. If the face is touching an element it “likes” then the face brightens and the color is more saturated. If the face is touching an element it “dislikes” then the face darkens and the color desaturates.
You get 1 point for every face in the “like” state and -1 point for every “dislike”. The goal is to maximize the points of your given selection of elements.
Elements touching the same element (water touching water) are neutral. They count as zero points.
I was kinda of thinking of doing the brightness thing, but I am a kid that can’t afford great batteries and my batteries are always low on my blinks, so differences in brightness aren’t something I would really use as a core feature. Maybe like a white tinted in that color? I like the points system though! I was also thinking of making it so if elements (say fire and water) interact that don’t like each other, they could cause an effect to happen (maybe turning to water into rock), but I don’t know the best way to implement this or if it would improve the game.
You’re not wrong about the battery affecting brightness. My fishing game uses different brightness blue to show different water depth and battery level can definitely confuse things. Looking forward to what you come up with!
I have made a system where on ‘angry’ faces (ones touching a blink that it does not like) it rapidly flashes between off and the color of the blink, on ‘happy’ faces it slowly oscillates between the color and white, and on faces not touching a blink it remains the same. It adds a well needed bit of movement to the game, I think!
But now im having problems with looping signals so I have to re-make the stuff I just made
EDIT:
The looping signals were because i had a randomize(); function in changeGameState.
I do not know why this would cause this unless randomize() is extremely taxing on the blinks. is there another good way to get reliable random numbers? without it they all start as red in the beginning, then cycle through the colors whenever getting a ‘random’ gameState.
EDIT #2:
I put randomize(); inside of setup() instead of calling it every time I call random(4), this removed the performance issues caused by it