battleman.py: Output formatting, added some new output when program is run
This commit is contained in:
parent
8704060b60
commit
5fd07e0ae1
45
battleman.py
45
battleman.py
|
@ -5,6 +5,12 @@
|
||||||
# A table-top RPG battle flow manager
|
# A table-top RPG battle flow manager
|
||||||
# Tuned pretty specifically to D&D 4e for now... need a templatized system
|
# Tuned pretty specifically to D&D 4e for now... need a templatized system
|
||||||
# to do anything fancier... may develop that at some point.
|
# to do anything fancier... may develop that at some point.
|
||||||
|
#
|
||||||
|
# future features:
|
||||||
|
# * keep a pickled file or a shelve db of the current state, and add a --resume option
|
||||||
|
# for resuming a battle later
|
||||||
|
# * an option for passing in multiple files that contain combatant definitions
|
||||||
|
# * down combatants go into a separate list
|
||||||
|
|
||||||
from dice import Dice
|
from dice import Dice
|
||||||
import sys
|
import sys
|
||||||
|
@ -133,7 +139,7 @@ class Combatant():
|
||||||
|
|
||||||
def input_int(prompt, default=-1):
|
def input_int(prompt, default=-1):
|
||||||
if default != -1:
|
if default != -1:
|
||||||
prompt = prompt + '[{}]'.format(default)
|
prompt = prompt + ' [{}]'.format(default)
|
||||||
prompt = prompt + ': '
|
prompt = prompt + ': '
|
||||||
|
|
||||||
data = raw_input(prompt)
|
data = raw_input(prompt)
|
||||||
|
@ -153,6 +159,19 @@ class Battle():
|
||||||
self.round = -1
|
self.round = -1
|
||||||
|
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
ret = ''
|
||||||
|
if self.is_started():
|
||||||
|
ret = 'Battle underway, currently on round {}\n'.format(self.round)
|
||||||
|
else:
|
||||||
|
ret = 'Battle not yet started\n'
|
||||||
|
|
||||||
|
ret = ret + 'Combatants:\n'
|
||||||
|
ret = ret + self.list_combatants()
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def is_started(self):
|
def is_started(self):
|
||||||
return self.current != None
|
return self.current != None
|
||||||
|
|
||||||
|
@ -163,9 +182,8 @@ class Battle():
|
||||||
self.combatant_hash[c.index] = c
|
self.combatant_hash[c.index] = c
|
||||||
|
|
||||||
|
|
||||||
# fixme: still returns None after battle begins
|
|
||||||
def get_current_group(self):
|
def get_current_group(self):
|
||||||
if self.current:
|
if self.current != -1:
|
||||||
return self.groups[self.current]
|
return self.groups[self.current]
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
@ -174,7 +192,6 @@ class Battle():
|
||||||
def begin(self):
|
def begin(self):
|
||||||
if self.is_started():
|
if self.is_started():
|
||||||
print("Error: battle is already running")
|
print("Error: battle is already running")
|
||||||
return
|
|
||||||
|
|
||||||
for g in self.groups:
|
for g in self.groups:
|
||||||
if g.is_solo_group() and g.members[0].pc:
|
if g.is_solo_group() and g.members[0].pc:
|
||||||
|
@ -190,14 +207,19 @@ class Battle():
|
||||||
print '{} ({})'.format(g.name, g.init)
|
print '{} ({})'.format(g.name, g.init)
|
||||||
|
|
||||||
|
|
||||||
|
# Returns a formatted string with all of the combatants
|
||||||
def list_combatants(self):
|
def list_combatants(self):
|
||||||
|
ret = ''
|
||||||
|
|
||||||
for g in self.groups:
|
for g in self.groups:
|
||||||
if g.is_solo_group():
|
if g.is_solo_group():
|
||||||
print('{}: {}'.format(g.members[0].index, g.name))
|
ret = ret + '{}: {}\n'.format(g.members[0].index, g.name)
|
||||||
else:
|
else:
|
||||||
print('{}:'.format(g.name))
|
ret = ret + '{}:\n'.format(g.name)
|
||||||
for c in g.members:
|
for c in g.members:
|
||||||
print('\t{}: {} ({})'.format(c.index, c.name, c.get_health_summary()))
|
ret = ret + '\t{}: {} ({})\n'.format(c.index, c.name, c.get_health_summary())
|
||||||
|
|
||||||
|
return ret.rstrip()
|
||||||
|
|
||||||
|
|
||||||
def next_combatant(self):
|
def next_combatant(self):
|
||||||
|
@ -228,11 +250,15 @@ def main():
|
||||||
# print("Adding enemy group {}".format(i))
|
# print("Adding enemy group {}".format(i))
|
||||||
# battle.add_group(CombatGroup.from_input())
|
# battle.add_group(CombatGroup.from_input())
|
||||||
|
|
||||||
|
print "Welcome to 4e Battle Manager.\nCurrent status:"
|
||||||
|
print battle
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
do_prompt()
|
do_prompt()
|
||||||
|
|
||||||
|
|
||||||
def do_prompt():
|
def do_prompt():
|
||||||
|
print('')
|
||||||
comm = raw_input('> ')
|
comm = raw_input('> ')
|
||||||
|
|
||||||
if comm == '?':
|
if comm == '?':
|
||||||
|
@ -267,7 +293,7 @@ def do_damage():
|
||||||
return
|
return
|
||||||
|
|
||||||
battle.list_combatants()
|
battle.list_combatants()
|
||||||
index = input_int('choose combatant', battle.get_current_group().members[0])
|
index = input_int('choose combatant', battle.get_current_group().members[0].index)
|
||||||
amount = input_int('damage')
|
amount = input_int('damage')
|
||||||
battle.deal_damage(index, amount)
|
battle.deal_damage(index, amount)
|
||||||
|
|
||||||
|
@ -285,8 +311,7 @@ c - apply a condition
|
||||||
r - remove a condition (this can also happen automatically)
|
r - remove a condition (this can also happen automatically)
|
||||||
n - next (end the current combat group's turn)
|
n - next (end the current combat group's turn)
|
||||||
w - wait (remove a combatant from the initiative order and into a separate pool)
|
w - wait (remove a combatant from the initiative order and into a separate pool)
|
||||||
q - quit
|
q - quit""")
|
||||||
""")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Reference in New Issue
Block a user