Tag Archives: statistics

Detailed card statistics in the deck simulator

In addition to the 50-some cards I added to version 1.3 of Deck Simulator for Hearthstone, I also included a new feature where detailed statistics are tracked for each card and displayed in the “Game log” window at the end of the simulation, organized by deck.

I’ll give a few examples to explain what these statistics mean and how to interpret them:

  •  (Fireball): draw = 72%, play = 54%, att =  0%, died =  0%, dam = 3.268232

I think most of you already know “Fireball”, but just in case it’s a neutral spell that deals 6 damage to any minion or player for a cost of 4.

“draw” here represents the percentage of games in which a Fireball card was drawn. This includes even if the card is redrawn initially, or if the card is drawn and not used. Generally speaking, this number is a function of the number of the card in the deck (either 1 or 2) and how long the average game lasts. It doesn’t mean too much on its own, but is useful when combined with the other stats.

“play” here represents the percentage of games in which Fireball is played (cast). It must be less than or equal to the “draw” figure, since you can’t typically play a card without drawing it (except for a few special cases). If this figure is much lower than “draw”, then that usually means there wasn’t frequently enough mana to play the card or a good opportunity to play it.

“att”, “died” represent the number of times this card attacked or died in a game. It only applies for minions and is therefore 0% for spells like Fireball. “att” can be higher than “play” since a minion can attack several times a game if it stays alive or has windfury.

“dam” represents the total amount of damage this card dealt on average in all simulated games in the current run. For cards like spells you can sometimes figure this out from the other statistics (i.e. for this card we see that 6 x 0.54 = ~3.2), but for minions this number is a bit tricker since it includes damage both from battlecries, deathrattles, as well as attacking.

  • (Ragnaros the Firelord): draw = 71%, play = 52%, att =  0%, died = 21%, dam = 7.480020

Ragnaros, one of my most favorite cards, is a unique case since it is a minion but can’t attack, and so “att” statistic is 0%. However, since it does deal 8 damage at the end of your turn, the “dam” statistic is non-zero (around 7.5).

If you think about these statistics can you can draw some conclusions. For example, Ragnaros deals 8 at the end of each turn, yet it dealt around 7.5 on average. Putting this together with the fact that it was only played around half of games (52%), this implies that it dealt damage roughly twice per game, and was alive about two turns.

However, since it only died less than half of the time it was played (21% vs 52%), why didn’t it typically live more than two turns? Easy – this means that the game tended to end around two or three turns after Ragnaros was played, and I’m betting it was often in favor of the player who managed to play this great card.

  • (Elven Archer): draw = 64%, play = 63%, att = 38%, died = 58%, dam = 1.183317

In the case of Ragnaros, the card was played roughly 73% of the time (= 52%/71%) it was drawn, which is actually pretty high considering it costs 8. But if you look at Elven Archer (1 1/1 for cost of 1 with 1 damage during battlecry), it was played roughly 98% (= 63%/64%) of the time. This makes sense because it’s cost is so low.

With only a one in toughness, it died most of the time (58% / 64% = 90%) and only managed to deal 1.18 damage per game. This translates to 1.18 / 63% = 1.873 damage when it was played, and 1.0 of that is from the battlecry. However you shouldn’t jump to conclusions that this card was useless since it did so little damage-wise, because that would discount the preventative effect it might be having to kill enemy attackers or other minions that are part of dangerous combos.

You may be wondering why the draw rate is not higher than Ragnaros, the reason is because I have only one of this card in the deck (same as Ragnaros).


These stats take some time to understand but I’m hoping many people will find them useful or at least interesting. For starters you can use the damage stat to see which cards are pulling their own weight and which are slacking, and tweak your deck to improve your overall win rate. And if you get creative, the sky is the limit!


Detailed per-participant statistics in the HS deck simulator

One of the new features in Deck Simulator for Hearthstone 1.2 is the ability to look at statistics for individual participants on the ‘Simulation’ screen. This can be done by clicking on the participant’s name in the bottom table either during or after the simulation finishes.

If you click on one of these you’ll see a window which gives this type of information:

  • Details for ‘Evl. Planner (med) > R’s Paladin Deck 1’ [deck rating 1805]
    • 62 % [avg turns 10] VS Evl. Planner (med) > Evolved Paladin 205
    • 30 % [avg turns 9] VS Evl. Planner (med) > Evolved Paladin 215

I’ve bolded the important information in the above excerpt and will describe these below:

  • Win rate against a specific other participant, which is listed as “VS XXX” on the same line.
  • Average number of turns the game lasted before the game ended

The first of these is useful if you are running a simulation in ‘all play all’ mode because the percentage you get on the simulations screen is the average number of wins vs. all other participants, so clicking on that participant will give you information about which decks/players it is strong against and which is is weak against. Another way to check this is just run a ‘all play first’ mode in which the first listed participant plays each other.

The average number of turns the game lasted is interesting since some decks are designed to win after a long, drawn-out game and others to crush quickly, so you can use this number to get some feel for that.

One thing to keep in mind is that if you view the detailed stats while a simulation is in progress it will continue running (and update behind the window), but the window’s stats will not update in real time.

In the future I may add some more information here about each participant. If you have any suggestions, please let me know.

In my next post I’ll talk about the ‘deck rating’ which was mentioned in the above example.


RNG, Hearthstone, and the simulator

The other day I was speaking with a friend and when I mentioned Hearthstone he immediately said “I don’t like Hearthstone very much because there is too much RNG”.

RNG, which stands for “Random Number Generation”, is defined by Hearthstone Wiki as “the unpredictable outcome of a situation featuring a significantly randomized element”. In other words, the more RNG there is, the more possibility that your win or loss was a result of random odds as opposed to purposeful strategy and good deck construction. Chess would be an example of a game with zero RNG since it’s completely non-random, and a slot machine would be an example of a game that is nearly 100% RNG. All card games that involve shuffling have RNG to a certain extent.

I would agree that there is a major element of randomness in Hearthstone. After all, every game you start with a hand that is random drawn from your 30-card deck, and many card effects have a major random element. For example, Arcane Missles, which deals 3 damage randomly split among characters. Or one of my favorite cards, Ragnaros the Firelord, which deals 8 damage to a random player or minion.

Surely, there are things which offset the randomness of the game, such as the redraw system, and a strategic player who calculates correctly can make choices where the outcome of random effects is most likely to benefit them – for example killing off certain minions and letting random effects take down the remaining ones.

Having said that, I would argue that the result of a single game between two decks in Hearthstone doesn’t say too much about either the strength of the decks or the ability of the players. I actually think in this case the number of turns before the game ended more accurately predicts how close the decks are in strength. The more turns the loser managed to stay alive, the closer the decks are.

The realization that Hearthstone contains a good amount of RNG is another thing that motivated me to create Deck Simulator for Hearthstone. Surely playing a handful of matches with a real opponent gives you some idea of the strengths of each deck and player, but what if you could to run 100, even 1000 games in a matter of seconds or minutes?

That is exactly what the simulator allows, and even if the AI players are not exactly ‘ideal’ in terms of playing the perfect move in all situations, as long as they play reasonably good moves the win/loss ratio between two decks should give a good indication of which deck is stronger.

As I mentioned in the last post, the number of games played between each to pairings during a simulation is determined by the “Matches per pairing” slider, which defaults to 20. The reason I set 20 as the default is I felt it was the lowest value that gave some a good estimate of the relative deck strengths. Any less than that and RNG takes over and the result isn’t too statistically meaningful.

The maximum matches per pairing which permitted in the simulator is 1000, which should give a very accurate idea of deck’s relative strengths. However, depending on the  AI players you have chosen and the speed of your device, this could take quite some time (an hour or more).

Therefore, effective use of the simulator requires picking a good number of matches per pairing. Here are my general recommendations:


20: Use this if you want a very, very rough estimation of the decks’ strengths

100: Use this for a rough estimate that carries more weight

200-300: A good middle ground for simulation accuracy vs wait time. This is the most you’ll need for most situations.

1000: Only needed when you really want to be sure the relative strengths of decks, such as when you decide to craft new cards to make a new deck or improve an old one. I recommend limiting the number of participants to 2 only a small handful to avoid long simulation wait times.


While there are several different ways to measure statistical reliability and I may add some of these in upcoming releases, there is a very simple way to check how accurate your results are. Do a full simulation run then take a screenshot to capture the top of the results table. Then re-run the simulation (via the green “Restart simulation” button on the top right part of the simulation screen) and take another snapshot. You can do the same thing again two or three more times if you like.

Then compare the results of each simulation run. The less number of matches you use, the more variation you will see between simulation results. If you see one run where a certain deck is #1 (highest on the results list) and another where it is #5, you know you need to increase your number of runs and try again. You should aim for a number of matches where the general ranking and order is mostly consistent, but the win ratios can be a few percentages different between simulation runs.

I’m curious to hear about your experiences using the simulator and what sorts of parameters and simulation types you’re using, so please feel free to comment to this post!

(Just for the record, I don’t think Hearthstone has too much RNG, but rather a reasonable amount of it given it is a card game)




(Featured image of Hearthstone card “Ragnaros the Fireload”, taken from Hearthstone wiki (http://hearthstone.gamepedia.com/Ragnaros_the_Firelord) but is trademarked and copyrighted by Blizzard Entertainment)