Guest User

Untitled

a guest
May 22nd, 2021
13
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import math
  2. import random
  3. import csv
  4. import re
  5.  
  6. #load players
  7. players = []
  8. with open('players.csv', newline='') as csvfile:
  9. reader = csv.reader(csvfile, delimiter=',')
  10. for row in reader:
  11. players.append(row)
  12.  
  13. #special rounding where X.YZ has a YZ% chance of being X+1 and a 1-YZ% chance of being X
  14. def weightedround(x):
  15. adjust_floor = math.floor(x)
  16. adjust_ceiling = adjust_floor + 1
  17. roll = random.uniform(adjust_floor,adjust_ceiling)
  18. if roll < x:
  19. result = adjust_ceiling
  20. else:
  21. result = adjust_floor
  22. return result
  23.  
  24. #get rosters and other gameplan options
  25. away_att = [1,2]
  26. away_mid = [3,4,5]
  27. away_def = [6,7,8]
  28. away_keep = [9]
  29. away_keepdepth = [3,3,3,2,2,1]
  30. home_att = [10,11,12]
  31. home_mid = [13,14]
  32. home_def = [15,16,17]
  33. home_keep = [18]
  34. home_keepdepth = [3,2,2,2,1,1]
  35.  
  36. away_roster = []
  37. away_stats = []
  38. home_roster = []
  39. home_stats = []
  40.  
  41. away_score = 0
  42. home_score = 0
  43.  
  44. for i in away_att:
  45. index = int(players[i][0])
  46. position = players[i][1]
  47. name = players[i][2]
  48. traits = players[i][8]
  49. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  50. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  51. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  52. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  53. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  54. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  55. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  56. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  57. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  58. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  59. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  60. AGG = int(players[i][34])
  61. away_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  62. ##0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  63. away_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  64. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  65. for i in away_mid:
  66. index = int(players[i][0])
  67. position = players[i][1]
  68. name = players[i][2]
  69. traits = players[i][8]
  70. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  71. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  72. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  73. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  74. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  75. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  76. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  77. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  78. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  79. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  80. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  81. AGG = int(players[i][34])
  82. away_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  83. away_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  84. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  85. for i in away_def:
  86. index = int(players[i][0])
  87. position = players[i][1]
  88. name = players[i][2]
  89. traits = players[i][8]
  90. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  91. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  92. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  93. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  94. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  95. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  96. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  97. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  98. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  99. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  100. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  101. AGG = int(players[i][34])
  102. away_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  103. away_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  104. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  105. for i in away_keep:
  106. index = int(players[i][0])
  107. position = players[i][1]
  108. name = players[i][2]
  109. traits = players[i][8]
  110. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  111. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  112. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  113. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  114. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  115. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  116. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  117. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  118. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  119. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  120. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  121. AGG = int(players[i][34])
  122. away_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  123. away_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  124. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  125. for i in home_att:
  126. index = int(players[i][0])
  127. position = players[i][1]
  128. name = players[i][2]
  129. traits = players[i][8]
  130. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  131. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  132. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  133. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  134. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  135. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  136. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  137. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  138. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  139. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  140. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  141. AGG = int(players[i][34])
  142. home_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  143. home_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  144. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  145. for i in home_mid:
  146. index = int(players[i][0])
  147. position = players[i][1]
  148. name = players[i][2]
  149. traits = players[i][8]
  150. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  151. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  152. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  153. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  154. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  155. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  156. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  157. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  158. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  159. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  160. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  161. AGG = int(players[i][34])
  162. home_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  163. home_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  164. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  165. for i in home_def:
  166. index = int(players[i][0])
  167. position = players[i][1]
  168. name = players[i][2]
  169. traits = players[i][8]
  170. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  171. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  172. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  173. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  174. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  175. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  176. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  177. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  178. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  179. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  180. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  181. AGG = int(players[i][34])
  182. home_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  183. home_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  184. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  185. for i in home_keep:
  186. index = int(players[i][0])
  187. position = players[i][1]
  188. name = players[i][2]
  189. traits = players[i][8]
  190. POS = round(int(players[i][12])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][13])-int(players[i][12])),2)
  191. REA = round(int(players[i][14])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][15])-int(players[i][14])),2)
  192. HAN = round(int(players[i][16])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][17])-int(players[i][16])),2)
  193. MAR = round(int(players[i][18])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][19])-int(players[i][18])),2)
  194. TAC = round(int(players[i][20])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][21])-int(players[i][20])),2)
  195. PAS = round(int(players[i][22])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][23])-int(players[i][22])),2)
  196. DRI = round(int(players[i][24])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][25])-int(players[i][24])),2)
  197. OFF = round(int(players[i][26])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][27])-int(players[i][26])),2)
  198. VIS = round(int(players[i][28])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][29])-int(players[i][28])),2)
  199. FIN = round(int(players[i][30])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][31])-int(players[i][30])),2)
  200. ACC = round(int(players[i][32])+random.gauss(0,0.25)+random.gauss(0.15,0.05)*(int(players[i][33])-int(players[i][32])),2)
  201. AGG = int(players[i][34])
  202. home_roster.append([index,position,name,traits,POS,REA,HAN,MAR,TAC,PAS,DRI,OFF,VIS,FIN,ACC,AGG])
  203. ##0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  204. home_stats.append([index,position,name,0,0,0,0,0,0,0,0,0,0])
  205. ##0 1 2 3 goal attempt, 4 goal on target, 5 goal made, 6 pass attempt, 7 pass made, 8 tackle attempt, 9 tackle made, 10 interceptions, 11 shots against, 12 shots allowed
  206. print(away_roster)
  207. print(home_roster)
  208.  
  209. #roll extra time
  210. extra_time = round(max(random.gauss(150,45),0))
  211. time = 1800 + extra_time
  212. print("The first half will be 30 minutes and feature",extra_time // 60,"minutes and",extra_time % 60,"seconds of extra time")
  213.  
  214. #get kickoff possession
  215. def kickoff(x):
  216. global possession
  217. global depth
  218. global offense
  219. global time
  220. depth = 2
  221. if x == "Home":
  222. i = 0
  223. while i < len(home_roster):
  224. x = home_roster[i][0]
  225. if x == home_mid[0]:
  226. possession = i
  227. i += 1
  228. else:
  229. i += 1
  230. if time - extra_time <= 0:
  231. minutes = str((time - extra_time) // 60)
  232. seconds = str(-1*(time - extra_time) % 60)
  233. timelist = [minutes,":",seconds.zfill(2)]
  234. else:
  235. minutes = str((time - extra_time) // 60)
  236. seconds = str((time - extra_time) % 60)
  237. timelist = [minutes,":",seconds.zfill(2)]
  238. print("".join(timelist)," And there's the kickoff, with",home_roster[possession][2],"takes possession")
  239. elif x == "Away":
  240. i = 0
  241. while i < len(away_roster):
  242. x = away_roster[i][0]
  243. if x == away_mid[0]:
  244. possession = i
  245. i += 1
  246. else:
  247. i += 1
  248. if time - extra_time <= 0:
  249. minutes = str((time - extra_time) // 60)
  250. seconds = str(-1*(time - extra_time) % 60)
  251. timelist = [minutes,":",seconds.zfill(2)]
  252. else:
  253. minutes = str((time - extra_time) // 60)
  254. seconds = str((time - extra_time) % 60)
  255. timelist = [minutes,":",seconds.zfill(2)]
  256. print("".join(timelist)," And there's the kickoff, with",away_roster[possession][2],"takes possession")
  257.  
  258. #if they'll take a shot
  259. def takeshot(x):
  260. global offense
  261. global possession
  262. global time
  263. take_roll = random.randint(1,60 - x*10)
  264. if offense == "Home":
  265. y = home_roster[possession][15]
  266. if take_roll > y:
  267. result = False
  268. elif take_roll <= y:
  269. result = True
  270. home_stats[possession][3] += 1
  271. elif offense == "Away":
  272. y = away_roster[possession][15]
  273. if take_roll > y:
  274. result = False
  275. elif take_roll <= y:
  276. result = True
  277. away_stats[possession][3] += 1
  278. return result
  279.  
  280. #is shot on target
  281. def ontarget():
  282. global offense
  283. global possession
  284. global depth
  285. global time
  286. target_roll = random.randint(1,15 + depth * 15)
  287. if offense == "Home":
  288. y = weightedround(home_roster[possession][14])
  289. if target_roll > y:
  290. result = False
  291. elif target_roll <= y:
  292. result = True
  293. home_stats[possession][4] += 1
  294. elif offense == "Away":
  295. y = weightedround(away_roster[possession][14])
  296. if target_roll > y:
  297. result = False
  298. elif target_roll <= y:
  299. result = True
  300. away_stats[possession][4] += 1
  301. time -= weightedround(random.gauss(6,1))
  302. print(target_roll,y)
  303. return result
  304.  
  305. #is it good
  306. def goal():
  307. global offense
  308. global possession
  309. global depth
  310. global time
  311. global away_score
  312. global home_score
  313. global time
  314. if time - extra_time <= 0:
  315. minutes = str((time - extra_time) // 60)
  316. seconds = str(-1*(time - extra_time) % 60)
  317. timelist = [minutes,":",seconds.zfill(2)]
  318. else:
  319. minutes = str((time - extra_time) // 60)
  320. seconds = str((time - extra_time) % 60)
  321. timelist = [minutes,":",seconds.zfill(2)]
  322. if offense == "Home":
  323. away_stats[8][11] +=1
  324. shot_roll = random.randint(0,20)+weightedround(random.gauss(home_roster[possession][13],0.25))
  325. keeper_roll = max(random.randint(0,30),weightedround(random.gauss(away_roster[8][4],0.25)))+weightedround(random.gauss(away_roster[8][5],0.25))
  326. if shot_roll > keeper_roll:
  327. result = True
  328. away_stats[8][12] +=1
  329. home_stats[possession][5] +=1
  330. home_score += 1
  331. print("".join(timelist)," AND IT GETS PAST THE KEEPER!",home_roster[possession][2],"scores! The score is now","-".join([str(away_score),str(home_score)]))
  332. time -= weightedround(random.gauss(60,10))
  333. else:
  334. result = False
  335. print("And the keeper grabs it!")
  336.  
  337. elif offense == "Away":
  338. home_stats[8][11] +=1
  339. shot_roll = random.randint(0,20)+weightedround(random.gauss(away_roster[possession][13],0.25))
  340. keeper_roll = max(random.randint(0,30),weightedround(random.gauss(home_roster[8][4],0.25)))+weightedround(random.gauss(home_roster[8][5],0.25))
  341. if shot_roll > keeper_roll:
  342. result = True
  343. home_stats[8][12] +=1
  344. away_stats[possession][5] +=1
  345. away_score += 1
  346. print("".join(timelist)," AND IT GETS PAST THE KEEPER!",away_roster[possession][2],"scores! The score is now","-".join([str(away_score),str(home_score)]))
  347. time -= weightedround(random.gauss(60,10))
  348. else:
  349. result = False
  350. print("And the keeper grabs it!")
  351. print("shot:",shot_roll,"keep:",keeper_roll)
  352. return result
  353.  
  354. #Determining who's guarding who
  355. def marking():
  356. global possession
  357. global offense
  358. global marking_off
  359. global marking_def
  360. global depth
  361. global time
  362. away_att2 = away_att[:]
  363. away_mid2 = away_mid[:]
  364. away_def2 = away_def[:]
  365. home_att2 = home_att[:]
  366. home_mid2 = home_mid[:]
  367. home_def2 = home_def[:]
  368. marking_off = []
  369. marking_def = []
  370. if offense == "Home":
  371. i = 0
  372. while i < len(home_att2):
  373. q = home_att2[i]
  374. t = 0
  375. while t < len(home_roster):
  376. y = home_roster[t][0]
  377. if y == q:
  378. r = t
  379. t += 1
  380. else:
  381. t += 1
  382. marking_off.append(r)
  383. try:
  384. z = random.choice(away_def2)
  385. away_def2.remove(z)
  386. except:
  387. z = random.choice(away_mid2)
  388. away_mid2.remove(z)
  389. t = 0
  390. while t < len(away_roster):
  391. y = away_roster[t][0]
  392. if y == z:
  393. s = t
  394. t += 1
  395. else:
  396. t += 1
  397. marking_def.append(s)
  398. i += 1
  399. i = 0
  400. while i < len(home_mid2):
  401. q = home_mid2[i]
  402. t = 0
  403. while t < len(home_roster):
  404. y = home_roster[t][0]
  405. if y == q:
  406. r = t
  407. t += 1
  408. else:
  409. t += 1
  410. marking_off.append(r)
  411. try:
  412. try:
  413. z = random.choice(away_def2)
  414. away_def2.remove(z)
  415. except:
  416. z = random.choice(away_mid2)
  417. away_mid2.remove(z)
  418. except:
  419. z = random.choice(away_att2)
  420. away_att2.remove(z)
  421. t = 0
  422. while t < len(away_roster):
  423. y = away_roster[t][0]
  424. if y == z:
  425. s = t
  426. t += 1
  427. else:
  428. t += 1
  429. marking_def.append(s)
  430. i += 1
  431. i = 0
  432. while i < len(home_def2):
  433. q = home_def2[i]
  434. t = 0
  435. while t < len(home_roster):
  436. y = home_roster[t][0]
  437. if y == q:
  438. r = t
  439. t += 1
  440. else:
  441. t += 1
  442. marking_off.append(r)
  443. try:
  444. z = random.choice(away_mid2)
  445. away_mid2.remove(z)
  446. except:
  447. z = random.choice(away_att2)
  448. away_att2.remove(z)
  449. t = 0
  450. while t < len(away_roster):
  451. y = away_roster[t][0]
  452. if y == z:
  453. s = t
  454. t += 1
  455. else:
  456. t += 1
  457. marking_def.append(s)
  458. i += 1
  459. elif offense == "Away":
  460. i = 0
  461. while i < len(away_att2):
  462. q = away_att2[i]
  463. t = 0
  464. while t < len(away_roster):
  465. y = away_roster[t][0]
  466. if y == q:
  467. r = t
  468. t += 1
  469. else:
  470. t += 1
  471. marking_off.append(r)
  472. try:
  473. z = random.choice(home_def2)
  474. home_def2.remove(z)
  475. except:
  476. z = random.choice(away_mid2)
  477. home_mid2.remove(z)
  478. t = 0
  479. while t < len(home_roster):
  480. y = home_roster[t][0]
  481. if y == z:
  482. s = t
  483. t += 1
  484. else:
  485. t += 1
  486. marking_def.append(s)
  487. i += 1
  488. i = 0
  489. while i < len(away_mid2):
  490. q = away_mid2[i]
  491. t = 0
  492. while t < len(away_roster):
  493. y = away_roster[t][0]
  494. if y == q:
  495. r = t
  496. t += 1
  497. else:
  498. t += 1
  499. marking_off.append(r)
  500. try:
  501. try:
  502. z = random.choice(home_def2)
  503. home_def2.remove(z)
  504. except:
  505. z = random.choice(home_mid2)
  506. home_mid2.remove(z)
  507. except:
  508. z = random.choice(home_att2)
  509. home_att2.remove(z)
  510. t = 0
  511. while t < len(home_roster):
  512. y = home_roster[t][0]
  513. if y == z:
  514. s = t
  515. t += 1
  516. else:
  517. t += 1
  518. marking_def.append(s)
  519. i += 1
  520. i = 0
  521. while i < len(away_def2):
  522. q = away_def2[i]
  523. t = 0
  524. while t < len(away_roster):
  525. y = away_roster[t][0]
  526. if y == q:
  527. r = t
  528. t += 1
  529. else:
  530. t += 1
  531. marking_off.append(r)
  532. try:
  533. z = random.choice(home_mid2)
  534. home_mid2.remove(z)
  535. except:
  536. z = random.choice(home_att2)
  537. home_att2.remove(z)
  538. t = 0
  539. while t < len(home_roster):
  540. y = home_roster[t][0]
  541. if y == z:
  542. s = t
  543. t += 1
  544. else:
  545. t += 1
  546. marking_def.append(s)
  547. i += 1
  548.  
  549. #dribble and tackle function
  550. def dribble():
  551. global possession
  552. global offense
  553. global depth
  554. global marking_off
  555. global marking_def
  556. global time
  557. z = marking_off.index(possession)
  558. y = marking_def[z]
  559. time -= weightedround(random.gauss(5,1.5))
  560. if offense == "Home":
  561. away_stats[y][8] += 1
  562. dribble_roll = random.randint(10,20)+weightedround(random.gauss(home_roster[possession][10],0.25))
  563. keeper_roll = random.randint(0,20)+weightedround(random.gauss(away_roster[y][5],0.25))
  564. if dribble_roll >= keeper_roll:
  565. result = True
  566. else:
  567. print(away_roster[y][2],"on the tackle and steals the ball from",home_roster[possession][2])
  568. result = False
  569. away_stats[y][9] +=1
  570. offense = "Away"
  571. possession = y
  572. elif offense == "Away":
  573. home_stats[y][8] += 1
  574. dribble_roll = random.randint(10,20)+weightedround(random.gauss(away_roster[possession][10],0.25))
  575. keeper_roll = random.randint(0,20)+weightedround(random.gauss(home_roster[y][5],0.25))
  576. if dribble_roll >= keeper_roll:
  577. result = True
  578. else:
  579. print(home_roster[y][2],"on the tackle and steals the ball from",away_roster[possession][2])
  580. result = False
  581. home_stats[y][9] +=1
  582. offense = "Home"
  583. possession = y
  584. return result
  585.  
  586. #passing
  587. def passattempt():
  588. global possession
  589. global offense
  590. global depth
  591. global marking_off
  592. global marking_def
  593. global time
  594. time -= weightedround(random.gauss(8,1.5))
  595. if depth == 3:
  596. x = random.choice([3,3,2,2])
  597. depth = x
  598. elif depth == 2:
  599. x = random.choice([3,2,2,2,1,1])
  600. depth = x
  601. elif depth == 1:
  602. x = random.choice([2,2,1,1])
  603. depth = x
  604. if offense == "Home":
  605. home_stats[possession][6] += 1
  606. if depth == 3:
  607. q = random.choice(home_def)
  608. elif depth == 2:
  609. q = random.choice(home_mid)
  610. elif depth == 1:
  611. q = random.choice(home_att)
  612. i = 0
  613. while i < len(home_roster):
  614. z = home_roster[i][0]
  615. if z == q:
  616. r = i
  617. i += 1
  618. else:
  619. i += 1
  620. z = marking_off.index(r)
  621. y = marking_def[z]
  622. pass_roll = random.randint(-10,10)+weightedround(random.gauss(home_roster[possession][9]-10,0.25))
  623. off_roll = random.randint(10,20)+weightedround(random.gauss(home_roster[z][11],0.25))
  624. marking_roll = random.randint(0,20)+weightedround(random.gauss(away_roster[y][7],0.25))
  625. pass_score = pass_roll + off_roll - marking_roll
  626. if pass_score < -20:
  627. result = 1
  628. elif -20 <= pass_score <= 0:
  629. result = 2
  630. away_stats[y][10] += 1
  631. possession = y
  632. offense = "Away"
  633. elif 0 < pass_score < 20:
  634. result = 3
  635. home_stats[possession][7] += 1
  636. possession = z
  637. elif pass_score >= 20:
  638. result = 4
  639. home_stats[possession][7] += 1
  640. possession = z
  641. elif offense == "Away":
  642. away_stats[possession][6] += 1
  643. if depth == 3:
  644. q = random.choice(away_def)
  645. elif depth == 2:
  646. q = random.choice(away_mid)
  647. elif depth == 1:
  648. q = random.choice(away_att)
  649. i = 0
  650. while i < len(away_roster):
  651. z = away_roster[i][0]
  652. if z == q:
  653. r = i
  654. i += 1
  655. else:
  656. i += 1
  657. z = marking_off.index(r)
  658. y = marking_def[z]
  659. pass_roll = random.randint(-10,10)+weightedround(random.gauss(away_roster[possession][9]-10,0.25))
  660. off_roll = random.randint(10,20)+weightedround(random.gauss(away_roster[z][11],0.25))
  661. marking_roll = random.randint(0,20)+weightedround(random.gauss(home_roster[y][7],0.25))
  662. pass_score = pass_roll + off_roll - marking_roll
  663. if pass_score < -20:
  664. result = 1
  665. elif -20 <= pass_score <= 0:
  666. result = 2
  667. home_stats[y][10] += 1
  668. possession = y
  669. offense = "Home"
  670. elif 0 < pass_score < 20:
  671. result = 3
  672. away_stats[possession][7] +=1
  673. possession = z
  674. elif pass_score >= 20:
  675. result = 4
  676. away_stats[possession][7] +=1
  677. possession = z
  678.  
  679. #change possession macro
  680. def changepossession(x):
  681. global possession
  682. global offense
  683. global depth
  684. global time
  685. if x == 1: ##Shots off target//Keeper catches
  686. i = 0
  687. if offense == "Away":
  688. offense = "Home"
  689. while i < len(home_roster):
  690. x = home_roster[i][0]
  691. if x == home_keep[0]:
  692. possession = i
  693. keeper = i
  694. i += 1
  695. else:
  696. i += 1
  697. if "Distributor" in home_roster[keeper][3]:
  698. distributor_bonus = 1
  699. else:
  700. distributor_bonus = 0
  701. t = random.choice(home_keepdepth)
  702. if t == 3: #return to defense
  703. q = random.choice(home_def)
  704. i = 0
  705. while i < len(home_roster):
  706. z = home_roster[i][0]
  707. if z == q:
  708. possession = i
  709. i += 1
  710. else:
  711. i += 1
  712. depth = 3
  713. print("Keeper",home_roster[keeper][2],"rolls the ball to his defender",home_roster[possession][2])
  714. elif t == 2: #return to midfield
  715. z = random.randint(1+distributor_bonus,4)
  716. if z > 2:
  717. q = random.choice(home_mid)
  718. i = 0
  719. while i < len(home_roster):
  720. z = home_roster[i][0]
  721. if z == q:
  722. possession = i
  723. i += 1
  724. else:
  725. i += 1
  726. depth = 2
  727. print("Keeper",home_roster[keeper][2],"boots the ball into the midfield where it's collected by",home_roster[possession][2])
  728. else:
  729. q = random.choice(away_mid)
  730. i = 0
  731. while i < len(away_roster):
  732. z = away_roster[i][0]
  733. if z == q:
  734. possession = i
  735. i += 1
  736. else:
  737. i += 1
  738. depth = 2
  739. offense = "Away"
  740. print("Keeper",home_roster[keeper][2],"boots the ball into the midfield, but it's stolen by",away_roster[possession][2])
  741. elif t == 1: #push on the attack
  742. z = random.randint(1+distributor_bonus,4)
  743. if z == 4:
  744. q = random.choice(home_att)
  745. i = 0
  746. while i < len(home_roster):
  747. z = home_roster[i][0]
  748. if z == q:
  749. possession = i
  750. i += 1
  751. else:
  752. i += 1
  753. depth = 1
  754. print("Keeper",home_roster[keeper][2],"pushes the ball deep into the attack and it connects to",home_roster[possession][2])
  755. else:
  756. q = random.choice(away_def)
  757. i = 0
  758. while i < len(away_roster):
  759. z = away_roster[i][0]
  760. if z == q:
  761. possession = i
  762. i += 1
  763. else:
  764. i += 1
  765. depth = 3
  766. offense = "Away"
  767. print("Keeper",home_roster[keeper][2],"launches the ball over his teammates where it's easily collected by",away_roster[possession][2])
  768. elif offense == "Home":
  769. offense = "Away"
  770. while i < len(away_roster):
  771. x = away_roster[i][0]
  772. if x == away_keep[0]:
  773. possession = i
  774. keeper = i
  775. i += 1
  776. else:
  777. i += 1
  778. if "Distributor" in away_roster[keeper][3]:
  779. distributor_bonus = 1
  780. else:
  781. distributor_bonus = 0
  782. t = random.choice(away_keepdepth)
  783. if t == 3: #return to defense
  784. q = random.choice(away_def)
  785. i = 0
  786. while i < len(away_roster):
  787. z = away_roster[i][0]
  788. if z == q:
  789. possession = i
  790. i += 1
  791. else:
  792. i += 1
  793. depth = 3
  794. print("Keeper",away_roster[keeper][2],"rolls the ball to his defender",away_roster[possession][2])
  795. elif t == 2: #return to midfield
  796. z = random.randint(1+distributor_bonus,4)
  797. if z > 2:
  798. q = random.choice(away_mid)
  799. i = 0
  800. while i < len(away_roster):
  801. z = away_roster[i][0]
  802. if z == q:
  803. possession = i
  804. i += 1
  805. else:
  806. i += 1
  807. depth = 2
  808. print("Keeper",away_roster[keeper][2],"boots the ball into the midfield where it's collected by",away_roster[possession][2])
  809. else:
  810. q = random.choice(home_mid)
  811. i = 0
  812. while i < len(home_roster):
  813. z = home_roster[i][0]
  814. if z == q:
  815. possession = i
  816. i += 1
  817. else:
  818. i += 1
  819. depth = 2
  820. offense = "Home"
  821. print("Keeper",away_roster[keeper][2],"boots the ball into the midfield, but it's stolen by",home_roster[possession][2])
  822. elif t == 1: #push on the attack
  823. z = random.randint(1+distributor_bonus,4)
  824. if z == 4:
  825. q = random.choice(away_att)
  826. i = 0
  827. while i < len(away_roster):
  828. z = away_roster[i][0]
  829. if z == q:
  830. possession = i
  831. i += 1
  832. else:
  833. i += 1
  834. depth = 1
  835. print("Keeper",away_roster[keeper][2],"pushes the ball deep into the attack and it connects to",away_roster[possession][2])
  836. else:
  837. q = random.choice(home_def)
  838. i = 0
  839. while i < len(home_roster):
  840. z = home_roster[i][0]
  841. if z == q:
  842. possession = i
  843. i += 1
  844. else:
  845. i += 1
  846. depth = 3
  847. offense = "Home"
  848. print("Keeper",away_roster[keeper][2],"launches the ball over his teammates where it's easily collected by",home_roster[possession][2])
  849.  
  850. kickoff_flag = True
  851. offense = "Away"
  852. half = 0
  853. game = True
  854. while game == True:
  855. while time > 0:
  856. while kickoff_flag == True:
  857. print("KICKOFF")
  858. if offense == "Away":
  859. kickoff("Away")
  860. elif offense == "Home":
  861. kickoff("Home")
  862. kickoff_flag = False
  863. time -= weightedround(random.gauss(10,2.5))
  864. if takeshot(1) == True:
  865. if ontarget() == True:
  866. if offense == "Home":
  867. print("Shot taken by",home_roster[possession][2]," and it's on target.")
  868. z = goal()
  869. if z == True:
  870. kickoff_flag = True
  871. offense = "Away"
  872. continue
  873. elif z == False:
  874. changepossession(1)
  875. continue
  876. elif offense == "Away":
  877. print("Shot taken by",away_roster[possession][2]," and it's on target.")
  878. z = goal ()
  879. if z == True:
  880. kickoff_flag = True
  881. offense = "Home"
  882. continue
  883. elif z == False:
  884. changepossession(1)
  885. continue
  886. else:
  887. if offense == "Home":
  888. print("Shot taken by",home_roster[possession][2]," but it's off-target.")
  889. changepossession(1)
  890. elif offense == "Away":
  891. print("Shot taken by",away_roster[possession][2]," but it's off-target.")
  892. changepossession(1)
  893. marking()
  894. dribble()
  895. zz = passattempt()
  896. if zz == 1:
  897. print("And the pass sails into the stands. That'll be the keeper's ball.")
  898. changepossession(1)
  899. elif zz == 4:
  900. if takeshot(3) == True:
  901. if ontarget() == True:
  902. if offense == "Home":
  903. print("Shot taken by",home_roster[possession][2]," and it's on target.")
  904. z = goal()
  905. if z == True:
  906. kickoff_flag = True
  907. offense = "Away"
  908. continue
  909. elif z == False:
  910. changepossession(1)
  911. continue
  912. elif offense == "Away":
  913. print("Shot taken by",away_roster[possession][2]," and it's on target.")
  914. z = goal ()
  915. if z == True:
  916. kickoff_flag = True
  917. offense = "Home"
  918. continue
  919. elif z == False:
  920. changepossession(1)
  921. continue
  922. else:
  923. if offense == "Home":
  924. print("Shot taken by",home_roster[possession][2]," but it's off-target.")
  925. changepossession(1)
  926. elif offense == "Away":
  927. print("Shot taken by",away_roster[possession][2]," but it's off-target.")
  928. changepossession(1)
  929.  
  930. else:
  931. if half == 0:
  932. print("And that's half time! The score is","-".join([str(away_score),str(home_score)]))
  933. half = 1
  934. extra_time = round(max(random.gauss(150,45),0))
  935. time = 1800 + extra_time
  936. print("The second half will be 30 minutes and feature",extra_time // 60,"minutes and",extra_time % 60,"seconds of extra time")
  937. kickoff_flag = True
  938. offense = "Home"
  939. continue
  940. elif half == 1:
  941. game = False
  942. else:
  943. print("And that's the end of the game! The final score is","-".join([str(away_score),str(home_score)]))
  944.  
  945. filename ="gamedata.csv"
  946. with open(filename, "w") as output:
  947. writer = csv.writer(output, lineterminator="\n")
  948. writer.writerows([["Index"]+["Position"]+["Name"]+["GA"]+["GT"]+["GM"]+["PA"]+["PM"]+["TA"]+["TM"]+["INT"]+["SAg"]+["SAl"]])
  949. writer.writerows(away_stats)
  950. writer.writerows(home_stats)
  951.  
  952. example output:
  953. [[1, 'ST', 'Striker 1', '[]', 2.07, 2.39, 2.56, 2.03, 2.05, 8.16, 10.04, 10.34, 8.09, 11.92, 7.87, 14], [2, 'ST', 'Striker 2', '[]', 1.8, 1.66, 2.18, 1.89, 1.82, 8.31, 10.61, 11.13, 10.24, 12.02, 8.44, 14], [3, 'MF', 'Fielder 1', '[]', 2.34, 2.08, 1.8, 6.68, 6.08, 10.33, 10.08, 8.47, 13.82, 10.15, 8.28, 10], [4, 'MF', 'Fielder 2', '[]', 1.76, 2.24, 1.9, 6.25, 6.57, 10.03, 9.49, 8.67, 10.01, 10.49, 7.92, 10], [5, 'MF', 'Fielder 3', '[]', 2.06, 2.11, 2.09, 6.2, 6.58, 10.56, 9.45, 8.81, 10.02, 9.99, 7.72, 10], [6, 'DB', 'Back 1', '[]', 2.34, 1.98, 1.73, 10.06, 10.11, 7.18, 8.04, 6.05, 7.05, 6.04, 4.34, 5], [7, 'DB', 'Back 2', '[]', 2.07, 1.89, 1.98, 9.98, 10.24, 6.31, 8.49, 6.55, 7.25, 5.79, 3.95, 5], [8, 'DB', 'Back 3', '[]', 1.81, 1.7, 2.13, 10.37, 10.22, 6.27, 8.6, 6.12, 6.97, 5.98, 3.88, 5], [9, 'GK', 'Keeper 1', '[]', 10.16, 10.68, 10.63, 4.04, 3.37, 4.19, 3.64, 3.7, 4.2, 4.11, 4.33, 4]]
  954. [[10, 'ST', 'Striker A', '[]', 1.31, 2.22, 1.75, 0.96, 1.18, 7.76, 10.66, 10.28, 10.02, 8.62, 8.78, 16], [11, 'ST', 'Striker B', '[]', 1.97, 1.63, 1.83, 1.36, 1.03, 7.66, 11.04, 10.2, 9.72, 11.23, 9.16, 11], [12, 'ST', 'Striker C', '[]', 1.88, 1.99, 2.0, 0.81, 1.25, 7.71, 10.73, 10.28, 8.15, 14.18, 8.68, 14], [13, 'MF', 'Fielder A', '[]', 2.62, 1.83, 1.64, 5.62, 5.98, 9.2, 9.2, 7.19, 9.33, 3.14, 8.28, 8], [14, 'MF', 'Fielder C', '[]', 2.01, 1.74, 2.04, 5.35, 5.3, 8.62, 9.12, 7.63, 8.41, 2.97, 8.67, 8], [15, 'DB', 'Back A', '[]', 2.3, 1.82, 2.47, 10.05, 9.4, 5.54, 7.12, 4.72, 7.82, 2.7, 8.04, 3], [16, 'DB', 'Back B', '[]', 1.85, 1.81, 1.88, 9.47, 8.49, 5.8, 7.94, 5.74, 8.22, 3.07, 7.86, 3], [17, 'DB', 'Back C', '[]', 2.12, 2.08, 2.38, 9.28, 9.14, 5.34, 7.77, 5.74, 7.82, 3.78, 8.08, 3], [18, 'GK', 'Keeper A', '[‘Distributor’]', 8.81, 8.46, 9.3, 3.75, 3.58, 3.85, 4.17, 4.01, 3.83, 4.3, 4.11, 4]]
  955. The first half will be 30 minutes and feature 2 minutes and 7 seconds of extra time
  956. KICKOFF
  957. 30:00 And there's the kickoff, with Fielder 1 takes possession
  958. 22 8
  959. Shot taken by Striker C but it's off-target.
  960. Keeper Keeper 1 boots the ball into the midfield where it's collected by Fielder 2
  961. 38 8
  962. Shot taken by Fielder 1 but it's off-target.
  963. Keeper Keeper A launches the ball over his teammates where it's easily collected by Back 2
  964. 27 9
  965. Shot taken by Fielder C but it's off-target.
  966. Keeper Keeper 1 rolls the ball to his defender Back 2
  967. 8 9
  968. Shot taken by Fielder C and it's on target.
  969. And the keeper grabs it!
  970. shot: 3 keep: 36
  971. Keeper Keeper 1 boots the ball into the midfield where it's collected by Fielder 2
  972. 10 4
  973. Shot taken by Back 3 but it's off-target.
  974. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder A
  975. 5 8
  976. Shot taken by Fielder 1 and it's on target.
  977. And the keeper grabs it!
  978. shot: 12 keep: 37
  979. Keeper Keeper A pushes the ball deep into the attack and it connects to Striker A
  980. 18 9
  981. Shot taken by Striker A but it's off-target.
  982. Keeper Keeper 1 rolls the ball to his defender Back 3
  983. 17 9
  984. Shot taken by Fielder 1 but it's off-target.
  985. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder C
  986. Fielder 1 on the tackle and steals the ball from Fielder C
  987. 22 9
  988. Shot taken by Fielder C but it's off-target.
  989. Keeper Keeper 1 rolls the ball to his defender Back 3
  990. Striker A on the tackle and steals the ball from Back 3
  991. 52 4
  992. Shot taken by Back 3 but it's off-target.
  993. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder A
  994. 4 9
  995. Shot taken by Fielder 1 and it's on target.
  996. And the keeper grabs it!
  997. shot: 15 keep: 29
  998. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder C
  999. 42 7
  1000. Shot taken by Fielder 3 but it's off-target.
  1001. Keeper Keeper A boots the ball into the midfield, but it's stolen by Fielder 1
  1002. And that's half time! The score is 0-0
  1003. The second half will be 30 minutes and feature 3 minutes and 36 seconds of extra time
  1004. KICKOFF
  1005. 30:00 And there's the kickoff, with Fielder A takes possession
  1006. 18 8
  1007. Shot taken by Fielder A but it's off-target.
  1008. Keeper Keeper 1 rolls the ball to his defender Back 3
  1009. 7 8
  1010. Shot taken by Fielder 2 and it's on target.
  1011. And the keeper grabs it!
  1012. shot: 28 keep: 31
  1013. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder A
  1014. 8 8
  1015. Shot taken by Fielder A and it's on target.
  1016. And the keeper grabs it!
  1017. shot: 16 keep: 22
  1018. Keeper Keeper 1 rolls the ball to his defender Back 1
  1019. 14 4
  1020. Shot taken by Back 1 but it's off-target.
  1021. Keeper Keeper A launches the ball over his teammates where it's easily collected by Back 3
  1022. 33 4
  1023. Shot taken by Back 1 but it's off-target.
  1024. Keeper Keeper A pushes the ball deep into the attack and it connects to Striker C
  1025. Fielder A on the tackle and steals the ball from Fielder 2
  1026. 2 8
  1027. Shot taken by Fielder 1 and it's on target.
  1028. And the keeper grabs it!
  1029. shot: 17 keep: 22
  1030. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder A
  1031. 21 8
  1032. Shot taken by Fielder A but it's off-target.
  1033. Keeper Keeper 1 boots the ball into the midfield, but it's stolen by Fielder A
  1034. 23 9
  1035. Shot taken by Striker C but it's off-target.
  1036. Keeper Keeper 1 rolls the ball to his defender Back 1
  1037. Back A on the tackle and steals the ball from Striker 2
  1038. 33 8
  1039. Shot taken by Fielder 3 but it's off-target.
  1040. Keeper Keeper A boots the ball into the midfield, but it's stolen by Fielder 3
  1041. 22 8
  1042. Shot taken by Fielder A but it's off-target.
  1043. Keeper Keeper 1 rolls the ball to his defender Back 3
  1044. 43 9
  1045. Shot taken by Fielder C but it's off-target.
  1046. Keeper Keeper 1 rolls the ball to his defender Back 1
  1047. 16 8
  1048. Shot taken by Fielder 1 but it's off-target.
  1049. Keeper Keeper A pushes the ball deep into the attack and it connects to Striker A
  1050. 7 8
  1051. Shot taken by Fielder 2 and it's on target.
  1052. 7:31 AND IT GETS PAST THE KEEPER! Fielder 2 scores! The score is now 1-0
  1053. shot: 30 keep: 23
  1054. KICKOFF
  1055. 6:29 And there's the kickoff, with Fielder A takes possession
  1056. 40 8
  1057. Shot taken by Fielder A but it's off-target.
  1058. Keeper Keeper 1 boots the ball into the midfield where it's collected by Fielder 2
  1059. 18 7
  1060. Shot taken by Fielder 3 but it's off-target.
  1061. Keeper Keeper A boots the ball into the midfield, but it's stolen by Fielder 3
  1062. 4 4
  1063. Shot taken by Back 3 and it's on target.
  1064. And the keeper grabs it!
  1065. shot: 9 keep: 25
  1066. Keeper Keeper A boots the ball into the midfield where it's collected by Fielder C
  1067. 39 8
  1068. Shot taken by Fielder C but it's off-target.
  1069. Keeper Keeper 1 rolls the ball to his defender Back 1
  1070. 51 9
  1071. Shot taken by Striker B but it's off-target.
  1072. Keeper Keeper 1 boots the ball into the midfield where it's collected by Fielder 1
  1073. 17 8
  1074. Shot taken by Striker 2 but it's off-target.
  1075. Keeper Keeper A pushes the ball deep into the attack and it connects to Striker A
  1076. 35 8
  1077. Shot taken by Fielder 3 but it's off-target.
  1078. Keeper Keeper A pushes the ball deep into the attack and it connects to Striker C
  1079. And that's the end of the game! The final score is 1-0
  1080. >>>
RAW Paste Data