Advertisement
Guest User

satanagovnomogila

a guest
Jan 18th, 2020
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.86 KB | None | 0 0
  1. import random
  2. import pygame
  3. import pygame.locals
  4. pygame.init()
  5.  
  6. MONITOR=pygame.display.set_mode((800, 800))
  7. clock=pygame.time.Clock()
  8.  
  9. dimension=pygame.display.set_caption('Defence Of The Pudge')
  10.  
  11. WHITE = (255, 255, 255)
  12.  
  13. TIME=0
  14.  
  15.  
  16. class building(pygame.sprite.Sprite):
  17. def __init__(self, hp, building_hp_regen,armour, team, placeX, placeY, imagepath):
  18. pygame.sprite.Sprite.__init__(self)
  19. self.hp=hp
  20. self.building_hp_regen=building_hp_regen
  21. self.armour=armour
  22. self.team=team
  23. self.placeX=placeX
  24. self.placeY=placeY
  25. self.image = pygame.image.load(imagepath).convert_alpha()
  26. self.rect = self.image.get_rect(center=(self.placeX, self.placeY))
  27.  
  28.  
  29. class tower(building):
  30. def __init__(self, tower_damage, hp, building_hp_regen, armour, team, Tier, placeX, placeY, surf, image):
  31. self.tower_damage=tower_damage
  32. self.team=team
  33. self.Tier=Tier
  34. self.surf=surf
  35.  
  36. super().__init__(hp, building_hp_regen, armour, team, placeX, placeY, image)
  37.  
  38. def attack(self, target_name):
  39. if (int( self.placeX - target_name.placeX )**2 + int(self.placeY - target_name.placeY)**2)**(1/2) <= 150 and target_name.team != self.team :
  40. target_name.hp-=self.tower_damage
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47. class Soldier(pygame.sprite.Sprite):
  48. def __init__(self, team, damage, hp, placeX, placeY, imagepath, Line):
  49. pygame.sprite.Sprite.__init__(self)
  50.  
  51. self.team=team
  52. self.damage=damage
  53. self.hp=hp
  54. self.placeX = placeX
  55. self.placeY = placeY
  56. self.image = pygame.image.load(imagepath).convert_alpha()
  57. self.rect = self.image.get_rect(center=(self.placeX, self.placeY))
  58. self.Line=Line
  59.  
  60. def creep_attack(self):
  61. for i in list_of_soldiers:
  62. if (int( self.placeX - i.placeX )**2 + int(self.placeY - i.placeY)**2)**(1/2) <=10 and i.team != self.team:
  63. i.hp-=self.damage
  64. return
  65. else:
  66. if self.Line=='Bottom' and self.team=='radiant':
  67. if self.placeX<775:
  68. self.placeX+=1
  69. self.rect.move_ip(1, 0)
  70. else:
  71. self.rect.move_ip(0, -1)
  72. self.placeY-=1
  73. elif self.Line=='Middle' and self.team=='radiant':
  74. self.placeX+=1
  75. self.placeY+=1
  76. self.rect.move_ip(1, 1)
  77. elif self.Line=='Top' and self.team=='radiant':
  78. if self.placeY<=775:
  79. self.placeX+=1
  80. self.rect.move_ip(1, 0)
  81.  
  82. for i in creepsradiant:
  83. if (int( self.placeX - i.placeX )**2 + int(self.placeY - i.placeY)**2)**(1/2) <=10 and i.team != self.team:
  84. i.hp-=self.damage
  85. return
  86. else:
  87. if self.Line=='Top' and self.team=='dire':
  88. if self.placeX>775:
  89. self.placeX-=1
  90. self.rect.move_ip(-1, 0)
  91. else:
  92. self.rect.move_ip(0, 1)
  93. self.placeY+=1
  94. elif self.Line=='Middle' and self.team=='dire':
  95. self.placeX-=1
  96. self.placeY-=1
  97. self.rect.move_ip(-1, -1)
  98. elif self.Line=='Bottom' and self.team=='dire':
  99. if self.placeY<=775:
  100. self.placeY+=1
  101. self.rect.move_ip(0, 1)
  102. else:
  103. self.placeX-=1
  104. self.rect.move_ip(-1, 0)
  105. for i in list_of_towers:
  106. if (int( self.placeX - i.placeX )**2 + int(self.placeY - i.placeY)**2)**(1/2) <=10 and i.team != self.team:
  107. i.hp-=self.damage
  108. else:
  109. for c in creepsradiant:
  110. if (int( self.placeX - i.placeX )**2 + int(self.placeY - i.placeY)**2)**(1/2) <=10 and i.team != self.team:
  111. return
  112.  
  113. for c in list_of_soldiers:
  114. if (int( self.placeX - i.placeX )**2 + int(self.placeY - i.placeY)**2)**(1/2) <=10 and i.team != self.team:
  115. return
  116. if self.Line=='Bottom' and self.team=='radiant':
  117. if self.placeX<775:
  118. self.placeX+=1
  119. self.rect.move_ip(1, 0)
  120. else:
  121. self.rect.move_ip(0, -1)
  122. self.placeY-=1
  123. elif self.Line=='Middle' and self.team=='radiant':
  124. self.placeX+=1
  125. self.placeY+=1
  126. self.rect.move_ip(1, 1)
  127. elif self.Line=='Top' and self.team=='radiant':
  128. if self.placeY<=775:
  129. self.placeX+=1
  130. self.rect.move_ip(1, 0)
  131. def creep_check_hp(self):
  132. if self.hp<=0 and self.team=='dire':
  133. list_of_soldiers.remove(self)
  134. elif self.hp<=0 and self.team=='radiant':
  135. creepsradiant.remove(self)
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145. # Return the number of the current active tower
  146. def checkTowers(list_of_towers):
  147. current = 1
  148. for tower in list_of_towers:
  149. if tower.hp < 1:
  150. current += 1
  151.  
  152. return current
  153.  
  154.  
  155. #class ANCIENT(building):
  156. #pass
  157.  
  158.  
  159.  
  160. class shrine(building):
  161. def restore(self, teammate):
  162. teammate.hp=teammate.max_hp
  163.  
  164.  
  165. class barrack(building):
  166. pass
  167.  
  168.  
  169. class melee_barrack(barrack):
  170. def destroyed(self, enemy_team):
  171. if self.hp==0:
  172. if self.team=='radiant':
  173. t2.HeroDire.hp*=2
  174. elif self.team=='dire':
  175. t1.HeroRadiant.hp*=2
  176.  
  177.  
  178. class range_barrack(barrack):
  179. def destroyed(self, enemy_team):
  180. if self.hp==0:
  181. if self.team=='radiant':
  182. t2.HeroDire.damage*=2
  183. elif self.team=='dire':
  184. t1.HeroRadiant.damage*=2
  185.  
  186.  
  187. class item:
  188. def __init__(self, cost, Item_damage):
  189. self.cost=cost
  190. self.Item_damage=Item_damage
  191.  
  192.  
  193.  
  194.  
  195. class Hero:
  196. def __init__(self, lvl, team, damage, hp, gold, Item_slots, stash, max_hp, placeX, placeY, movespeed):
  197.  
  198. self.lvl=lvl
  199. self.damage=damage
  200. self.hp=hp
  201. self.gold=gold
  202. self.Item_slots=Item_slots
  203. self.stash=stash
  204. self.max_hp=max_hp
  205. self.placeX=placeX
  206. self.placeY=placeY
  207. # self.place=place,
  208. self.movespeed=movespeed
  209.  
  210. def farm(self, team):
  211. if team==radiant():
  212. dire.countD-=1
  213. elif team==dire():
  214. radiant.countR-=1
  215.  
  216. if dire.countD==0:
  217. radiant.HeroRadiant.lvl+=1
  218. elif radiant.countR==0:
  219. dire.HeroDire.lvl+=1
  220. else:
  221. pass
  222.  
  223. def attack(self, target_name):
  224. target_name.hp-=self.damage*(target_name.armour/100)
  225.  
  226. def buy_Item(self, desired_Item):
  227. if self.gold>=desired_Item.cost:
  228. if self.Item_slots>0:
  229. self.damage+=desired_Item.Item_damage
  230. self.gold-=desired_Item.cost
  231. else:
  232. pass
  233. else:
  234. pass
  235.  
  236. def move(self, ):
  237. pass
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244. class radiant:
  245. #if time==30:
  246. #time=0
  247. #for N in range(1, 5):
  248. #creepsradiant.append(Soldier('radiant', 10, 1000, 500, 500, 'rogue.png'))
  249.  
  250. HeroRadiant=Hero(1, 'radiant', 55, 600, 1000, 6, 3, 600, 5, 100, 27)
  251. countR=0
  252.  
  253. map_surf=pygame.image.load('DOTAMAP.jpg').convert_alpha()
  254. map_rect = map_surf.get_rect(center=(300, 200))
  255.  
  256. class dire:
  257. #creepsdire=[]
  258. #for N in range(6, 11):
  259. #creepsdire.append(Soldier('dire', 10, 1000, 500, 500, 'knight.png'))
  260.  
  261. HeroDire=Hero(1, 'dire', 60, 560, 0, 6, 3, 560, 70, 502, 32)
  262. T1TowerDire=tower(100, 1000, 50, 50, 'dire', 1, 350, 450, map_surf, 'DOTATOWERDIRE.png')
  263.  
  264.  
  265.  
  266. Daedalus=item(200, 80)
  267. t1=radiant()
  268. t2=dire()
  269.  
  270.  
  271.  
  272. # map image
  273.  
  274.  
  275.  
  276.  
  277. tower1 = tower(100, 1000, 50, 50, 'radiant', 1, 350, 450, map_surf, 'DOTATOWERDIRE.png')
  278. tower2 = tower(100, 1000, 50, 50, 'radiant', 2, 250, 550, map_surf, 'DOTATOWERDIRE.png')
  279. tower3 = tower(100, 5000, 50, 50, 'radiant', 3, 150, 650, map_surf, 'DOTATOWERDIRE.png')
  280. tower4 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 650, map_surf, 'DOTATOWERDIRE.png')
  281. #tower5 = tower(100, 10000, 50, 50, 'radiant', 4, 150, 550, map_surf, 'DOTATOWERDIRE.png')
  282.  
  283. #tower6 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  284. #tower7 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  285. #tower8 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  286.  
  287. #tower9 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  288. #tower10 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  289. #tower11 = tower(100, 10000, 50, 50, 'radiant', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  290.  
  291.  
  292. #tower12 = tower(100, 1000, 50, 50, 'dire', 1, 350, 450, map_surf, 'DOTATOWERDIRE.png')
  293. #tower13 = tower(100, 1000, 50, 50, 'dire', 2, 250, 550, map_surf, 'DOTATOWERDIRE.png')
  294. #tower14 = tower(100, 5000, 50, 50, 'dire', 3, 150, 650, map_surf, 'DOTATOWERDIRE.png')
  295. #tower15 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  296. #tower16 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  297.  
  298. #tower17 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  299. #tower18 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  300. #tower19 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  301.  
  302. #tower20 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  303. #tower21 = tower(100, 10000, 50, 50, 'dire', 4, 50, 750, map_surf, 'DOTATOWERDIRE.png')
  304. #tower22 = tower(100, 10000, 50, 50, 'dire', 4, 50, 550, map_surf, 'DOTATOWERDIRE.png')
  305.  
  306.  
  307. shrine1 = shrine(500, 5, 5, 'radiant', 700, 700, 'SHRINERADIANT.png' )
  308. shrine2 = shrine(500, 5, 5, 'dire', 150, 150, 'SHRINEDIRE.png' )
  309.  
  310. list_of_towers = [tower1, tower2, tower3,tower4]
  311. # list of Tower objects
  312. #list_of_towers = [tower1, tower2, tower3,tower4, tower5, tower6, tower7, tower8, tower9, tower10, tower11, tower12,
  313. #tower13, tower14, tower15, tower16, tower17, tower18, tower19, tower20, tower21, tower22]
  314. list_of_shirnes = [shrine1, shrine2]
  315. creepsradiant=[]
  316. list_of_soldiers = []
  317.  
  318. # list of Soldier objects
  319.  
  320.  
  321. print(f'Current tower: {checkTowers(list_of_towers)}')
  322. print(f'Overlapping soldiers with such indexes: {tower1.rect.collidelistall(list_of_soldiers)}')
  323.  
  324.  
  325. # Make the map smaller
  326. scale = pygame.transform.scale(map_surf, (map_surf.get_width()*4,
  327. map_surf.get_height()*4))
  328. scale_rect = scale.get_rect(center=(400, 400))
  329.  
  330.  
  331. PLACEXR=300
  332. PLACEYR=775
  333.  
  334. PLACEXD=775
  335. PLACEYD=300
  336.  
  337.  
  338.  
  339. while 1:
  340. TIME+=1
  341. clock.tick(5)
  342. MONITOR.blit(scale, scale_rect)
  343. pressed_key=pygame.key.get_pressed()
  344. for i in pygame.event.get():
  345. if i.type==pygame.QUIT:exit
  346.  
  347. if pressed_key[pygame.K_LALT]:
  348. for tower in list_of_towers:
  349. pygame.draw.circle(MONITOR, (0, 70, 225), (tower.placeX, tower.placeY), 50, 2)
  350.  
  351.  
  352.  
  353. if TIME%90==0:
  354. for i in range(5):
  355. creepsradiant.append(Soldier('radiant', random.randint(18, 22), 550, PLACEXR, PLACEYR, 'rogue.png', 'Bottom'))
  356. PLACEXR+=random.randint(-2, 3)
  357. PLACEYR+=random.randint(-2, 3)
  358. else:
  359. PLACEXR=300
  360. PLACEYR=775
  361.  
  362.  
  363.  
  364. if TIME%90==0:
  365. for i in range(5):
  366. list_of_soldiers.append(Soldier('dire', random.randint(18, 22), 550, PLACEXD, PLACEYD, 'knight.png', 'Bottom'))
  367. PLACEXD-=random.randint(-2, 3)
  368. PLACEYD-=random.randint(-2, 3)
  369. else:
  370. PLACEXD=775
  371. PLACEYD=300
  372.  
  373.  
  374.  
  375.  
  376.  
  377. # Draw each tower
  378. for tower in list_of_towers:
  379. MONITOR.blit(tower.image, tower.rect)
  380.  
  381. # Draw each soldier
  382. for soldier in list_of_soldiers:
  383. MONITOR.blit(soldier.image, soldier.rect)
  384.  
  385. for shrine in list_of_shirnes:
  386. MONITOR.blit(shrine.image, shrine.rect)
  387. #releaze creeps attack
  388. for creep in creepsradiant:
  389. MONITOR.blit(creep.image, creep.rect)
  390. for s in creepsradiant:
  391. s.creep_attack()
  392. print(s.hp)
  393. for s in list_of_soldiers:
  394. s.creep_attack()
  395. for i in list_of_soldiers:
  396. i.creep_check_hp()
  397. for i in creepsradiant:
  398. i.creep_check_hp()
  399.  
  400.  
  401.  
  402. pygame.display.update()
  403.  
  404. print('SLAVA UKRAINI')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement