Guest User

Untitled

a guest
Jul 20th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.93 KB | None | 0 0
  1. # -*- encoding: utf-8 -*-
  2. import random
  3.  
  4. ################################################################################
  5. # Классы-характеристики: например, разрушаемый объект, или объект со строковым именем.
  6. ################################################################################
  7.  
  8. class DestroyableObject:
  9. dead = False
  10. def damage(self, amount):
  11. self.health -= amount
  12. if self.health < 0:
  13. self.dead = True
  14. def heal(self, amount):
  15. self.health += amount
  16. def printHealth(self):
  17. if self.dead == True:
  18. print self.name,'убит'
  19. else:
  20. print 'У',self.getName(),'сейчас',self.health,'единиц здоровья.'
  21.  
  22.  
  23. class MovableObject:
  24. x = random.randint(0,99)
  25. y = random.randint(0,99)
  26. def move(self, x, y):
  27. selfn.x = x
  28. self.y = y
  29. print '{0} передвинут на {1}:{2}'.format(self.getName(), self.x, self.y)
  30. def printPosition(self):
  31. print 'Позиция {0}: {1}:{2}'.format(self.getName(), self.x, self.y)
  32. def getPosition(self):
  33. return (self.x, self.y)
  34.  
  35.  
  36. class ObjectCarryPassengers:
  37. passList = []
  38. def invitePassenger(self, passenger):
  39. self.passList.append(passenger)
  40. print passenger.getName(), 'сел в', self.getName()
  41. def printPassengersCount(self):
  42. print 'Пассажиров:', len(self.passList)
  43. def exitPassenger(self, passenger):
  44. self.passList.remove(passenger)
  45. print passenger.getName(), 'вышел из', self.getName()
  46.  
  47.  
  48. class ObjectWithName:
  49. def __init__(self, name):
  50. self.name = name
  51. def getName(self):
  52. return self.name
  53.  
  54.  
  55. class ObjectWithGun:
  56. def pew(self, target, verbose=True):
  57. if verbose == True:
  58. if self.dead == False:
  59. amount = random.randint((self.maxDamage/2),self.maxDamage)
  60. target.damage(amount)
  61. print '{0} повредил {1} на {2}'.format(self.name, target.name, amount)
  62. else:
  63. print self.name,'попытался выстрелить, да не судьба — уже мертвый.'
  64. else:
  65. if self.dead == False:
  66. amount = random.randint((self.maxDamage/2),self.maxDamage)
  67. target.damage(amount)
  68. else:
  69. pass
  70.  
  71. ################################################################################
  72. #Классы, наследующие характеристики. Например, солдат, автобус.
  73. ################################################################################
  74.  
  75. class Soldier(ObjectWithName, ObjectWithGun, DestroyableObject, MovableObject):
  76. dead = False
  77. health = 100
  78. maxDamage = 50
  79. if health <= 0:
  80. dead == True
  81. print self.name,'убит'
  82.  
  83. class Autobus(MovableObject, ObjectCarryPassengers, DestroyableObject, ObjectWithName):
  84. health = 300
  85. def __init__(self, name):
  86. self.name = 'Автобус '+name
  87. def getName(self):
  88. return self.name
  89.  
  90. ################################################################################
  91. # Функции для реализации алгоритма
  92. ################################################################################
  93.  
  94. def SoldiersDuel(soldier1, soldier2, verbose=True):
  95. 'Два солдата стреляют друг в друга до тех пор, пока один не умрёт.'
  96. if verbose == True:
  97. while (soldier1.dead == False) and (soldier2.dead == False):
  98. soldier1.pew(soldier2)
  99. soldier2.printHealth()
  100. soldier2.pew(soldier1)
  101. soldier1.printHealth()
  102. if soldier1.dead == True:
  103. print soldier2.name,'победил!'
  104. return soldier2
  105. elif soldier2.dead == True:
  106. print soldier1.name,'победил!'
  107. return soldier1
  108. else:
  109. while (soldier1.dead == False) and (soldier2.dead == False):
  110. soldier1.pew(soldier2, False)
  111. soldier2.pew(soldier1, False)
  112. if soldier1.dead == True:
  113. return soldier2
  114. elif soldier2.dead == True:
  115. return soldier1
  116.  
  117.  
  118.  
  119. ################################################################################
  120. # Собственно сам алгоритм.
  121. ################################################################################
  122.  
  123. hitlar = Soldier('Гитлер')
  124. stalin = Soldier('Сталин')
  125. wincar = Autobus('победителя')
  126.  
  127. # Гитлер и сталин бьются насмерть, а кто победил, садится в автобус победителя :3
  128. wincar.invitePassenger(SoldiersDuel(hitlar, stalin))
Add Comment
Please, Sign In to add comment