MagicGrove - Play magic against computer

Hi all,
MagicGrove is a game that I wrote for fun, it lets you play mtg against computer opponent.
My goal was to produce a game playable as soon as possible, but it took about a year and a half anyway
I made a lot of bad decisions which cost me plenty of rewritting. At the beggining I did not think about how I would implement AI and that was an expensive mistake. I borrowed many ideas from magarena, most importantly its usage of the undo system for the search tree traversal. The codebase of magarenea is a great place to learn the core things about mtg programming and I would recommend it to everyone.
AI
The AI uses a minmax algorithm with some additional tweaks to reduce the search space (equal states prunning, target scoring, spell timming) and is capable of looking 12 steps ahead in under 2 seconds most of the time. I plan to improve its performance so that it would consider 2 turns ahead in roughly the same time.
Cards
Cards are defined in C#. I started with xml, but soon abandoned it. In the future the definitions could be in some clr compatible scripting language (e.g. Boo).
Example of card:
Release 1.0 has 73 cards and supports 4 decks from magarena. Cards with similar mechanincs can be added very quickly.
Screenshots
Source & Binaries
code(dot)google(dot)com/p/magicgrove/
Any comments & feedback are very welcome.
MagicGrove is a game that I wrote for fun, it lets you play mtg against computer opponent.
My goal was to produce a game playable as soon as possible, but it took about a year and a half anyway

AI
The AI uses a minmax algorithm with some additional tweaks to reduce the search space (equal states prunning, target scoring, spell timming) and is capable of looking 12 steps ahead in under 2 seconds most of the time. I plan to improve its performance so that it would consider 2 turns ahead in roughly the same time.
Cards
Cards are defined in C#. I started with xml, but soon abandoned it. In the future the definitions could be in some clr compatible scripting language (e.g. Boo).
Example of card:
- Code: Select all
public class Shock : CardsSource
{
public override IEnumerable<ICardFactory> GetCards()
{
yield return C.Card
.Named("Shock")
.ManaCost("{R}")
.Type("Instant")
.Timing(Timings.InstantRemoval)
.Text("Shock deals 2 damage to target creature or player.")
.Effect<DealDamageToTarget>((e, _) => e.Amount = 2)
.Category(EffectCategories.DamageDealing)
.Target(C.Selector(
validator: target => target.IsPlayer() || target.Is().Creature,
scorer: TargetScores.OpponentStuffScoresMore(spellsDamage: 2)));
}
}
Release 1.0 has 73 cards and supports 4 decks from magarena. Cards with similar mechanincs can be added very quickly.
Screenshots
Source & Binaries
code(dot)google(dot)com/p/magicgrove/
Any comments & feedback are very welcome.