def step(self): if self.state == GameLoop.STATE_NOT_STARTED: self.greetings() print("\n") print(cl.y(" Нажми какую-нибудь кнопку")) input(cl.w("")) self.startNewGame() self.state = GameLoop.STATE_WAIT_CMD elif self.state == GameLoop.STATE_WAIT_CMD: cmd = input(cl.w("\\")) if cmd in self.cmds.keys(): self.cmds[cmd]() elif self.state == GameLoop.STATE_BATTLE_START: self.startBattle() elif self.state == GameLoop.STATE_BATTLE: cmd = input(cl.w("Битва\\")) if cmd in self.battle_cmds.keys(): self.battle_cmds[cmd]() elif self.state == GameLoop.STATE_GYM: cmd = input(cl.w("Качалка\\")) if cmd in self.gym_commands.keys(): self.gym_commands[cmd]() elif self.state == GameLoop.STATE_CLUB: cmd = input(cl.w("Клуб\\")) if cmd in self.club_commands.keys(): self.club_commands[cmd]() elif self.state == GameLoop.STATE_HOSPITAL: cmd = input(cl.w("Ветеринар\\")) if cmd in hospital_commands.keys(): hospital_commands[cmd]() else: pass
def play(self): if self.person.money < self.minimal_club_bet: print(cl.r("Не хватает")) return print(cl.w("Ты поставил {0} рублей".format(self.minimal_club_bet))) p = self.person.luck if p > 90: p = 90 win = prob(p) if win: print(cl.w("Ты выиграл {0} рублей".format(self.minimal_club_bet))) print(cl.y("Ты получаешь 4 качков опыта")) self.person.money += self.minimal_club_bet self.person.increaseExp(4) self.minimal_club_bet += 2 print(cl.y("Ставки изменились. Теперь ставка - {0}".format(self.minimal_club_bet))) else: print(cl.w("Ты проиграл {0} рублей".format(self.minimal_club_bet))) self.person.money -= self.minimal_club_bet if self.person.money < 0: self.person.money = 0 self.minimal_club_bet = 5
def goToClub(self): if not self.kl_discovered: print(cl.y("Ты пока не знаешь где в этом районе клуб")) else: print(cl.w("Ты пришёл в клуб напиши ") + cl.y("w") + cl.w(" чтобы уйти")) print(cl.w(" Здесь можно сыграть в карты (") + cl.y("p") + cl.w(" Минимальная ставка- 5р.)")) price_1 = "15" price_2 = "22" if self.person.money < 15: price_1 = cl.r("15") if self.person.money < 22: price_2 = cl.r("22") print(cl.w(" 1 - ") + price_1 + cl.w(" потусоваться на дискотеке(Ловкость +1)")) print(cl.w(" 2 - ") + price_2 + cl.w(" разузнать приемы мухлёжников(Удача +1)")) self.state = GameLoop.STATE_CLUB self.minimal_club_bet = 5
def enemyStr(self): result = cl.g("Это {0} {1} уровня - {2}\n".format( str(self.person_type), str(self.level), self.levelStr())) result += cl.w("Сл:") + self.eff_strength_s() + cl.w( " Лв:") + self.eff_agility_s() + cl.w( " Жв:") + self.eff_vitality_s() + cl.w( " Уд:") + self.eff_luck_s() + "\n" weaponstr = "Урон {0}-{1}".format(self.getMinStrike(), self.getMaxStrike()) if (len(self.weapons) > 0): weaponstr += " " for w in self.weapons: weaponstr += str(w) weaponstr += " " weaponstr = cl.lb(weaponstr) else: weaponstr = cl.w(weaponstr) weaponstr += "\n" result += weaponstr healthstr = "Здоровье {0}/{1}".format(self.current_health, self.getMaxHealth()) if self.broken_leg: healthstr += cl.r(" Сломана нога") if self.broken_jaw: healthstr += cl.r(" Сломана челюсть") healthstr += "\n" if self.current_health > (self.getMaxHealth() * 2 / 3): result += cl.g(healthstr) elif self.current_health > (self.getMaxHealth() * 1 / 3): result += cl.y(healthstr) else: result += cl.r(healthstr) strikes = self.getStrikesAccuracy() accstr = "" if len(strikes) == 1: accstr = "Точность {0}%\n".format(strikes[0]) elif len(strikes) == 2: accstr = "Точность 90%, Второй удар {0}%\n".format(strikes[1]) else: accstr = "Точность 90% - {1} ударов, Точность {2} удара {3}%\n".format( len(strikes) - 1, len(strikes), strikes[len(strikes) - 1]) result += cl.w(accstr) if (self.eff_shield() > 0): shieldstr = "Броня {0}".format(self.eff_shield()) shieldstr += " " for s in self.shields: shieldstr += str(s) shieldstr += " " shieldstr += "\n" result += cl.w(shieldstr) return result
def greetings(self): lines = [ "┌─── ┌───┐ ┌───┐ ╷ ╷ ╷ ╷ ╷ ╷", "│ │ │ │ │ │ │ │ │ │ ╱ ", "│ │ │ │ │ │ │ │ │ │ ╱ ", "│ │ │ │ │ ├───┤ │ ╱│ │╱ ", "│ │ │ │ │ │ │ │ ╱ │ │╲ ", "│ │ │ │ │ │ │ │╱ │ │ ╲ ", "│ │ │ │ │ │ │ │ │ │ ╲ ", "╵ └───┘ ╵ ╵ ╵ ╵ ╵ ╵ ╵ ╵", " Версия 2.00 ", ] print(cl.grey(lines[0])) print(cl.b(lines[1])) print(cl.g(lines[2])) print(cl.cyan(lines[3])) print(cl.r(lines[4])) print(cl.magenta(lines[5])) print(cl.y(lines[6])) print(cl.w(lines[7])) print(cl.g(lines[8]))
def goToHospital(self): if not self.rep_discovered: print(cl.y("Сначала найди где находится эта больница")) else: print(cl.w("Ты пришёл на ремонт, к ветеринару напиши ") + cl.y("w") + cl.w(" чтобы уйти")) if self.person.current_health >= self.person.getMaxHealth(): print("Док: вали отсюда ты здоров") return else: print("Док: не волнуйся всё зарастёт как на собаке") price_1 = "3" price_2 = "7" if self.person.money < 3: price_1 = cl.r("3") if self.person.money < 7: price_2 = cl.r("7") print(cl.g("h") + cl.w(" - за ") + price_1 + cl.w(" рубля тебя залатают")) print(cl.g("r") + cl.w(" - за ") + price_2 + cl.w(" рублей починят переломы")) self.state = GameLoop.STATE_HOSPITAL
def startNewGame(self): random.seed() default_name = cl.w("Раз") + cl.y("дол") + cl.r("бай") self.person = Person(Type.POTSAN, default_name) input(cl.w("Год 2xxx от Р.Х.")) print(cl.w("Последний день ты пришел в универ")) print(cl.w("Ты по-страшному косил и забивал")) print(cl.w("Ты ещё мог сдать все задания, которые ты взял у друзей")) input(cl.w("Но тут...")) input(cl.y("Ректор: Ах ты урод, чёртов забивала. Вали из универа!")) input(cl.g("Ты: А типа чё?")) input(cl.y("Ректор: Ты отчислен мудак!!! Как ты был лохом так и останешься.")) input(cl.r("Это слышали все и ты из пацана превратился в опущенного.") + "\n") print(cl.w("Ты не можешь стерпеть такой наезд, однако ректор офигительно крутой.")) input(cl.w("Ты решил доказать свою крутизну всему миру (в твоем понимании - Городу).")) person_selected = False first_time = True while not person_selected: if first_time: print(cl.w("Выбери кем ты будешь:")) else: print(cl.w("А теперь выбирай:")) print(cl.w("0-Пацан")) print(cl.w("1-Отморозок")) print(cl.w("2-Гопник")) print(cl.w("3-Вор")) if first_time: print(cl.w("4-Чё за батва?")) val = input(cl.w("")) if first_time and val == "4": print(cl.lb("Пацан - это нормальный тип. (Бонус - Гёлфренд, Клуб)")) print(cl.lb("Отморозок - тупой корявый мудак. (Бонус - Самолечение царапин)")) print(cl.lb("Гопник - гоп он и ест гоп. (Бонус - Притон)")) print(cl.lb("Вор - везучий ублюдок. (Бонус - Воровство, Барыги)")) first_time = False else: if val == "1": self.person = Person(Type.OTMOROZOK, default_name) elif val == "2": self.person = Person(Type.GOPNIK, default_name) self.pr_discovered = True elif val == "3": self.person = Person(Type.VOR, default_name) self.bmar_discovered = True else: # По-умолчанию - пацан self.person = Person(Type.POTSAN, default_name) self.girl_discovered = True self.kl_discovered = True person_selected = True name = input(cl.g("А зовут тебя:")) if name != "": self.person.name = name print(cl.lb("Ты стоишь у дверей университета.")) print(cl.lb("Отсюда ты начинаешь свой нелёгкий путь гопника.")) print(cl.w("Доказать свою крутизну ты можешь, отпинывая разных мудаков.")) print(cl.w("Тебе придётся поработать над собой, чтобы стать крутым.")) print(cl.w("Введи ") + cl.y("i") + cl.w(" чтобы посмотреть команды, введи ") + cl.y("help") + cl.w(" чтобы узнать чё за ботва"))
def goToGym(self): if not self.trn_discovered: print(cl.y("Ты пока не знаешь где в этом районе качалка")) else: print(cl.w("Ты пришёл в качалку напиши ") + cl.y("w") + cl.w(" чтобы уйти")) price_1 = "20" price_2 = "20" price_3 = "10" price_4 = "30" price_5 = "20" if self.person.money < 10: price_3 = cl.r("10") if self.person.money < 20: price_1 = cl.r("20") price_2 = cl.r("20") price_5 = cl.r("20") if self.person.money < 30: price_4 = cl.r("30") print(cl.w(" 1 - ") + price_1 + cl.w(" качаться гантелями и штангой(Сила +1)")) print(cl.w(" 2 - ") + price_2 + cl.w(" качаться на тренажёрах(Выносливость +1)")) print(cl.w(" 3 - ") + price_3 + cl.w(" прокачать 10 качков опыта")) print(cl.w(" 4 - ") + price_4 + cl.w(" купить зубную защиту боксёров(-75% что сломают челюсть)")) print(cl.w(" 5 - ") + price_5 + cl.w(" прокачать пресс(Броня +1)")) self.state = GameLoop.STATE_GYM
def rename(self): print(cl.g("Звали тебя: " + self.person.name)) name = input(cl.g("А теперь будут: ") + cl.w("")) if name != "": self.person.name = cl.w(name)
def info_commands(self): print(cl.w("Напиши: ") + cl.y("w") + cl.w(" чтобы шататься по окрестностям - искать на свою жопу приключения")) print(cl.w("Напиши: ") + cl.y("mar") + cl.w(" чтобы идти на рынок")) if self.bmar_discovered: print(cl.w("Напиши: ") + cl.y("bmar") + cl.w(" чтобы идти к барыгам")) if self.rep_discovered: print(cl.w("Напиши: ") + cl.y("rep") + cl.w(" чтобы идти к ветеринару")) if self.girl_discovered: print(cl.w("Напиши: ") + cl.y("girl") + cl.w(" чтобы идти к своей девчонке")) if self.kl_discovered: print(cl.w("Напиши: ") + cl.y("kl") + cl.w(" чтобы идти в клуб")) if self.pr_discovered: print(cl.w("Напиши: ") + cl.y("pr") + cl.w(" чтобы идти в местный притон гопоты")) if self.trn_discovered: print(cl.w("Напиши: ") + cl.y("trn") + cl.w(" чтобы идти в качалку")) print(cl.w("Напиши: ") + cl.y("s") + cl.w(" чтобы посмотреть в лужу на свою уродскую рожу")) print(cl.w("Напиши: ") + cl.y("sv") + cl.w(" чтобы присмотреться к пинаемому мудаку")) print(cl.w("Напиши: ") + cl.y("k") + cl.w(" чтобы гасить мудака который тебе попался на дороге")) print(cl.w("Напиши: ") + cl.y("run") + cl.w(" чтобы смыться от мудака который тебе попался на дороге")) print(cl.w("Напиши: ") + cl.y("v") + cl.w(" чтобы позвать подкрепление")) print(cl.w("Напиши: ") + cl.y("kos") + cl.w(" чтобы схватить косяк")) print(cl.w("Напиши: ") + cl.y("h") + cl.w(" чтобы выпить пиво (если не охото к ветеринару)")) print(cl.w("Напиши: ") + cl.y("mh") + cl.w(" чтобы набухаться до чёртиков")) print(cl.w("Напиши: ") + cl.y("name") + cl.w(" чтобы сменить погоняло")) print(cl.w("Напиши: ") + cl.y("e") + cl.w(" если захочешь выйти"))
def walk(self): if self.state != GameLoop.STATE_WAIT_CMD: self.state = GameLoop.STATE_WAIT_CMD return self.person.step() if prob(1): self.meetGod() return if not self.rep_discovered: if prob(5): print(cl.lb("Ты спросил у прохожего где тут больница.")) self.rep_discovered = True if not self.trn_discovered: if prob(5): print(cl.lb("На стене реклама: \"Жизнь тяжела. Если не хочешь сдохнуть качайся!\".")) self.trn_discovered = True r = random.uniform(0, 100) if r < 5: if not self.evil_enemies: print(cl.y("Ты зашёл на тропинку где бродит искитимская гопота.")) self.evil_enemies = True else: print(cl.y("Ты вышел с тропинки.")) self.evil_enemies = True return if r < 60: print(cl.w("Ничё не происходит.")) return if r < 70: print(cl.w("Совсем ничё не происходит.")) return newenemy = self.generateEnemy() aggressive_types = [Type.POTSAN, Type.OTMOROZOK, Type.GOPNIK, Type.VOR] aggressive = random.choice([True, False]) and (newenemy.person_type in aggressive_types) if newenemy.person_type in [Type.POTSAN, Type.OTMOROZOK, Type.GOPNIK, Type.VOR, Type.DOHLAK, Type.NEFOR, Type.NARK]: aggressive_str = "" if aggressive: aggressive_str = ", ищущий кого отпинать" print(cl.y("Идёт {0} {1} уровня{2}. Хочешь наехать?").format(str(newenemy.person_type), str(newenemy.level), aggressive_str)) reply = input() if reply == "y": variants = [0, 1] v = random.choice(variants) if v == 0: print(cl.w("Слышь Вась..")) print(cl.r("А чё ваще?")) else: print(cl.r("Пацан ты из какого района?")) print(cl.w("А ты по пинкам суди!")) self.enemy = newenemy self.state = GameLoop.STATE_BATTLE_START return elif aggressive: found_threshold = 50 val = random.uniform(0, 100) if val > found_threshold: print(cl.r("Он тебя заметил.")) print(cl.r("Эй мудак?!")) self.enemy = newenemy self.state = GameLoop.STATE_BATTLE_START else: print(cl.g("Ты смылся.")) elif newenemy.person_type == Type.MENT: print(cl.y("Идёт ментяра {0} уровня гроза гопов.".format(str(newenemy.level)))) if self.person.sun_glass: print(cl.g("Ты напялил тёмные очки и мент не узнал твою рожу, которая висит на почётном стенде \"Разыскиваются за гопничество\"")) return found_threshold = 50 val = random.uniform(0, 100) if val > found_threshold: print(cl.r("Запалил!")) print(cl.r("Блин! это же ") + self.person.name + cl.r(" - известный {0}".format(str(self.person.person_type)))) self.enemy = newenemy self.state = GameLoop.STATE_BATTLE_START else: print(cl.g("Ты затаился, прикинулся не гопом... Мент вроде не заметил")) elif newenemy.person_type == Type.MANIAC: print(cl.y("Идёт Маньячок {0}, ищущий кого отпинать.".format(str(newenemy.level)))) found_threshold = 50 val = random.uniform(0, 100) if val > found_threshold: print(cl.r("Он тебя заметил.")) print(cl.r("Я МАНЬЯК!!!")) print(cl.w("Рад познакомиться - " + str(self.person.person_type))) self.enemy = newenemy self.state = GameLoop.STATE_BATTLE_START else: print(cl.g("Ты смылся."))
def meetGod(self): def meetGodImpl(person): '''Реализация случайного благославления''' choice = random.choice([0, 1, 2, 3, 4, 5, 6]) god_say = "" if choice == 0: god_say += cl.b("Да увеличится, офигенно, твоя понтовость среди гопоты!\n") god_say += cl.b("Получи 100!") person.pont += 100 elif choice == 1: god_say += cl.b("Да увеличится твоя понтовость!") person.increaseExp(self.person.nextLevelSkill() - person.skill) elif choice == 2: god_say += cl.b("Да увеличится твоя сила!") person.strength += 1 person.current_health = person.getMaxHealth() elif choice == 3: god_say += cl.b("Да возрастут твои силы жизненные!") person.vitality += 1 person.current_health = person.getMaxHealth() elif choice == 4: god_say += cl.b("Да уменьшится твоя корявость!") person.agility += 1 elif choice == 5: god_say += cl.b("Накладываю на тебя защиту!") person.shield += 1 elif choice == 6: god_say += cl.b("Дарю тебе феньку!") variants = [artefacts.GodSaveRing(), artefacts.GodHelpRing(), artefacts.MegaRing(), artefacts.GodForgiveRing()] artefact = random.choice(variants) if artefact.description != "": god_say += "\n" + cl.b(artefact.description) person.artefacts.append(artefact) input(god_say) input(cl.w("Бродя по окрестностям с самыми грязными намерениями...")) input(cl.w("Ты наткнулся на храм Божий.")) if self.church_visited_ctr == 0: input(cl.w("Раз такая батва...")) input(cl.w("Надо типа помолиться Господу Богу...")) input(cl.w("Как делают новые руссские.")) input(cl.g("\"Господи, Братан, прости грешника\". - Начал было ты...")) input(cl.b("Громовой голос: \"Да пошёл ты нахрен!\"")) input(cl.g(" - Эээ.. типа.. а чё?..")) input(cl.b(" - \"а чё?\" блин! ") + self.person.name + cl.b("-" + str(self.person.person_type) + " чёртов!")) input(cl.g("Ну..")) input(cl.b("Ладна насылаю на тебя, типа, \"моё благославление\"")) meetGodImpl(self.person) print(cl.b("А теперь вали отсюда и никогда здесь не появляйся!")) print("") print(cl.w("Ты идёшь дальше")) print(cl.w("Ничё не происходит")) elif self.church_visited_ctr == 1: input(cl.w("В прошлый раз Бог сказал чтобы ты не осквернял своей рожей святой храм")) input(cl.w("Но надо бы типа помолиться о прощении")) input(cl.g("\"Господи, Братан, прости грешника опять\".")) input(cl.b("Бог: \"Да блин, упорный чудак!\"")) input(cl.b("Ладно насылаю на тебя, типа, \"моё благославление\" снова")) meetGodImpl(self.person) else: input(cl.b("Бог: \"А ты опять.\"")) input(cl.b("Ну ладно насылаю на тебя \"благославление\"")) meetGodImpl(self.person) print(cl.b("А теперь проваливай!")) self.church_visited_ctr += 1
def __str__(self): result = cl.g("Ты {0} {1} уровня - {2}\n".format( str(self.person_type), str(self.level), self.levelStr())) result += cl.g("А зовут тебя: ") result += self.name result += "\n" result += cl.y( "Сейчас у тебя {0} опыта, а для прокачки надо {1}\n".format( self.skill, self.nextLevelSkill())) result += cl.w("Сл:") + self.eff_strength_s() + cl.w( " Лв:") + self.eff_agility_s() + cl.w( " Жв:") + self.eff_vitality_s() + cl.w( " Уд:") + self.eff_luck_s() + "\n" simple_artefacts_str = cl.w("Феньки:") simple_artefacts_count = 0 power_artefacts_str = cl.w("Мощные феньки:") power_artefacts_count = 0 for a in self.artefacts: if a.is_powerful: power_artefacts_count += 1 power_artefacts_str += cl.b(" {0}".format(str(a))) else: simple_artefacts_count += 1 simple_artefacts_str += cl.b(" {0}".format(str(a))) if simple_artefacts_count > 0: result += simple_artefacts_str result += "\n" if power_artefacts_count > 0: result += power_artefacts_str result += "\n" if self.mobile: result += cl.lb("У тебя есть мобильник\n") if self.sun_glass: result += cl.lb("У тебя есть тёмные очки\n") if self.tattoo: result += cl.lb("На тебе зоновская наколка\n") weaponstr = "Урон {0}-{1}".format(self.getMinStrike(), self.getMaxStrike()) if (len(self.weapons) > 0): weaponstr += " " for w in self.weapons: weaponstr += str(w) weaponstr += " " weaponstr = cl.lb(weaponstr) else: weaponstr = cl.w(weaponstr) weaponstr += "\n" result += weaponstr healthstr = "Здоровье {0}/{1}".format(self.current_health, self.getMaxHealth()) if self.jaw_shield: healthstr += cl.b(" Зубная защита") if self.broken_leg: healthstr += cl.r(" Сломана нога") if self.broken_jaw: healthstr += cl.r(" Сломана челюсть") healthstr += "\n" if self.current_health > (self.getMaxHealth() * 2 / 3): result += cl.g(healthstr) elif self.current_health > (self.getMaxHealth() * 1 / 3): result += cl.y(healthstr) else: result += cl.r(healthstr) strikes = self.getStrikesAccuracy() accstr = "" if len(strikes) == 1: accstr = "Точность {0}%\n".format(strikes[0]) elif len(strikes) == 2: accstr = "Точность 90%, Второй удар {0}%\n".format(strikes[1]) else: accstr = "Точность 90% - {1} ударов, Точность {2} удара {3}%\n".format( len(strikes) - 1, len(strikes), strikes[len(strikes) - 1]) result += cl.w(accstr) if (len(self.shields) > 0): shieldstr = "Броня {0}".format(self.shield) shieldstr += " " for s in self.shields: shieldstr += str(s) shieldstr += " " shieldstr += "\n" result += cl.w(shieldstr) if (self.pot > 0): result += cl.w("Косяки {0}\n".format(self.pot)) if self.beer > 0: result += cl.w("Пиво {0}л.\n".format(round(self.beer, 1))) else: result += cl.r("Пива нет\n") if self.money > 0: result += cl.w("Бабки {0}".format(self.money)) else: result += cl.r("Бабок нет") if self.stuff > 0: result += cl.w("\nХлам {0}".format(self.stuff)) return result
def eff_luck_s(self): val = self.eff_luck() if val == self.luck: return cl.w(str(val)) else: return cl.b("{0}".format(val))
def eff_vitality_s(self): val = self.eff_vitality() if val == self.vitality: return cl.w(str(val)) else: return cl.b("{0}".format(val))
def eff_strength_s(self): val = self.eff_strength() if val == self.strength: return cl.w(str(val)) else: return cl.b("{0}".format(val))