Ramping deck analysis

This commit is contained in:
Correl Roush 2010-09-22 21:26:05 -04:00
parent 79ab9c0f0d
commit 5d7e896415
3 changed files with 38 additions and 2 deletions

View file

@ -1,6 +1,6 @@
import re import re
from django.db import models from django.db import models
from mtgweb.lib.mtg import mtg from mtgweb.lib.mtg import mtg, analyze
# Create your models here. # Create your models here.
class CardType(models.Model): class CardType(models.Model):
@ -87,6 +87,28 @@ class Deck(models.Model):
else: else:
curve[cost] += included.count curve[cost] += included.count
return curve return curve
def ramp(self, type=None):
ramp = {}
deck_size = sum([i.count for i in self.included_set.all()])
lands = sum([i.count for i in self.included_set.all() if 'land' in i.card.type.name.split(' ')])
if type:
cards = [i for i in self.included_set.all() if type in i.card.type.name.split(' ')]
else:
cards = [i for i in self.included_set.all() if 'land' not in i.card.type.name.split(' ')]
card_count = sum([i.count for i in cards])
card_costs = sum([i.count * mtg.ManaCost(i.card.cost).converted() for i in cards])
max_cost = max([mtg.ManaCost(i.card.cost).converted() for i in cards])
avg_cost = card_costs / float(card_count)
avg_cost = int(round(avg_cost))
turns = []
for turn in range(avg_cost, max_cost + 1):
castable = sum([i.count for i in cards if mtg.ManaCost(i.card.cost).converted() <= turn])
p_land = 1 - analyze.draw_probability(lands, deck_size, avg_cost, turn)
p_spell = 1 - analyze.draw_probability(castable, deck_size, 1, turn, avg_cost)
probability = 1 - p_land - p_spell
turns.append({'turn': turn, 'probability': probability * 100})
return turns
class Included(models.Model): class Included(models.Model):
card = models.ForeignKey(Card) card = models.ForeignKey(Card)
deck = models.ForeignKey(Deck) deck = models.ForeignKey(Deck)

View file

@ -35,6 +35,20 @@ def detail(request, id):
symbol_chart.set_pie_labels([mtg.Mana.types[m] for m in symbols.keys()]) symbol_chart.set_pie_labels([mtg.Mana.types[m] for m in symbols.keys()])
symbol_chart.set_colours([colors[m] for m in symbols.keys()]) symbol_chart.set_colours([colors[m] for m in symbols.keys()])
ramp_data = deck.ramp()
min_range = min([t['probability'] for t in ramp_data]) // 5 * 5
ramp_chart = SimpleLineChart(250, 100, y_range=[min_range, 100])
ramp_chart.fill_solid(SimpleLineChart.BACKGROUND, 'FFFFFF00')
ramp_chart.add_data([t['probability'] for t in ramp_data])
labels_left = range(min_range, 100, (100 - min_range) // 5)
labels_left[0] = ''
ramp_chart.set_axis_labels(Axis.LEFT, labels_left)
ramp_chart.set_axis_labels(Axis.BOTTOM, ['Turn {0}'.format(t['turn']) for t in ramp_data])
for i in range(len(ramp_data)):
p = ramp_data[i]['probability']
ramp_chart.add_marker(0, i, 'd', '000000', 5)
#ramp_chart.add_marker(0, i, 't{0}%'.format(round(p)), '000000', 10)
curve = deck.mana_curve() curve = deck.mana_curve()
for i in range(max(curve.keys()) + 1): for i in range(max(curve.keys()) + 1):
if i not in curve: if i not in curve:

@ -1 +1 @@
Subproject commit d5206fc6df410836b0b24d1e8d9eae34e4a1ea65 Subproject commit 9b5f01ab8b5701e1e3222ab6a29f728f82fbc0cb