A cache is a small, fast plate that can only hold a sliver of memory, so it bets on locality: programs reuse what they just touched (temporal) and touch what sits nearby (spatial). Each line pulls in a whole block of neighbours, so a sequential sweep pays one miss and then rides a run of hits.
Every address maps to exactly one set by its middle bits. In a direct-mapped cache each set holds one line, so two hot addresses that share a set evict each other on every pass — a conflict miss. Stride through memory in a power-of-two step and you can make almost every access land in the same few sets: the plate collapses to one strobing column and the hit rate craters, even though the data would easily fit.
The fix is cheap. One extra way of associativity lets a set hold two lines, and the two rivals coexist — the thrash vanishes. The dashed ghost on the meter is the same cache made fully associative: the gap between it and your hit rate is pure conflict, and a way of associativity is how you erase it without paying for a bigger cache.
The simulation stopped unexpectedly — the lesson continues without it. You can move on; nothing you did was wrong.