Long post, game design
Crungle is a game designed to be a simple test of general reasoning skills that's difficult to play by rote memory, since there are many possible rule sets, but it should be easy to play if one can understand and extrapolate from rules. The game is not necessarily fair, with the first player often having an advantage or a forced win. The game is entirely deterministic, although a variant determines the rule set randomly.
This is version 0.1, and has not yet been tested at all.
Crungle is a competitive game for two players, each of whom controls a single piece on a 3x3 grid. The cells of the grid are numbered from 1 to 9, starting at the top left and proceeding across each row and then down to the next row, so the top three cells are 1, 2, and 3 from left to right, then the next three are 4, 5, and 6 and the final row is cells 7, 8, and 9.
The two players decide who shall play as purple and who shall play as orange. Purple goes first, starting the rules phase by picking one goal rule from the table of goal rules. Next, orange picks a goal rule. These two goal rules determine the two winning conditions. Then each player, starting with orange, alternate picking a movement rule until four movement rules have been selected. During this process, at most one indirect movement rule may be selected. Finally, purple picks a starting location for orange (1-9), with 5 (the center) not allowed. Then orange picks the starting location for purple, which may not be adjacent to orange's starting position.
Alternatively, the goal rules, movement rules, and starting positions may be determined randomly, or a pre-determined ruleset may be selected.
If the ruleset makes it impossible to win, the players should agree to a draw. Either player could instead "bet" their opponent. If the opponent agrees to the bet, the opponent must demonstrate a series of moves by both players that would result in a win for either player. If they can do this, they win, but if they submit an invalid demonstration or cannot submit a demonstration, the player who "bet" wins.
Now that starting positions, movement rules, and goals have been decided, the play phase proceeds with each player taking a turn, starting with purple, until one player wins by satisfying one of the two goals, or until the players agree to a draw. Note that it's possible for both players to occupy the same space.
During each player's turn, that player identifies one of the four movement rules to use and names the square they move to using that rule, then they move their piece into that square and their turn ends. Neither player may use the same movement rule twice in a row (but it's okay to use the same rule your opponent just did unless another rule disallows that). If the movement rule a player picks moves their opponent's piece, they need to state where their opponent's piece ends up. Pieces that would move off the board instead stay in place; it's okay to select a rule that causes your piece to stay in place because of this rule. However, if a rule says "pick a square" or "move to a square" with some additional criteria, but there are no squares that meet those criteria, then that rule may not be used, and a player who picks that rule must pick a different one instead.
Any player who incorrectly states a destination for either their piece or their opponent's piece, picks an invalid square, or chooses an invalid rule has made a violation, as long as their opponent objects before selecting their next move. A player who makes at least three violations immediately forfeits and their opponent wins by default. However, if a player violates a rule but their opponent does not object before picking their next move, the stated destination(s) of the invalid move still stand, and the violation does not count. If a player objects to a valid move, their objection is ignored, and if they do this at least three times, they forfeit and their opponent wins by default.
Goal rules (each player picks one; either player can win using either chosen rule):
End your turn in the same space as your opponent three turns in a row.
End at least one turn in each of the 9 cells.
End five consecutive turns in the three cells in any single row, ending at least one turn on each of the three.
End five consecutive turns in the three cells in any single column, ending at least one turn on each of the three.
Within the span of 8 consecutive turns, end at least one turn in each of cells 1, 3, 7, and 9 (the four corners of the grid).
Within the span of 8 consecutive turns at least one turn in each of cells 2, 4, 6, and 8 (the central cells on each side).
Within the span of 8 consecutive turns, end at least one turn in the cell directly above your opponent, and end at least one turn in the cell directly below your opponent (in either order).
Within the span of 8 consecutive turns at least one turn in the cell directly to the left of your opponent, and end at least one turn in the cell directly to the right of your opponent (in either order).
End 12 turns in a row without ending any of them in cell 5.
End 8 turns in a row in 8 different cells.
Movement rules (each player picks two; either player may move using any of the four):
Move to any cell on the board that's diagonally adjacent to your current position.
Move to any cell on the board that's orthogonally adjacent to your current position.
Move up one cell. Also move your opponent up one cell.
Move down one cell. Also move your opponent down one cell.
Move left one cell. Also move your opponent left one cell.
Move right one cell. Also move your opponent right one cell.
Move up one cell. Move your opponent down one cell.
Move down one cell. Move your opponent up one cell.
Move left one cell. Move your opponent right one cell.
Move right one cell. Move your opponent left one cell.
Move any pieces that aren't in square 5 clockwise around the edge of the board 1 step (for example, from 1 to 2 or 3 to 6 or 9 to 8).
Move any pieces that aren't in square 5 counter-clockwise around the edge of the board 1 step (for example, from 1 to 4 or 6 to 3 or 7 to 8).
Move to any square reachable from your current position by a knight's move in chess (in other words, a square that's in an adjacent column and two rows up or down, or that's in an adjacent row and two columns left or right).
Stay in the same place.
Swap places with your opponent's piece.
Move back to the position that you started at on your previous turn.
If you are on an odd-numbered square, move to any other odd-numbered square. Otherwise, move to any even-numbered square.
Move to any square in the same column as your current position.
Move to any square in the same row as your current position.
Move to any square in the same column as your opponent's position.
Move to any square in the same row as your opponent's position.
Pick a square that's neither in the same row as your piece nor in the same row as your opponent's piece. Move to that square.
Pick a square that's neither in the same column as your piece nor in the same column as your opponent's piece. Move to that square.
Move to one of the squares orthogonally adjacent to your opponent's piece.
Move to one of the squares diagonally adjacent to your opponent's piece.
Move to the square opposite your current position across the middle square, or stay in place if you're in the middle square.
Pick any square that's closer to your opponent's piece than the square you're in now, measured using straight-line distance between square centers (this includes the square your opponent is in). Move to that square.
Pick any square that's further from your opponent's piece than the square you're in now, measured using straight-line distance between square centers. Move to that square.
If you are on a corner square (1, 3, 7, or 9) move to any other corner square. Otherwise, move to square 5.
If you are on an edge square (2, 4, 6, or 8) move to any other edge square. Otherwise, move to square 5.
Indirect movement rules (may be chosen instead of a direct movement rule; at most one per game):
Move using one of the other three movement rules selected in your game, and in addition, your opponent may not use that rule on their next turn (nor may they select it via an indirect rule like this one).
Select two of the other three movement rules, declare them, and then move as if you had used one and then the other, applying any additional effects of both rules in order.
Move using one of the other three movement rules selected in your game, but if the move would cause your piece to move off the board, instead of staying in place move to square 5 (in the middle).
Pick one of the other three movement rules selected in your game and apply it, but move your opponent's piece instead of your own piece. If that movement rule says to move "your opponent's piece," instead apply that movement to your own piece. References to "your position" and "your opponent's position" are swapped when applying the chosen rule, as are references to "your turn" and "your opponent's turn" and do on.
#Game #GameDesign
from my link log —
The origin and unexpected evolution of the word "mainframe".
https://www.righto.com/2025/02/origin-of-mainframe-term.html
saved 2025-08-26
Synthesizer: Synthetic Observables For Modern Astronomy
Will J. Roper, Christopher Lovell, Aswin Vijayan, Stephen Wilkins, Hollis Akins, Sabrina Berger, Connor Sant Fournier, Thomas Harvey, Kartheik Iyer, Marco Leonardi, Sophie Newman, Borja Pautasso, Ashley Perry, Louise Seeyave, Laura Sommovigo
https://arxiv.org/abs/2506.15811…
Replaced article(s) found for cs.CV. https://arxiv.org/list/cs.CV/new
[3/4]:
- SBP-YOLO:A Lightweight Real-Time Model for Detecting Speed Bumps and Potholes
Chuanqi Liang, Jie Fu, Miao Yu, Lei Luo
Reconnection-driven Flares in M87*: Proton-synchrotron Powered GeV Emission
Hayk Hakobyan, Amir Levinson, Lorenzo Sironi, Alexander Philippov, Bart Ripperda
https://arxiv.org/abs/2507.14002
Rebound: Efficient, Expressive, and Well-Scoped Binding
No\'e De Santo, Stephanie Weirich
https://arxiv.org/abs/2509.13261 https://arxiv.org/pdf/2509.1…
A Converse Control Lyapunov Theorem for Joint Safety and Stability
Thanin Quartz, Maxwell Fitzsimmons, Jun Liu
https://arxiv.org/abs/2509.12182 https://arx…
Leveraging Artificial Intelligence as a Strategic Growth Catalyst for Small and Medium-sized Enterprises
Oluwatosin Agbaakin (Indiana University Indianapolis)
https://arxiv.org/abs/2509.14532
An integrated photonics platform for high-speed, ultrahigh-extinction, many-channel quantum control
Mengdi Zhao, Manuj Singh, Anshuman Singh, Henry Thoreen, Robert J. DeAngelo, Daniel Dominguez, Andrew Leenheer, Fr\'ed\'eric Peyskens, Alexander Lukin, Dirk Englund, Matt Eichenfield, Nathan Gemelke, Noel H. Wan
https://arxiv.org/abs…
Should we teach vibe coding? Here's why not.
Should AI coding be taught in undergrad CS education?
1/2
I teach undergraduate computer science labs, including for intro and more-advanced core courses. I don't publish (non-negligible) scholarly work in the area, but I've got years of craft expertise in course design, and I do follow the academic literature to some degree. In other words, In not the world's leading expert, but I have spent a lot of time thinking about course design, and consider myself competent at it, with plenty of direct experience in what knowledge & skills I can expect from students as they move through the curriculum.
I'm also strongly against most uses of what's called "AI" these days (specifically, generative deep neutral networks as supplied by our current cadre of techbro). There are a surprising number of completely orthogonal reasons to oppose the use of these systems, and a very limited number of reasonable exceptions (overcoming accessibility barriers is an example). On the grounds of environmental and digital-commons-pollution costs alone, using specifically the largest/newest models is unethical in most cases.
But as any good teacher should, I constantly question these evaluations, because I worry about the impact on my students should I eschew teaching relevant tech for bad reasons (and even for his reasons). I also want to make my reasoning clear to students, who should absolutely question me on this. That inspired me to ask a simple question: ignoring for one moment the ethical objections (which we shouldn't, of course; they're very stark), at what level in the CS major could I expect to teach a course about programming with AI assistance, and expect students to succeed at a more technically demanding final project than a course at the same level where students were banned from using AI? In other words, at what level would I expect students to actually benefit from AI coding "assistance?"
To be clear, I'm assuming that students aren't using AI in other aspects of coursework: the topic of using AI to "help you study" is a separate one (TL;DR it's gross value is not negative, but it's mostly not worth the harm to your metacognitive abilities, which AI-induced changes to the digital commons are making more important than ever).
So what's my answer to this question?
If I'm being incredibly optimistic, senior year. Slightly less optimistic, second year of a masters program. Realistic? Maybe never.
The interesting bit for you-the-reader is: why is this my answer? (Especially given that students would probably self-report significant gains at lower levels.) To start with, [this paper where experienced developers thought that AI assistance sped up their work on real tasks when in fact it slowed it down] (https://arxiv.org/abs/2507.09089) is informative. There are a lot of differences in task between experienced devs solving real bugs and students working on a class project, but it's important to understand that we shouldn't have a baseline expectation that AI coding "assistants" will speed things up in the best of circumstances, and we shouldn't trust self-reports of productivity (or the AI hype machine in general).
Now we might imagine that coding assistants will be better at helping with a student project than at helping with fixing bugs in open-source software, since it's a much easier task. For many programming assignments that have a fixed answer, we know that many AI assistants can just spit out a solution based on prompting them with the problem description (there's another elephant in the room here to do with learning outcomes regardless of project success, but we'll ignore this over too, my focus here is on project complexity reach, not learning outcomes). My question is about more open-ended projects, not assignments with an expected answer. Here's a second study (by one of my colleagues) about novices using AI assistance for programming tasks. It showcases how difficult it is to use AI tools well, and some of these stumbling blocks that novices in particular face.
But what about intermediate students? Might there be some level where the AI is helpful because the task is still relatively simple and the students are good enough to handle it? The problem with this is that as task complexity increases, so does the likelihood of the AI generating (or copying) code that uses more complex constructs which a student doesn't understand. Let's say I have second year students writing interactive websites with JavaScript. Without a lot of care that those students don't know how to deploy, the AI is likely to suggest code that depends on several different frameworks, from React to JQuery, without actually setting up or including those frameworks, and of course three students would be way out of their depth trying to do that. This is a general problem: each programming class carefully limits the specific code frameworks and constructs it expects students to know based on the material it covers. There is no feasible way to limit an AI assistant to a fixed set of constructs or frameworks, using current designs. There are alternate designs where this would be possible (like AI search through adaptation from a controlled library of snippets) but those would be entirely different tools.
So what happens on a sizeable class project where the AI has dropped in buggy code, especially if it uses code constructs the students don't understand? Best case, they understand that they don't understand and re-prompt, or ask for help from an instructor or TA quickly who helps them get rid of the stuff they don't understand and re-prompt or manually add stuff they do. Average case: they waste several hours and/or sweep the bugs partly under the rug, resulting in a project with significant defects. Students in their second and even third years of a CS major still have a lot to learn about debugging, and usually have significant gaps in their knowledge of even their most comfortable programming language. I do think regardless of AI we as teachers need to get better at teaching debugging skills, but the knowledge gaps are inevitable because there's just too much to know. In Python, for example, the LLM is going to spit out yields, async functions, try/finally, maybe even something like a while/else, or with recent training data, the walrus operator. I can't expect even a fraction of 3rd year students who have worked with Python since their first year to know about all these things, and based on how students approach projects where they have studied all the relevant constructs but have forgotten some, I'm not optimistic seeing these things will magically become learning opportunities. Student projects are better off working with a limited subset of full programming languages that the students have actually learned, and using AI coding assistants as currently designed makes this impossible. Beyond that, even when the "assistant" just introduces bugs using syntax the students understand, even through their 4th year many students struggle to understand the operation of moderately complex code they've written themselves, let alone written by someone else. Having access to an AI that will confidently offer incorrect explanations for bugs will make this worse.
To be sure a small minority of students will be able to overcome these problems, but that minority is the group that has a good grasp of the fundamentals and has broadened their knowledge through self-study, which earlier AI-reliant classes would make less likely to happen. In any case, I care about the average student, since we already have plenty of stuff about our institutions that makes life easier for a favored few while being worse for the average student (note that our construction of that favored few as the "good" students is a large part of this problem).
To summarize: because AI assistants introduce excess code complexity and difficult-to-debug bugs, they'll slow down rather than speed up project progress for the average student on moderately complex projects. On a fixed deadline, they'll result in worse projects, or necessitate less ambitious project scoping to ensure adequate completion, and I expect this remains broadly true through 4-6 years of study in most programs (don't take this as an endorsement of AI "assistants" for masters students; we've ignored a lot of other problems along the way).
There's a related problem: solving open-ended project assignments well ultimately depends on deeply understanding the problem, and AI "assistants" allow students to put a lot of code in their file without spending much time thinking about the problem or building an understanding of it. This is awful for learning outcomes, but also bad for project success. Getting students to see the value of thinking deeply about a problem is a thorny pedagogical puzzle at the best of times, and allowing the use of AI "assistants" makes the problem much much worse. This is another area I hope to see (or even drive) pedagogical improvement in, for what it's worth.
1/2