def tavern_play(player): print("Shady looking guy sits at the table.") if player.money >= 10: choice = input("Do you want to play traveler? (yes/no): ") if choice == 'y' or choice == 'yes': print("Lest play then") npc_roll = dice.roll_dice() player_roll = dice.roll_dice() if player_roll > npc_roll: print("Shady guy: Not bad. Lucky bastard.") player.money += 10 print(player) elif player_roll < npc_roll: print("Too bad!") player.money -= 10 print(player) else: print("Shady guy: Draw? What a pity.") print(player) elif choice == 'n' or choice == "no": print( "Shady guy makes angry face and screams 'don't bother me then' and hits you in the face" ) player.life -= 10 print(player) else: print("Choose 'yes' or 'no'!") tavern_play(player) else: print( f"Shady guy: You need at least 10 gold coins to play with me and you have only {player.money}. Go away!" ) enter_the_tavern(player) enter_the_tavern(player)
def __init__(self): super().__init__() self.Name = 'Kobold' self.HP = roll_dice('1d4') roll = roll_dice('1d4') if roll <= 2: self.weapon = choice(Weapons['1d4']) else: if roll == 4: roll2 = roll_dice('1d4') if roll2 >= 3: self.weapon = choice(Weapons['1d8']) else: self.weapon = choice(Weapons['1d6']) else: self.weapon = choice(Weapons['1d6']) listx = ['Sling', 'Bow'] if self.weapon == 'Crossbow': self.weapon = 'Bow' self.Inventory = [self.weapon] # TODO needs a function if self.weapon in listx: self.Inventory.append('Dagger') if self.weapon == 'Bow': self.Inventory.append('5 Arrows') if self.weapon == 'Sling': self.Inventory.append('5 stones') self.Damage = weapon_damage(self.weapon)
def __init__(self): super().__init__() self.Name = 'Skeleton' self.HP = roll_dice('1d8') roll = roll_dice('1d6') if roll <= 1: self.weapon = choice(Weapons['1d4']) elif roll <= 4: self.weapon = choice(Weapons['1d6']) elif roll <= 5: self.weapon = choice(Weapons['1d8']) elif roll <= 6: self.weapon = choice(Weapons['1d10']) if self.weapon == 'Sling': self.weapon = 'Club' elif self.weapon == 'Crossbow': self.weapon = 'Bow' self.Damage = weapon_damage(self.weapon) self.Inventory = [self.weapon] # TODO needs a function listx = ['Sling', 'Bow'] if self.weapon in listx: self.Inventory.append('Dagger') if self.weapon == 'Bow': self.Inventory.append('5 Arrows') if self.weapon == 'Sling': self.Inventory.append('5 stones')
def starting_path(player): print("starting location description") choose = input( "Where ya go? Or maybe do you wanna look around? (city/river/look): ") if choose == 'city': return 'city' elif choose == 'river': return 'river' elif choose == 'look': print( "You look around. Notice small hut. Inside you meet weird gobling wearing medical smock. He wants to play a game." ) print( "Dialogue 1, blah blah regardless you will have to promise me to go to the city." ) goblin_choice = input( f"So will you play with me {player.name}? (yes/no)") if goblin_choice == "yes" or goblin_choice == "y": goblin_roll = dice.roll_dice() player_roll = dice.roll_dice() if goblin_roll > player_roll: print( f"Oh you loose {player.name}. I'm taking your kidney then!" ) player.life = 50 return "city" elif goblin_roll < player_roll: print( f"Damn you {player.name}. You win this time, here's your money!" ) player.money = 100 return "city" else: print( "Draw. What a shame. I'll take some of your hairs and have some money" ) player.money = 60 player.life = 90 return "city" else: print("I see you are a coward!") print( "THat hits your morale, but you proceed to the city scared of green psycho" ) player.life = 90 return "city" else: print('Please input one of presented options in bracket.') starting_path()
def ending_game(player): opponent_life = 666 while player.life > 0 and opponent_life > 0: if moving.end_game(player) == "Player win": opponent_life -= player.weapon print( f"{player.name} hits Black Knight for {player.weapon} points! Black Knight has {opponent_life} hit points left." ) elif moving.end_game(player) == "Black Knight win": player.life -= 10 print( f"{player.name} takes hit for 10 points. You have {player.life} hit points left." ) else: print(moving.end_game(player)) if player.life == 0: print("Oh no, you are dead! X_X") elif opponent_life <= 0: prize = dice.roll_dice() * 666 player.money += prize print( f"{player.name} has killed Black Knight and found {prize} gold coins. " f"Now {player.name} has {player.money} gold coins and {player.life}/100 hit points left." ) print( f"{player.name} feeling strong walks away from dead Black Knight.") player.quest = 3 print(f"Exhausted {player.name} goes to tavern to drink to death.") print("You win? I made mistake then it shouldn't be possible!")
def river_troll_fight2(player): opponent_life = 10 input("Just press anything to start fight (and confirm with ENTER).") while player.life > 0 and opponent_life > 0: if moving.encounter(player) == "Player win": opponent_life -= player.weapon print( f"{player.name} hits troll for {player.weapon} points! Troll has {opponent_life} hit points left." ) elif moving.encounter(player) == "Opponent win": player.life -= 10 print( f"{player.name} takes hit for 10 points. You have {player.life} hit points left." ) else: print(moving.encounter(player)) if player.life == 0: print(gascii.you_died()) elif opponent_life <= 0: prize = dice.roll_dice() * 20 player.money += prize print(gascii.moneyz()) print( f"{player.name} has killed troll and found {prize} gold coins. " f"Now {player.name} has {player.money} gold coins and {player.life}/100 hit points left." ) print(f"{player.name} feeling strong walks back towards river bank.") player.quest = 2 print( f"Exhausted {player.name} leaves the cave. It's time to go back to the city to get reward from the order, isn't it?" ) river_direction(player)
def river_troll_fight1(player): opponent_life = 10 while player.life > 0 and opponent_life > 0: if moving.encounter_disadvantage(player) == "Player win": opponent_life -= player.weapon print( f"{player.name} hits troll for {player.weapon} points! Troll has {opponent_life} hit points left." ) elif moving.encounter_disadvantage(player) == "Opponent win": player.life -= 10 print( f"{player.name} takes hit for 10 points. You have {player.life} hit points left." ) else: print(moving.encounter_disadvantage(player)) if player.life == 0: print("Oh no, you are dead! X_X") elif opponent_life <= 0: prize = dice.roll_dice() * 20 player.money += prize print( f"{player.name} has killed troll and found {prize} gold coins. " f"Now {player.name} has {player.money} gold coins and {player.life}/100 hit points left." ) print(f"{player.name} feeling strong walks back towards river bank.") player.quest = 2 print( f"Exhausted {player.name} leaves the cave. It's time to go back to the city to get reward from the order, isn't it?" ) river_direction(player)
def cave_wolf_encounter(player): opponent_life = 5 print(gascii.wolf_view()) input("Just press anything to start fight (and confirm with ENTER).") while player.life > 0 and opponent_life > 0: if moving.encounter(player) == "Player win": opponent_life -= player.weapon print( f"{player.name} hits wolf for {player.weapon} points! Wolf has {opponent_life} hit points left." ) elif moving.encounter(player) == "Opponent win": player.life -= 10 print( f"{player.name} takes hit for 10 points. You have {player.life} hit points left." ) else: print(moving.encounter(player)) if player.life == 0: print(gascii.you_died()) elif opponent_life <= 0: prize = dice.roll_dice() * 11 player.money += prize print(gascii.moneyz()) print( f"{player.name} has killed wolf and found {prize} gold coins. " f"Now {player.name} has {player.money} gold coins and {player.life}/100 hit points left." ) print(f"{player.name} feeling strong walks back towards river bank.") river_cave_02(player)
def cave_wolf_encounter(player): opponent_life = 5 while player.life > 0 and opponent_life > 0: if moving.encounter(player) == "Player win": opponent_life -= player.weapon print( f"{player.name} hits wolf for {player.weapon} points! Wolf has {opponent_life} hit points left." ) elif moving.encounter(player) == "Opponent win": player.life -= 10 print( f"{player.name} takes hit for 10 points. You have {player.life} hit points left." ) else: print(moving.encounter(player)) if player.life == 0: print("Oh no, you are dead! X_X") elif opponent_life <= 0: prize = dice.roll_dice() * 11 player.money += prize print( f"{player.name} has killed wolf and found {prize} gold coins. " f"Now {player.name} has {player.money} gold coins and {player.life}/100 hit points left." ) print(f"{player.name} feeling strong walks back towards river bank.") river_cave_02(player)
def encounter(player): player_roll = dice.roll_dice() + player.weapon opponent_roll = dice.roll_dice() if player_roll > opponent_roll: print( f"{player.name} has rolled {player_roll} and opponent has rolled {opponent_roll}. {player.name} wins this round!" ) return "Player win" elif player_roll < opponent_roll: print( f"{player.name} has rolled {player_roll} and opponent has rolled {opponent_roll}. {player.name} lost this round!" ) return "Opponent win" else: print( f"{player.name} has rolled {player_roll} and opponent has rolled {opponent_roll}. This round ended with draw!" ) return "Draw"
def ranged_fumble(roll): if roll == 1: damage = roll_dice(2, 6)["result"] return "Weapon is broken, dealing {} bludgeoning damage".format(damage) elif roll == 2: return "Weapon is broken" elif roll < 11: return "Weapon malfunction: fix with an action." elif roll < 20: return "Your attack hits the first creature {} of you within range.".format(direction()) else: return "You got lucky"
def melee_fumble(roll): if roll == 1: damage = roll_dice(2, 6)["result"] return "The weapon breaks and you take {} slashing damage.".format(damage) elif roll == 2: return "The weapon breaks." elif roll < 11: return "Your attack hits you. Receive half damage." elif roll < 20: return "Your attack hits the first creature {} of you within range.".format(direction()) else: return "You got lucky"
def cast_spell(*args, **kwargs): results = [] camera = kwargs.get('camera') con = kwargs.get('console') screen_width = kwargs.get('screen_width') screen_height = kwargs.get('screen_height') fov_map = kwargs.get('fov_map') caster = args[0] entities = kwargs.get('entities') damage = roll_dice(kwargs.get('damage')) maximum_range = kwargs.get('maximum_range') target = None closest_distance = maximum_range + 1 for entity in entities: if entity._Fighter and entity != caster and fov_map.fov[entity.y, entity.x]: distance = caster.distance_to(entity) if distance < closest_distance: target = entity closest_distance = distance if target: draw_animation(con, camera, screen_width, screen_height, target.x, target.y, 'flash') tcod.console_blit(con, 0, 0, screen_width, screen_height, 0, 0, 0) tcod.console_flush(keep_aspect=True) results.append({ 'consumed': True, 'target': target, 'message': Message( F'A crackling stream of energy hits {target.name} for {damage} hit points.' ) }) results.extend(target._Fighter.take_damage(damage)) else: results.append({ 'consumed': False, 'target': None, 'message': Message('No enemy is close enough to strike.', tcod.red) }) return results
def river_cave_01(player): print( f"The entrance is really dark but behind the corner {player.name} finds primitive fire pit." ) cave01_decision = input( "Next to it sleeps wolf. Do you want to sneak by it or attack it? (sneak/attack) " ) if cave01_decision == "sneak": if dice.roll_dice() >= 4: print(f"{player.name} sneaks by on tip toes.") river_cave_02(player) elif dice.roll_dice() < 4: print( f"Oh no! Clumsy {player.name} stomped on little twig and the wolf woke up. You need to fight for your life!" ) cave_wolf_encounter(player) elif cave01_decision == "attack": print(f"{player.name} grabs weapon and charges towards wolf!") cave_wolf_encounter(player) else: print("Please input command highlighted in the brackets.") river_cave_01(player)
def tavern_play(player): print("\nShady looking guy sits at the table.") if player.money >= 10: choice = input("Do you want to play traveler? (yes/no): ").lower() if choice == 'y' or choice == 'yes': print("Let's play then!") print(gascii.dice_art()) npc_roll = dice.roll_dice() player_roll = dice.roll_dice() if player_roll > npc_roll: print("Shady guy: Not bad. Lucky bastard.") print(gascii.moneyz()) player.money += 10 enter_the_tavern(player) elif player_roll < npc_roll: print("Too bad!") print(gascii.sad_smiley()) player.money -= 10 enter_the_tavern(player) else: print("Shady guy: Draw? What a pity. \n ¯\_(ツ)_/¯") enter_the_tavern(player) elif choice == 'n' or choice == "no": print("Shady guy makes angry face and screams 'don't bother me then' and hits you in the face") print(gascii.sword_art()) player.life -= 10 print(f"{player.name} lost 10 hit points.") enter_the_tavern(player) elif choice == "stats": commands.my_stats(player) tavern_play(player) else: commands.typo() tavern_play(player) else: print(f"Shady guy: You need at least 10 gold coins to play with me and you have only {player.money}. Go away!") enter_the_tavern(player) enter_the_tavern(player)
def main(): print('This program rolls two dice %d times and' % NUM_ROLLS) print('determines the number of times a certain number occurs.\n') number = int(input('Enter a number from 2 to 12: ')) while number > 12 or number < 2: print('Error, number must be between 2 and 12') number = int(input('Enter a number from 2 to 12: ')) count = 0 for i in range(NUM_ROLLS): die1, die2 = dice.roll_dice() if die1 + die2 == number: count += 1 print('Out of %d rolls, %d occurs %d times.' % (NUM_ROLLS, number, count))
def get_out(): global counter2 global count counter2 = counter2 + 1 print(count, ": ", counter2) result = roll_dice() change_label(result) if count == 0: main.title(player.get_player(count)) if counter2 % 3 == 0: count += 1 elif count == 1: main.title(player.get_player(count)) if counter2 % 3 == 0: count -= 1
def click(): global count main.title(player.get_player(count)) result = roll_dice() print(player.get_player(count), "(", count, ")", "rolled", result) change_label(result) saver.write_csv(player.get_player(count), result) if count == 0: if result != 6: main.title(player.get_player(count)) count = count + 1 elif count == 1: if result != 6: main.title(player.get_player(count)) count = count - 1
def cast_fireball(*args, **kwargs): results = [] camera = kwargs.get('camera') con = kwargs.get('console') screen_width = kwargs.get('screen_width') screen_height = kwargs.get('screen_height') fov_map = kwargs.get('fov_map') entities = kwargs.get('entities') damage_dice = kwargs.get('damage') radius = kwargs.get('radius') r = int((radius - 1) / 2) target_x = kwargs.get('target_x') - camera.x target_y = kwargs.get('target_y') - camera.y if not fov_map.fov[target_y, target_x]: results.append({ 'consumed': False, 'message': Message('You cannot target a tile outside your field of view.', tcod.yellow) }) return results for x in range(target_x - r, target_x + r + 1): for y in range(target_y - r, target_y + r + 1): draw_animation(con, camera, screen_width, screen_height, x, y, 'explosion') tcod.console_blit(con, 0, 0, screen_width, screen_height, 0, 0, 0) tcod.console_flush(keep_aspect=True) results.append({ 'consumed': True, 'message': Message(F'The flaming sphere explodes!', tcod.orange) }) for entity in entities: if entity.distance(target_x, target_y) <= radius and entity._Fighter: damage = roll_dice(damage_dice) results.append({ 'message': Message(F'{entity.name} gets blasted for {damage} hit points.', tcod.orange) }) results.extend(entity._Fighter.take_damage(damage)) return results
def _add_to_combat(self, combat, monsters): if not combat: return # Add monsters to the combat combat.monsters.update({monster.name: monster for monster in monsters}) # No turn manager, so don't worry about adding them to the # initiative order... if not combat.tm: return for monster in monsters: if self.initiative_resolver: roll = self.initiative_resolver(monster) else: roll = roll_dice(1, 20, modifier=monster.initiative_mod) combat.tm.add_combatant(monster, roll)
def cast_fireball(*args, **kwargs): results = [] animation = kwargs.get('animation') root = kwargs.get('root') context = kwargs.get('context') camera = kwargs.get('camera') fov_map = kwargs.get('fov_map') entities = kwargs.get('entities') damage_dice = kwargs.get('damage') radius = kwargs.get('radius') r = int((radius-1) / 2) target_x = kwargs.get('target_x') target_y = kwargs.get('target_y') if not fov_map.fov[target_y, target_x]: results.append({'consumed': False, 'message': Message(SYS_LOG['outside_fov'], tcod.yellow)}) return results ex = tuple(colors.get('explosion')) for x in range(target_x - r, target_x + r + 1): for y in range(target_y - r, target_y + r + 1): draw_animation(animation, camera, x,y, " ", bg=ex) refresh_console(root, animation, context, 0, 1 , 0.15) results.append({'consumed': True, 'animate': True, 'message': Message(ITEM_LOG['magic']['fireball']['describe'], tcod.orange)}) for entity in entities: if entity.distance(target_x, target_y) <= math.sqrt(2*(r**2)) and entity._Fighter: damage = roll_dice(damage_dice) results.append({'message': Message(cout(ITEM_LOG['magic_attack'], 받침(ITEM_LOG['magic']['fireball']['name']), ITEM_LOG['magic']['fireball']['effect'], 받침(entity.name,1), damage), tcod.orange)}) results.extend(entity._Fighter.take_damage(damage)) return results
def melee_critical(roll): damage = 0 if roll == 1: return 'Target must succeed DC 14 con save or go unconscious until they succeed a DC12 con save on the end of their turn.' elif roll == 2: damage = roll_dice(3, 6)["result"] return 'Target suffers internal trauma and takes {} bludgeoning damage.'.format( damage) elif roll < 5: return "The target cannot use reactions for the rest of your turn." elif roll < 11: return 'You can use your reaction to make a single melee attack against this creature.' elif roll < 15: return "You build momentum and gain an additional 10ft of movement this turn." elif roll < 18: return "Limb damage: the target's movement speed is decreased by 5 feet until they complete a short rest." elif roll < 20: return 'If the target is holding a weapon, you knock it onto the ground.' else: return 'You gain an extra action this turn'
def attack(self, target): """ 0: (int) attack difficulty 1: (int) steps achieved 2: (list) dices rolled 3: (tuple) damage dealed FAT, INJ 4: missed, blocked, dmg, overkill :param target: :return: """ assert isinstance(target, Creature) attack_report = [] attack_difficulty = 2 attack_report.append(attack_difficulty) step_value, dices_rolled = make_skill_roll(self.sheet.fitness, self.sheet.brawling) attack_report.append(step_value) attack_report.append(dices_rolled) result = step_value - attack_difficulty # Overkill if result >= 4: target.sheet.fatigue += 1 attack_report.append((1, 0)) attack_report.append("overkill") elif result >= 0: dice = roll_dice(1) if dice > target.sheet.ac: target.sheet.fatigue += 1 attack_report.append((1, 0)) attack_report.append("dmg") else: attack_report.append((0, 0)) attack_report.append("blocked") else: attack_report.append((0, 0)) attack_report.append("missed") return attack_report
def encounter_disadvantage(player): player_roll = dice.roll_dice() + player.weapon opponent_roll = 0 opponent_roll1 = dice.roll_dice_1k12() opponent_roll2 = dice.roll_dice_1k12() if opponent_roll1 > opponent_roll2: opponent_roll = opponent_roll1 else: opponent_roll = opponent_roll2 if player_roll > opponent_roll: print( f"{player.name} has rolled {player_roll} and opponent has rolled {opponent_roll}. {player.name} wins this round!" ) return "Player win" elif player_roll < opponent_roll: print( f"{player.name} has rolled {player_roll} and opponent has rolled {opponent_roll}. {player.name} lost this round!" ) return "Opponent win" else: print( f"{player.name} has rolled {player_roll} and opponent has rolled {opponent_roll}. This round ended with draw!" ) return "Draw"
def end_game(player): player_roll = dice.roll_dice() + player.weapon opponent_roll = 0 opponent_roll1 = dice.roll_dice_1k12() + player.weapon opponent_roll2 = dice.roll_dice_1k12() + player.weapon if opponent_roll1 > opponent_roll2: opponent_roll = opponent_roll1 else: opponent_roll = opponent_roll2 if player_roll > opponent_roll: print( f"{player.name} has rolled {player_roll} and Black Knight has rolled {opponent_roll}. {player.name} wins this round!" ) return "Player win" elif player_roll < opponent_roll: print( f"{player.name} has rolled {player_roll} and Black Knight has rolled {opponent_roll}. {player.name} lost this round!" ) return "Black Knight win" else: print( f"{player.name} has rolled {player_roll} and Black Knight has rolled {opponent_roll}. This round ended with draw!" ) return "Draw"
import dice print(dice.roll_dice()) print(dice.roll_dice())
if this_game < best_game[1]: best_game = [al250.name, this_game] best_values = these_values1 has_won = True if current_points[al500.name] >= WINNING_POINTS: wins[al500.name] += 1 if this_game < best_game[1]: best_game = [al500.name, this_game] best_values = these_values2 has_won = True num_dice = NUM_DICE turn1 = True pts1 = 0 while turn1: rroll = roll_dice(num_dice) vals = gd.value(rroll) if len(vals) == 0: # No Points! turn1 = False pts1 = 0 else: choice = al250.decision(vals, pts1) these_values1.append(choice) if choice[1] == None: # Decided to take points current_points[al250.name] += choice[0] + pts1 turn1 = False else: pts1 += choice[0] num_dice = choice[1]
args = parser.parse_args() pattern = re.compile('^(\d+)d(\d+)([-+])?(\d+)?$', re.IGNORECASE) matches = pattern.match(args.dice) if matches: groups = matches.groups() if args.high: total = dice.roll_high(int(groups[0]), int(groups[1]), float(args.factor)) fairness = '(The dice are weighted high)' elif args.low: total = dice.roll_low(int(groups[0]), int(groups[1]), float(args.factor)) fairness = '(The dice are weighted low)' else: total = dice.roll_dice(int(groups[0]), int(groups[1])) fairness = '(The dice are fair)' if groups[2] is None: print('Rolled', total, 'for a total of', sum(total), fairness) else: if groups[2] == '-': modifier = int(groups[3]) * -1 print('Rolled', total, 'minus', groups[3], 'for a total of', sum(total) + modifier, fairness) else: modifier = int(groups[3]) print('Rolled', total, 'plus', groups[3], 'for a total of', sum(total) + modifier, fairness) else: print('No dice string found.')
def ultimatedie(): dice_number = dice.roll_dice() while (dice_number == 6) or (dice_number == 5): dice_number = dice.roll_dice()
def natural_fumble(roll): if roll == 1: return "The attack is disabled until you complete a short or long rest, and you take {} slashing damage".format(roll_dice(2, 6)["result"]) elif roll == 2: return "This attack is disabled until you complete a short or long rest" elif roll < 11: return "Minor sprain: take {} bludgeoning damage the next time you use this attack".format(roll_dice(2, 6)["result"]) elif roll < 20: return "Your attack hits the first creature {} of you within range.".format(direction()) else: return "You got lucky"
def main(): layout = [ [ # TODO output only stores one line, have it write like stdout sg.Output( size=(90, 25), echo_stdout_stderr=True, tooltip="Results of the dice rolled", key="-OUTPUT-", ) ], [ # TODO find way to make to auto-clear this field when clicked on sg.Input(20, size=(8, 1), tooltip="Amount of sides on the dice", key="-SIDES-"), # TODO disable if 'repeat' chosen and vice versa sg.Input( 1, size=(8, 1), tooltip= "Times to roll the dice. Disabled if Repeat button enabled", key="-COUNT-", ), # TODO these need to be able to be unchecked # but remain in radio group to be one or the other sg.Radio( "Adv.", "adv_or_disadv", tooltip="Roll two d20 and choose the higher roll", ), sg.Radio( "Disadv.", "adv_or_disadv", tooltip="Roll two d20 and choose the lower roll", ), sg.Check( "Sum rolls", auto_size_text=True, tooltip="Sum all rolls. Only valid with 'Count'", ), sg.Submit( "Roll!", auto_size_button=True, tooltip="Roll the dice with the parameters given", ), ], ] window = sg.Window( "Dice", layout, auto_size_text=True, auto_size_buttons=True, size=(600, 400), element_justification="center", ) while True: event, values = window.read() if event in (sg.WINDOW_CLOSED, "Exit"): break if event == "Roll!": sides = int(values["-SIDES-"]) count = int(values["-COUNT-"]) window["-OUTPUT-"].update(roll_dice(sides, count)) window.Refresh() window.close()