Editorial illustration: Pasur bot decisions from capture options

Pasur bot decisions from capture options

The problem I needed to solve

My teammate’s Pasur bot chooses among legal options without inspecting hidden opposing cards. That information boundary mattered more to me during integration than the artificial-intelligence label.

Implementation in this snapshot

PasurBotStrategy.ChooseMove evaluates its own cards and their captures. EvaluateCapture scores card points, clubs, reaching seven clubs and Sur.

The design decision and its cost

Without a capture, EvaluateDiscard estimates discard cost. Preserving jacks and avoiding valuable giveaways enter its heuristics; the result contains the actual CardInstance and selected captured set.

Current boundaries

This is a weighted one-step choice, not complete game search or a trained model. Its weights are not benchmark results or guarantees of bot strength.

Review scenarios and contract meaning

To understand a bot decision, I first need the legal options in that state. Its own hand and the visible table are decision inputs; this normal choice does not require hidden opposing cards. Card points, club counts and reaching seven clubs can give different values to captures that look similar. Sur also influences evaluation. ChooseMove returns the actual card instance and captured set, allowing the runner to execute that choice rather than guess again from a move label.

When no capture exists, the problem becomes choosing a discard. Preserving a jack or avoiding a valuable giveaway contributes simple costs, but this is not complete future-game search. Weights are design judgments; numbers in an evaluation function do not establish competitive quality or a win rate. States with several legal captures, no capture, or proximity to the club target are useful integration review scenarios. I present them as ways to understand behavior, not completed test results. My teammate’s explainable strategy keeps the information boundary and reason for a choice clear without being described as a trained model.

Explainable weights do not make every outcome obvious. Two options can score closely and a weight change can move a particular decision boundary. Future review benefits from reading each option’s contribution in a specific state. That supports tuning my teammate’s strategy around known behavior rather than claiming general intelligence or judging from one match.

What this stage taught me

For me, an explainable strategy is easier to integrate. I can inspect why an option gains value and what public information it uses without inferring quality from Bot or claiming my teammate’s work.

Explore Dalo

Latest devlogs

Editorial illustration: Integrating the Pasur work of my teammate

Integrating the Pasur work of my teammate

My teammate wrote Pasur. My role in Dalo’s narrative is explaining how that work joins the shared structure, rather than claiming his gameplay implementation as my own.

Read article
Editorial illustration: A real choice between Joker’s final two players

A real choice between Joker’s final two players

With two players holding two and one cards, some turns force a draw without a choice. I made that case an explicit count-based rule.

Read article
Editorial illustration: Drawing a Joker card as a transaction

Drawing a Joker card as a transaction

A Joker draw has several stages: transfer, a possible pair, shuffle and turn progression. Accepting unrelated requests at each stage could separate model and presentation.

Read article
Dalo