Echo Chess: The Quest for Solvability
samiramly.com
samiramly.com
Originally built this chess variant as a fun hack but it really escalated since then. It's a single-player puzzle game. You're playing white, there's no opponent, and you need to clear the board to win. Every time you capture a piece, you become the 'echo' of that piece.
There's also an 'endless' mode with infinite levels generated in real time and validated by ML to ensure solvability. Took forever to make it work but it now has 99% accuracy. You can play the 'classic' mode here: https://echochess.com/ and endless here: https://echochess.com/?endless
Happy to answer any questions.
Please make sure that you and/or your friends don't do this on HN in the future! The community here is hypervigilant about this kind of thing and will use unkind words like 'astroturfing' and 'spamming' and email us complaints when they see it.
From my understanding, the earlier comments on this post were all existing players - but I may be mistaken. In any case, all duly noted for us new posters. Thank you for your help in keeping the HN community so awesome!
This is one of the (fortunately somewhat rare) cases where the principle of "optimize for curiosity" is at odds with itself!
https://hn.algolia.com/?dateRange=all&page=0&prefix=true&sor...
https://www.thinkfun.com/products/brain-fitness-solitaire-ch...
1) No echoing mechanism. In echo chess, if you capture a pawn, you become that pawn. That means the maze effectively changes at every capture. The post linked above has a thorough analysis (and visual examples) of the strategic implications and limitations of this simple twist, so I highly recommend checking it out.
2)Forced to capture at every move. Solitaire chess seems to require a capture at every move. While that may appear to be a more difficult setting at first sight, it can actually lead to a much lower search space complexity by heavily restraining the degrees of freedom. In small enough puzzle boards, backtracking can become trivial.
3) No white pieces, so no squads, and no sacrifices. In echo chess, it’s white against the world. In future levels (starting 9), you get a squad of white pieces to use. This quickly becomes a double-edged sword: your ally is also a blocker on your quest. Higher levels even require you to sacrifice an ally piece in your squad to solve the maze. This adds a whole new level of strategy and complexity to the game.
4) Endless mode with ML. The ‘endless’ mode of echo chess continuously serves procedurally generated chess mazes in real time that are guaranteed to be solvable (with 99%+ accuracy) every time you solve a prior one. You carry over your white piece and ending square as a starting position for the next level. This adds a tremendous amount of replayability, variability, and continuity for the game. It essentially becomes a strategic Tetris variant.
There are lots of other differences and nuances but I really think the post linked above does a better job analyzing them. If you’re an experienced solitaire chess player, I’d love to hear your thoughts on echo chess once you try it out!
Thanks for sharing this cool variant too. I’ll make sure to give it a try :)
The biggest issue I can see right now is matching up the starting piece with the previous puzzle's ending piece, but I feel that should be manageable with some heuristics and brute force. And one would have to test whether the puzzles generated like this are actually "random-looking" enough.
A lot of the early playtesting I did for 'endless' kept indicating, much to my initial dismay, that the continuity of the carryover white piece is pretty much essential. In hindsight, it kinda makes sense. Imagine playing Tetris or Temple Run but where every 30 sec you essentially start from scratch. I guess maybe that's why people are more likely to binge-watch a whole season of Breaking Bad back-to-back than a full season of Black Mirror?
If we didn't have that constraint for echo chess, we could've easily just saved the crowdsourced pre-labeled solvable levels into a big 'test bank' db, and randomly served one of them any time a player needs a new level to play. Think SAT/GRE questions that are all pre-curated beforehand but that get 'generated' at random for every participant.
Thankfully the ML classification approach I ended up going with completely sidesteps the carryover piece dilemma. It's like you said: you simply "generate [incl. carryover] and test for solvability". Plus it works, with 99%+ accuracy, and in real time. So I think we're good for a bit :)
Starting with the piece and square from the previous board, mark all squares but this one as unknown. Make a random move. Any unknown squares passed through get marked blank in the current board and in the puzzle. Randomly choose to keep the same piece (making this square blank in the puzzle) or switch (marking the chosen piece in the puzzle, but now blank in the current board). Continue making random moves (biasing slightly towards choosing unknown squares), eventually stop and randomly assign the remaining unknowns as obstactles or blanks. Because you've said you don't care if there's only one solution, this gives you solvable puzzles trivially.
This isn't a new idea, eg https://www.snellman.net/blog/archive/2019-05-14-procedural-... talks about generating solvable puzzles using the forward moves, you'd generally pair it with a filter that weeds out puzzles that are not fun for some reason (eg, solutions that random walk blank squares; these can be avoided at generation time by having a budget for move-to-blank)
But I wonder if this is a sign of things to come - rather than needing to find explicit deterministic solutions to many problems that might actually have one, because ML is getting much more powerful and accessible instead we'll just use ML models and get 99.9% accurate solutions, but say, well that's good enough.
You're not alone: http://www.incompleteideas.net/IncIdeas/BitterLesson.html
For a more echo chess specific answer, see my answer above to @bazzargh
> "This process will not always produce a solution, but it's pretty fast (on the order of 50-100 microseconds) so it can just be repeated a bunch of times until it generates a level. Unfortunately it'll generally produce a mediocre puzzle. There are too many obvious moves right at the start, the board gets filled in very quickly and the solution tree is quite shallow."
This tracks well with my own earlier experiments and my intuition about the (in)consistency of generating interesting echo chess levels by solution-tracing one random walk at a time. That said, could this forward-pass procedural generation be improved upon by adding some discriminator/scoring system after it to make sure we're not falling for the most trivial of solutions? Absolutely. In fact, the author continues by explaining how Linjat does that as well.
> "The above process produced a mediocre puzzle. In the final stage, we use that level as a seed for an optimization process. The optimizer sets up a pool of up to 10 puzzle variants. The pool is initialized with the newly generated random puzzle. On each iteration, the optimizer selects one puzzle from the pool and mutates it. [...] We then run the solver in the special level-generation mode [...] to make it solvable again. After that, we run the solver again, this time in the normal mode. [...] The new puzzle is then added to the pool. If the pool ever contains more than 10 puzzles, the worst one is discarded. This process is repeated a number of times (anything from 10k to 50k iterations seemed to be fine). After that, the version of the puzzle with the highest score is saved into the puzzle's level database."
In other words, what we'd truly be doing is: (1) some iterative process to generate a (trivially) solvable walk, (2) add random mutations to make the (solvable) level interesting, (3) readjust to make the (interesting) solvable again, (4) rinse and repeat until we have a (hopefully) interesting and solvable level.
To be clear, there's nothing wrong with this approach - it could even give us more granular control of difficulty curving explicitly. Indeed, with the right tweaks, I bet some solid solver + optimizer process could be devised to generate non-trivially solvable echo chess levels starting from a forward random walk.
Philosophically, in fact, the last step of the Linjat optimizer sounds actually pretty similar to the way the current 'Endless' mode in echo chess selects a level to be served to the player. 50 random gens get evaluated by the ML ensemble, they get ranked by majority-voting of solvability first, and probability of being solvable second, and the level with the highest score is the one that gets committed to the game.
Granted, the current echo chess generator directly starts from a parametrized random pool of 'mutations' before running them through its solvability discriminator, as opposed to starting from a definitionally solvable forward walk kernel to be mutated. Mutations first, solvability second. But the result is the same. And given that the starting pool is parametrized, there is still ample control (implicitly at least) in adjusting the distribution of components like obstacles, piece types, topology, etc. to vary the expected difficulty of the seeds.
TL;DR: we can start from random weights or fine-tune promising ones. But we still need to do something to get non-trivial levels generated.
The fact that you directly got the solution to that fictional example kinda proves the point that 'type 2' folks (as described in that section of the post) can actually be at a disadvantage compared to the newcomers given their preexisting intuitions and heuristics. Curious to know if you ended up solving some of the main levels in 'classic' mode too.
I did too, and really feel like it's the most natural strategy, even for regular chess players. I'm interested if OP has any anecdotal evidence that chess players would try to solve it by a "forward" algorithm rather than "backward." Even a natural chess player would get that this is a puzzle.
I think the main point is less about the forward vs backward part, and more so about the assumed relative values of every piece, position, or configuration on the board. Anecdotally, playtesting did show that regular chess players tend to lean on preexisting heuristics that serve them really well in chess, but less so in echo chess.
Not sure how this data compares to other variants like Sovereign Chess. I bet there is a similar adjustment period required to unlearn some habits and learn new ones. Caveat to all this: after re-adjusting to the mechanics of a puzzle game and the specific implications entailed, I'm sure veteran strategy players would still outperform, on average. Even across broader genres like chess vs TBS vs 4X vs GS. There's likely some 'muscle memory' that the brain develops over time.
Well done!
Also do you feel like you now have a general set of principles to procedurally generate levels that apply to games outside of echo chess? Puzzle games are great since they're well scoped for indie devs and I'd imagine a lot of would be puzzle designers would burn out before they create a few dozen-hundred levels.
Three reasons: (1) demand for new levels was too high - game traction exceeded my laziness threshold as a designer; (2) puzzle lovers suffered from lack of replayability - game was effectively punishing core users who engage with it the most; (3) designing a 'good' difficulty curve required me to quantify a level's difficulty objectively - anytime I design a puzzle or strategy game, I also try to design an algorithm that can solve it to get a general sense of how the different levels compare in difficulty; (4) I tend to get obsessively curious about stuff - wasn't sure if it's feasible to have a 100% real-time procedural gen of chess mazes so I decided to do it to find out.
> I've often heard debates around whether content needs to be "hand-crafted" to be worth another human's time
LLM jokes aside, I think this is a great point and I'm not sure exactly what the right answer is here. I ended up keeping both Classic and Endless modes for this exact reason. If there's enough interest, I'll add a manual level generator for the community of 'humans' to submit their own hand-crafted creations for others to play.
> a general set of principles to procedurally generate levels that apply to games outside of echo chess?
Good question. I think it really comes down to this: (a) can you formalize the concept of a 'level' and its components for your game in a way as to encode/decode every game state (at a minimum) easily and efficiently? (b) can you parametrize this formalism in a way as to connect malleable randomizations to every meaningful component of a level to generate (hypothetical) infinite variability? (c) do you have a confident way to make sure whatever generation of a 'level' you're churning out is as playable, achievable, and as fun as the manually crafted one? The fun part is the hardest one to automate. That's where I think you need a very strong grasp of what actually make your puzzle game fun. All the rest can likely be generalizable to other games.
> puzzle designers would burn out before they create a few dozen-hundred levels
Tell me about it.
hold&drag is almost unusable on the phone
(and/or you need to resize the website, as it doesn't fit the screen neither in phone- nor in desktop-mode of the browser)
if I hold'n'drag up-down, it moves the viewpoint (together with the board)
might be because of URL bar appearing/hiding, never encountered this before...
edit: even with "toolbars - never hide", it still scrolls a tiny bit (tho the game becomes usable)
yep
> Thanks for your patience and support!
thank _you_ for a great game
At each step it determines the reachable squares for the given piece, that are not occupied or block past moves, and chooses one at random, then it computes the shortest path to that square. This procedure is repeated until there are no squares available.
Only pawns, knights and kings are supported so far.
https://gist.github.com/oessessnex/bc617095675da44f857216f98...
Great game btw :)
> the reachable squares for the given piece, that are not occupied or block past moves
The last part is key. There's a similar discussion related to level generation here: https://news.ycombinator.com/item?id=37334186
If you do check it out, I'd be curious to hear your thoughts on the Linjat approach and the limitation around trivial solvability of gens without an optimizer step of some sort. Still unclear at this stage where the debate of ML vs deterministic solvers will land on this one, though there are already several insights discussed that can be meaningful for puzzle design in general.
Let me know if you end up expanding the code and/or going through the 'forward solver' tangent debate. Thankful for your efforts in taking a stab at this challenge!
I love the music, but a bit frustrated with the sounds
Certainly, feel free to drop a comment here any time.
> separate controls of sounds (piece selection, piece placement) and music (the score)
Not planned for the current minimalist version but I think that’s a good idea for a settings menu.
> I love the music, but a bit frustrated with the sounds
Sorry to hear that. Out of curiosity, is it the capturing sound in particular you’re referring to, or do you feel the same about the (less frequent) other SFX ones? Would be great to understand a bit more too what aspect in particular of these sounds you find suboptimal (genre, volume, frequency, specific audio, etc.)
Level end and level start are rare enough to not pay attention to, they're fine
Capturing the pieces is high enough note to not interfere with the music (and it sounds positive), but it gets boring(?) after a while
"Moving to an empty cell" on the other hand... I'd reserve it for errors, tbh. Something about that... sound of hitting a tin or glass, it feels unpleasant (and not neutral like simple maneuvering should be, imo)
Only now, after frantic replaying of sounds over and over, I understood that "wrong move" has different sfx from "move to an empty cell"... That's not obvious. | Also, I think that returning piece to its own place shouldn't sound like an error (especially since it is highlighted same green color as valid moves. I'd make this silent probably)
> Would be great to understand a bit more too what aspect in particular of these sounds you find suboptimal (genre, volume, frequency, specific audio, etc.)
Volume seem fine: my mouse is louder than sfx, but less loud than the song
And perhaps last nitpick, but does the song change bpm? I feel the urge to synchronize moves with the catchy beat, but I feel like I can't apply rhythm from the beginning of the song to its end (and vice versa)
By the way, many have reached out asking about an echo chess community for future updates or feedback/discussions. I'm considering setting up a discord server for that.
Let me know if you're interested in future versions or levels of echo chess. I can add you to the early access list when the time comes.
This is one of the magical spaces where there is always a solution, the board space isn't that big & shrinks as you go
It works by reducing the state to currently alive pieces and the current white piece right after conversion. It computes the transversable squares and possible captures for each state and does a basic DFS. One neat trick I used is that for simple traversability, the queen and the king are the same piece.
Multiple white pieces makes the code significantly more complex, but it simply adds a little bit to the statespace.
[0]: https://github.com/TheThirdOne/assorted-examples/blob/master...
I haven't optimized my approach at all or even run it under a profiler, but it uses SIMD-within-a-register for computing the "flood fill" of which squares a piece can move to, which is a nice efficiency boost. For the simplest example, if you have a bit-vector `v: u64` of positions that a pawn might be in, then `v << 8` is the vector that denotes where it might be after one step, and `((v & can_move::LEFT) << 7) | ((v & can_move::RIGHT) << 9)` denotes what it might be able to capture.
I think the `Stepper` implementations and the way they flow into the top-level `captures` function is a cool and powerful approach; I encourage taking a look if it sounds interesting to you.
[1]: https://github.com/wchargin/echo-chess
Direct link to source:
https://github.com/wchargin/echo-chess/blob/main/src/main.rs
> Multiple white pieces makes the code significantly more complex, but it simply adds a little bit to the statespace.
That would be my guess too. Especially the sacrifice mechanic that needs to be timed just right after X moves/transformations of each white piece.
- would be good to support two tap moves like on lichens rather than only drag and drop
- drag and drop seems really buggy on my phone. Often had to repeat my move.
- accidentally clicked give up instead of try again, then my game was over? Not really sure why there is a give up button at all.
- the timer just adds stress instead of fun, for me.
- hated the music being on by default
- imho the obstacles should be symbols, not just a different square colour. I had trouble seeing them.
Which brings us to the next point: 'endless' mode handles the game over state with a countdown timer, ensuring a convergence toward an end game even in a (theoretically) infinite game mode. But that mode is purposefully designed to be more arcade-like and speedrunnable, versus 'classic' mode which is dedicated to strategic patient thinkers. If timing in games stresses you out, definitely feel free to stick to classic instead of endless mode. Many folks love the timing aspect, but if you've never been into things like blitz chess, it's totally understandable.
Thankfully, you'd be happy to hear that the scoring system is purposefully designed to minimize the impact of timing in classic mode for exactly that reason (check out the 'Scoring System' section in the post).
p.s. I'm surprised to hear drag and drop is giving you issues on your phone, sorry about that. Not sure any players have had that issue before. Do you mind sharing what device/os/browser you're using, and if you're accessing echochess.com in a fresh browser tab directly?
Have you considered saving the high score after every level automatically?
There's a section in the post about the ethos behind the scoring system and how it's designed to incentivize good gameplay while accommodating for speedrunners as a non-primary audience. It also ties in with the part about sawtooth difficulty curves and skipping levels. So some of these considerations can come into play here. In general I tried to reproduce the retro feel of arcade games without taking away from the strategy/puzzle solving kernel.
But yes, definitely. That's a valid approach too.
I didn't finish the post because it went straight into strategy tips before I had even had a chance to play!
Also personally I'm not really interested in arcade mechanics. I'm not interested in global leaderboards or whatever either. Just interested in playing puzzles in my own time on my own terms.
Your thing is very cool! I like the way it is so constrained it's often possible to plan 6-7 moves ahead without much effort.
>but if you've never been into things like blitz chess, it's totally understandable
I'm massively into blitz chess. But this is a puzzle thing, and for me, there is no need for a timer in a solo game.
> Do you mind sharing what device/os/browser you're using, and if you're accessing echochess.com in a fresh browser tab directly?
FF/Android. I didn't understand your second question.
I get your point about solo games vs blitz chess. Puzzle games aside, when I'm playing solo I tend to prefer Turn-Based Strategy games like HOMM, King's Bounty, Civ, Eador, AOW, etc. a little more than RTS games like SC2, Warcraft, AOE, BfME, DOTA, League, and so on. In multiplayer, RTS can be a lot of fun. Of course the best solo campaigns are always real gold, whether timed or not.
The nice thing about good strategy and puzzle games is that they can be enjoyed in different ways by all types of players who appreciate puzzle solving.
Btw it's a bit odd that there are no instructions anywhere on the site? I keep wondering if there's a rule I'm missing or something.
You have these rules in the blog post, but I find the language quite messy and imprecise:
> You are playing White, there is no opponent. You must capture all pieces to win.
> You become the "echo" of any piece you capture. Captured a bishop? Become that bishop.
> You can’t pass through red obstacles. Find the best move order to clear the board.
For starters, "you" is used to describe both the player and the piece. And the last rule contains two different statements, the second of which is redundant from the first rule. It also doesn't mention that there can be more than one white piece, or that white pieces can capture other white pieces.
Maybe something like:
1. The goal is to capture all the black pieces, which never move.
2. Move one white piece each turn, using the basic rules of chess piece movement. You can't move through red obstacles. Pawns don't promote.
3. When you capture a black piece, your white piece turns into the type of piece you just captured.
> I'm playing solo I tend to prefer Turn-Based Strategy games like HOMM, King's Bounty, Civ, Eador, AOW, etc. a little more than RTS games like SC2, Warcraft, AOE, BfME, DOTA, League, and so on. In multiplayer, RTS can be a lot of fun
For some reason, I'm the opposite - I hate RTS against humans.
> When you capture a black piece, your white piece turns into the type of piece you just captured.
The echoing mechanism actually applies to any captured piece. You'll see this mechanic in action starting 12+. By "you'll see", I mean the game progression and level design will purposefully force you into following a path which illustrates the new mechanic that needs to be learned. The lack of explicit text instructions, tutorials or handholding in is a feature of echo chess, not a bug. See the 'difficulty curves' section of the post.
> Currently stuck on level 10.
Yes, this is one of those levels that feel incredibly frustrating until it just 'clicks'. In my playtesting experiments, users either smile/laugh audibly when they finally get the solution to level 10, or they let out a big sigh of relief. Let us know how it goes :)
Personally, I don't care for it. To me the essence of a puzzle is a clear goal, and a clear set of constraints, within which you try to find a solution. If there are unspecified means available, it's something different, like a "a puzzle with a trick to it". Like one of those lateral thinking problems where it turns out you're meant to fold the paper or something, because they never said you couldn't.
It's easier to enjoy and get deeply into a puzzle when you know for sure it's solvable with the information you have.
>Yes, this is one of those levels that feel incredibly frustrating until it just 'clicks'. In my playtesting experiments, users either smile/laugh audibly when they finally get the solution to level 10, or they let out a big sigh of relief. Let us know how it goes :)
I got it just after posting. I had just missed one of the possible pathways for a knight to get to a certain square. Was going through the process of proving that the puzzle was impossible - often a good way to solve. :)
Nice :) That's the way to do it. I think you'll really like 11+.
One other thing I noticed was that submitting a lower score (at least in endless) still overrides your old one. (My scores went 860.5k -> 314.7k -> 446.9k -> 136.7m, overriding every time.)
I'm still not over how you casually dropped that you reached 136.7 MILLION btw. gg.
I'm not entirely convinced that this is anything on your end, as I have run into similar issues with my sites, and all the "answers" online don't really fix it. I believe the only real solution is some combination of setting viewport, disabling certain scrolling/finger gestures*, and ensuring that the content on screen doesn't go off the page. I'm no expert though.
*: I don't recall this being absolutely necessary, and it is generally not recommended for accessibility reasons. I believe that I mostly fixed it with just setting the proper viewport meta tag and ensuring content doesn't go off the screen.
flash games operated like that from the beginning till the end
In a somewhat similar vein, I found the endless mode to be a bit tiring, since you have to keep up the pace to maintain enough time. It could be nice to have a pause button for endless mode (or both modes). Of course, it would defeat the purpose if someone could just pause right after seeing each board, but I feel like having a pause button with some sort of multi-minute cooldown could be an interesting addition. For some people, this might defeat the purpose of endless mode, but it's just a thought!
I also ended up playing endless long enough to get a score that was too large; my score overlapped with my name on the leaderboard. (I reached level 157 with 136.7m score, then I let time run out due to my hands getting tired.)
I'm not expressing an opinion on whether the music is good or not. I just really don't want (or expect) any music to play. It's particularly annoying when I play on my phone in a quiet moment, and suddenly music is blasting out. It doesn't seem to remember the setting.
Side note, unrelated to echo chess - which of these (very eclectic) TBS or puzzle games would you say have soundtracks that are more of a fit for the solo puzzle-solving experience you'd find ideal: Tetris (tanaka), HOMM (romero), Civ (knorr), or small indies like Monument Valley, Into the Breach, etc.?
Lightweight puzzles are likely to be something I do while doing something else. It's pretty presumptuous for a puzzle to think that there is no other music that it could conflict with.
I agree that music is a super personal thing, though - in games or beyond. That mute button in echo chess is as old as the first SFX audio file I playtested. Point taken on its default state and persistence. Thanks for sharing your candid thoughts throughout.
I have tried the thing you mention and listened to computer game music in other contexts, but really, it's not my thing. I'd rather listen to classical, or jazz, or pop, or...almost anything.
Even the new strategy board game and analogue CCG scene is so stratified these days. Which one of these games would count as the “true” archetype of a strategy game: Mage Knight, Terraforming Mars, Agricola, Sovereign Chess, Dune Imperium, Gloomhaven, Azul, Catan, Theomachy, or MTG? They each seem to have increasingly more “strategic flavor” differences separating them from each other than similarities. Same goes for table-top RPGs of the 2020s.
All this is to say, if the strategy genre itself can’t be painted with the same brush, then it sure can’t be optimally paired with the same universal type of music.
You make me realise I'm not sure what makes a game "strategy" per se. Games like Agricola don't feel very strategic to me, in that there is not much scope for long term planning, or predicting what other players will do. Instead, you just react to the situation in front of you, trying to make the most +EV play.
The business world can’t even agree on this one. There are maybe as many HBR rants swearing by Michael Porter’s definition as there are indignant talking heads criticizing it. Same for all the flavors of Nash economics or ESS in biology.
For a game to be ‘strategy’, I’d say some element of deductive reasoning or foreplanning being a prerequisite for (better odds of) success is necessary, but not sufficient. A min decision space complexity that makes the former non-trivial is likely sufficient.
Some might argue that decision making under uncertainty, or some version of stochastic optimization is necessary too. Or that strategy (as opposed to logic) is only relevant when more than one agent is decisioning at some level - making a clearer distinction with puzzle solving, PvE, emergent gameplay or meta strategy. Are they right? Maybe. Does it make any difference beyond gatekeeping? Probably not. Some of the best designers I know purposefully blur the lines between established genres when creating their games.
> Games like Agricola don't feel very strategic to me, in that there is not much scope for long term planning, or predicting what other players will do.
BGG often has heated debates on this point. I think it’s mostly a eurogame vs american-style thing (I’m a fan of both camps for different reasons).
I get your point about the pausing concern. I've actually thought about that in past playtests and I think the long-term solution for these things is likely even more drastic: increasing the difficulty of the procedural gens incrementally more after X levels have passed. And/or capping the winnable time back from solving every consecutive level after the first Y. There are lots of interesting things that can be explored in this area - see the last section of the original echo chess writeup.
Awesome to hear you reached LEVEL 157 in one run! Curious if you got taken by the 'one more turn syndrome' [0] in that session, or if you had embarked on this run with a clear goal of surpassing 100,000,000?
And please make sure to ice those fingers. echo chess cannot be held liable for finger damage.
To be honest, at first, it was less of an urge to get "one more turn" in and more of an urge to make sure I had beat my original high score. Once I surpassed it, I was trying to see how long I could survive without running out of time. It was at that point where I realized I could keep going forever without running out of time (I could recoup more time than I spent, and I would regularly hit 99 capped time). After this revelation, I set a goal of going until my hands got tired. Once my hands got tired, I almost succumbed to the "one more turn syndrome," but after moving (I believe) one piece, my score had a nice 3-digit repeating pattern and was a round number, so I called it quits.
Luckily(?), my hands have made it through games that are far more torturous on the fingers (though it has been a while).
i have tried to find sites that have listings of hacker/engineering/conference type events, but most of them are very spammy, or low signal. is there a good resource for finding these?
We share on Twitter, Luma, LinkedIn, and try to get other community groups to amplify, but there's a lot of noise out there, so we likely miss a lot of cool people.
Sometimes you get lucky and there's a good community slack/discord (for example the San Diego Startups slack) where you'll see most events posted. Otherwise, startups that are hiring engineers tend to sponsor and share events. Beyond that you have to just find out from other hackers where they're speaking or joining something.
Where do you live?
There doesn't seem to be a way to both take the f2 king and the a1 pawn. The b6 bishop can't reach either. The d1 pawn can only reach one or the other.
Or I start with dxe, take the white rook with the pawn, and end up with black pawn on a1 and white bishop on e6.
Another hint?
EDIT Oh never mind, finally got there. Just a slight tweak to the move order, which took forever to discover.
Do you have a full description of the rules, and do you have the FEN? I like to know the rules if I want to play game, and, it is not working so I made up my own, and if the levels is available then I can play game.
The below is I made up my own (I don't even know, if it is the real rules or not; but it is what I had understood):
; Echo Chess
(InputXY)
(Control
Input
(INIT $Cursor 1 1 0 0 Create =@cur)
(KEY IgnoreKey)
)
($Cursor
(Image "Cursor0" "Cursor1")
(DefaultImage ())
(Density -10)
(CREATE LOOP 0 1 50 Animate)
)
($Tile
(Image "Tile0" "Tile1")
(Density 10)
(INIT Loc + 1 band =Image)
(CLICK @cur ,ObjBelow #Move Loc ,Send . 1)
)
($White
(Image "P" "N" "B" "R" "Q" "K")
(CLICK @cur Loc ,MoveTo)
(#Move
fork
Image (case
(0 :pawn)
(1 :knight)
(2 :bishop)
(3 :rook)
(4 :queen)
(5 :king)
)
then
if
Arg1 Arg2 MoveTo .
Arg3 if
From ,Image =Image
From ,Destroy .
(=P $Black) lnot if WinLevel then
then
@cur Loc ,MoveTo .
then
)
(:pawn Yloc Arg2 1 + eq Xloc Arg1 Delta Arg3 eq land)
(:knight Xloc Arg1 Delta dup * Yloc Arg2 Delta dup * + 5 eq)
(:bishop Xloc Arg1 Delta Yloc Arg2 Delta eq if =:queen else 0 then)
(:rook Xloc Arg1 Delta Yloc Arg2 Delta land if 0 else =:queen then)
(:queen From Seek =%d Loc begin %d NewXY over over ObjTopAt dup From eq if . . ret then ,Class $Tile ne until . . 0)
(:king From Chebyshev 1 eq)
)
($Black
(Image "PB" "NB" "BB" "RB" "QB" "KB")
(CLICK @cur ,ObjBelow #Move Loc 1 ,SendEx . 1)
)The rules are really simple:
1) You are playing White, there's no opponent. You must capture all pieces to win.
2) You become the "echo" of any piece you capture. Captured a bishop? Become that bishop.
3) You can’t pass through red obstacles. Find the best move order to clear the board.
You can play it on any device, just drag and drop the white piece to move around. Let me know if you have any issues.
p.s. love that you just made your own!
I read the rules like you wrote it here too, it is same thing, and I understand that. Nevertheless, it does not answer all of the questions (e.g. pawns promotion). From the example, it seems to not be check/mate, but I that short explanation won't explain everything. Capture all pieces? Do you mean capture the black pieces only? You cannot capture the white pieces, isn't it (otherwise there won't be any to capture it)? Is the code I wrote, the correct rules of the game?
My version:
1. The goal is to capture all the black pieces, which never move.
2. Move one white piece each turn, using the basic rules of chess piece movement. You can't move through red obstacles. Pawns don't promote. There is no check.
3. When you capture a piece (black or white), your white piece turns into the type of piece you just captured.
Then, the code that I wrote is OK (I think) except I did not implement capturing white pieces (although if white pieces can capture white pieces and change into the same piece, then effectively the white piece can become vacant if it can reach another white piece).
; Echo Chess
(InputXY)
(Control
(INIT $Cursor 1 1 0 0 Create =@cur)
)
($Cursor
Player
(Image "Cursor0" "Cursor1")
(DefaultImage ())
(Density -10)
(CREATE LOOP 0 1 50 Animate)
)
($Tile
(Image "Tile0" "Tile1")
(Density 10)
(INIT Loc + 1 band =Image)
(CLICK @cur ,ObjBelow #Move Loc ,Send . 1)
)
($White
Input
(Image "P" "N" "B" "R" "Q" "K")
(CLICK @cur Loc ,MoveTo)
(#Move
,:movable
if
Arg1 Arg2 MoveTo .
Arg3 if
From ,Image =Image
From ,Destroy .
(=P $Black) lnot if WinLevel then
then
@cur Loc ,MoveTo .
then
)
(:movable
Image (case
(0 :pawn)
(1 :knight)
(2 :bishop)
(3 :rook)
(4 :queen)
(5 :king)
)
)
(:pawn Yloc Arg2 1 + eq Xloc Arg1 Delta Arg3 eq land)
(:knight Xloc Arg1 Delta dup * Yloc Arg2 Delta dup * + 5 eq)
(:bishop Xloc Arg1 Delta Yloc Arg2 Delta eq if =:queen else 0 then)
(:rook Xloc Arg1 Delta Yloc Arg2 Delta land if 0 else =:queen then)
(:queen From Seek =%d Loc begin %d NewXY over over ObjTopAt dup From eq if . . ret then ,Class $Tile ne until . . 0)
(:king From Chebyshev 1 eq)
(#Destroy
From Self ne if
From #Move Loc 1 ,SendEx .
then
Destroyed lnot
)
('D
@cur Coloc if
$White #Destroy Loc BroadcastAnd .
then
)
)
($Black
(Image "PB" "NB" "BB" "RB" "QB" "KB")
(CLICK @cur ,ObjBelow #Move Loc 1 ,SendEx . 1)
)
It is also possible to add more pieces e.g. Chinese cannon, or other kind of changes if desired.