Advertisement
makispaiktis

Roulette Original - Animation

May 28th, 2022
1,274
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from random import randrange
  2. from matplotlib import pyplot as plt
  3. import numpy as np
  4. import matplotlib.animation as animation
  5.  
  6. # Function 1
  7. def simulate():
  8.     # I will create a random number from 0 to 5. If it is 0 ---> win
  9.     # I will count the times that are needed till someone wins
  10.     r = randrange(6)
  11.     counter = 1
  12.     while r != 0:
  13.         r = randrange(6)
  14.         counter += 1
  15.     if counter % 2 == 1:
  16.         return "A", counter
  17.     return "B", counter
  18.  
  19. # Function 2
  20. def simulate_rounds(SIMS):
  21.     wins_A = 0
  22.     rounds = list()
  23.     for SIM in range(SIMS):
  24.         winner, counter = simulate()
  25.         print("Round " + str(SIM + 1) + " ---> " + winner)
  26.         if winner == "A":
  27.             wins_A += 1
  28.         rounds.append(counter)
  29.  
  30.     print()
  31.     perc_A = 100 * wins_A / SIMS
  32.     print("Simulations: " + str(SIMS))
  33.     print("A wins: " + str(wins_A) + " (" + str(perc_A) + " %)")
  34.     print("A wins: " + str(wins_A) + " (" + str(100 - perc_A) + " %)")
  35.     return rounds
  36.  
  37.  
  38. def prepare_animation(bar_container):
  39.  
  40.     def animate(frame_number):
  41.         # simulate new data coming in
  42.         for count, rect in zip(n, bar_container.patches):
  43.             rect.set_height(count)
  44.         return bar_container.patches
  45.     return animate
  46.  
  47.  
  48.  
  49. # MAIN FUNCTION
  50. print("Roulette Original")
  51. print("PLayer A first shots at player B. If he shots correctly, game is over.")
  52. print("If player A misses, then player B shots. If he also misses, then A plays again and so on.")
  53. print()
  54. print()
  55. SIMS = 10**4
  56. rounds = simulate_rounds(SIMS)
  57. HIST_BINS = np.linspace(1, 100, 100)
  58. n, _ = np.histogram(rounds, HIST_BINS)
  59. plt.hist(rounds, 10)
  60. plt.figure()
  61. fig, ax = plt.subplots()
  62. _, _, bar_container = ax.hist(rounds, HIST_BINS, lw=1,
  63.                               ec="yellow", fc="green", alpha=0.5)
  64. ax.set_ylim(top=70)  # set safe limit to ensure that all data is visible.
  65.  
  66. ani = animation.FuncAnimation(fig, prepare_animation(bar_container), 50,
  67.                               repeat=False, blit=True)
  68. plt.show()
Advertisement
RAW Paste Data Copied
Advertisement