Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- encoding: utf-8 -*-
- import random
- ################################################################################
- # Классы-характеристики: например, разрушаемый объект, или объект со строковым именем.
- ################################################################################
- class DestroyableObject:
- dead = False
- def damage(self, amount):
- self.health -= amount
- if self.health < 0:
- self.dead = True
- def heal(self, amount):
- self.health += amount
- def printHealth(self):
- if self.dead == True:
- print self.name,'убит'
- else:
- print 'У',self.getName(),'сейчас',self.health,'единиц здоровья.'
- class MovableObject:
- x = random.randint(0,99)
- y = random.randint(0,99)
- def move(self, x, y):
- selfn.x = x
- self.y = y
- print '{0} передвинут на {1}:{2}'.format(self.getName(), self.x, self.y)
- def printPosition(self):
- print 'Позиция {0}: {1}:{2}'.format(self.getName(), self.x, self.y)
- def getPosition(self):
- return (self.x, self.y)
- class ObjectCarryPassengers:
- passList = []
- def invitePassenger(self, passenger):
- self.passList.append(passenger)
- print passenger.getName(), 'сел в', self.getName()
- def printPassengersCount(self):
- print 'Пассажиров:', len(self.passList)
- def exitPassenger(self, passenger):
- self.passList.remove(passenger)
- print passenger.getName(), 'вышел из', self.getName()
- class ObjectWithName:
- def __init__(self, name):
- self.name = name
- def getName(self):
- return self.name
- class ObjectWithGun:
- def pew(self, target, verbose=True):
- if verbose == True:
- if self.dead == False:
- amount = random.randint((self.maxDamage/2),self.maxDamage)
- target.damage(amount)
- print '{0} повредил {1} на {2}'.format(self.name, target.name, amount)
- else:
- print self.name,'попытался выстрелить, да не судьба — уже мертвый.'
- else:
- if self.dead == False:
- amount = random.randint((self.maxDamage/2),self.maxDamage)
- target.damage(amount)
- else:
- pass
- ################################################################################
- #Классы, наследующие характеристики. Например, солдат, автобус.
- ################################################################################
- class Soldier(ObjectWithName, ObjectWithGun, DestroyableObject, MovableObject):
- dead = False
- health = 100
- maxDamage = 50
- if health <= 0:
- dead == True
- print self.name,'убит'
- class Autobus(MovableObject, ObjectCarryPassengers, DestroyableObject, ObjectWithName):
- health = 300
- def __init__(self, name):
- self.name = 'Автобус '+name
- def getName(self):
- return self.name
- ################################################################################
- # Функции для реализации алгоритма
- ################################################################################
- def SoldiersDuel(soldier1, soldier2, verbose=True):
- 'Два солдата стреляют друг в друга до тех пор, пока один не умрёт.'
- if verbose == True:
- while (soldier1.dead == False) and (soldier2.dead == False):
- soldier1.pew(soldier2)
- soldier2.printHealth()
- soldier2.pew(soldier1)
- soldier1.printHealth()
- if soldier1.dead == True:
- print soldier2.name,'победил!'
- return soldier2
- elif soldier2.dead == True:
- print soldier1.name,'победил!'
- return soldier1
- else:
- while (soldier1.dead == False) and (soldier2.dead == False):
- soldier1.pew(soldier2, False)
- soldier2.pew(soldier1, False)
- if soldier1.dead == True:
- return soldier2
- elif soldier2.dead == True:
- return soldier1
- ################################################################################
- # Собственно сам алгоритм.
- ################################################################################
- hitlar = Soldier('Гитлер')
- stalin = Soldier('Сталин')
- wincar = Autobus('победителя')
- # Гитлер и сталин бьются насмерть, а кто победил, садится в автобус победителя :3
- wincar.invitePassenger(SoldiersDuel(hitlar, stalin))
Add Comment
Please, Sign In to add comment