<s> from globals import * <EOL> import graphics as gfx <EOL> import life as lfe <EOL> import numbers <EOL> import alife <EOL> import menus <EOL> import random <EOL> def get_stance_score ( p , stance ) : <EOL> _current_score = p [ '<STR_LIT>' ] [ p [ '<STR_LIT>' ] ] <EOL> _next_score = p [ '<STR_LIT>' ] [ stance ] <EOL> return abs ( _current_score - _next_score ) <EOL> def assume_stance ( p , stance , towards = None ) : <EOL> if p [ '<STR_LIT>' ] [ '<STR_LIT>' ] == stance and p [ '<STR_LIT>' ] [ '<STR_LIT>' ] == towards : <EOL> if '<STR_LIT>' in p : <EOL> gfx . message ( '<STR_LIT>' % stance ) <EOL> return False <EOL> if p [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> if not p [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = False <EOL> else : <EOL> print p [ '<STR_LIT:name>' ] , '<STR_LIT>' <EOL> return False <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = get_stance_score ( p , stance ) <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = stance <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = towards <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = False <EOL> if '<STR_LIT>' in p : <EOL> gfx . message ( '<STR_LIT>' % stance ) <EOL> elif '<STR_LIT>' in LIFE [ towards ] : <EOL> gfx . message ( '<STR_LIT>' % ( '<STR_LIT:U+0020>' . join ( p [ '<STR_LIT:name>' ] ) , stance ) ) <EOL> print p [ '<STR_LIT:name>' ] , '<STR_LIT>' , p [ '<STR_LIT>' ] [ '<STR_LIT>' ] , '<STR_LIT>' % p [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT:)>' <EOL> return True <EOL> def force_stance ( p , target_id , stance ) : <EOL> if not p [ '<STR_LIT>' ] == stance : <EOL> if '<STR_LIT>' in p : <EOL> gfx . message ( '<STR_LIT>' % '<STR_LIT:U+0020>' . join ( LIFE [ target_id ] [ '<STR_LIT:name>' ] ) , style = '<STR_LIT>' ) <EOL> elif '<STR_LIT>' in LIFE [ target_id ] : <EOL> gfx . message ( '<STR_LIT>' % ( '<STR_LIT:U+0020>' . join ( p [ '<STR_LIT:name>' ] ) , stance ) , style = '<STR_LIT>' ) <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = get_stance_score ( p , stance ) <EOL> p [ '<STR_LIT>' ] = stance <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = '<STR_LIT>' <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = True <EOL> print p [ '<STR_LIT:name>' ] , '<STR_LIT>' , p [ '<STR_LIT>' ] , '<STR_LIT>' % p [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT:)>' <EOL> def examine_possible_moves ( p , targets ) : <EOL> _moves = { } <EOL> for _target in targets : <EOL> target = LIFE [ _target ] <EOL> if target == p : <EOL> continue <EOL> if sum ( [ abs ( i ) for i in target [ '<STR_LIT>' ] ] ) : <EOL> continue <EOL> if '<STR_LIT>' in p : <EOL> _moves [ _target ] = { '<STR_LIT>' : [ ] , '<STR_LIT>' : [ ] } <EOL> _next_stance = p [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> _next_target_stance = target [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> _incoming_attack = False <EOL> if target [ '<STR_LIT>' ] in target [ '<STR_LIT>' ] : <EOL> _incoming_attack = target [ '<STR_LIT>' ] <EOL> elif _next_target_stance in target [ '<STR_LIT>' ] : <EOL> _incoming_attack = _next_target_stance <EOL> if _incoming_attack : <EOL> if not _next_stance in p [ '<STR_LIT>' ] [ _incoming_attack ] [ '<STR_LIT>' ] : <EOL> if '<STR_LIT>' in p : <EOL> _moves [ _target ] [ '<STR_LIT>' ] . extend ( p [ '<STR_LIT>' ] [ _incoming_attack ] [ '<STR_LIT>' ] ) <EOL> elif p [ '<STR_LIT>' ] [ _incoming_attack ] [ '<STR_LIT>' ] : <EOL> assume_stance ( p , random . choice ( p [ '<STR_LIT>' ] [ _incoming_attack ] [ '<STR_LIT>' ] ) , towards = _target ) <EOL> return False <EOL> elif p [ '<STR_LIT>' ] in p [ '<STR_LIT>' ] [ _incoming_attack ] [ '<STR_LIT>' ] : <EOL> return True <EOL> if '<STR_LIT>' in p : <EOL> _moves [ _target ] [ '<STR_LIT>' ] . extend ( p [ '<STR_LIT>' ] . keys ( ) ) <EOL> else : <EOL> assume_stance ( p , random . choice ( p [ '<STR_LIT>' ] . keys ( ) ) , towards = _target ) <EOL> return True <EOL> if _moves and menus . get_menu_by_name ( '<STR_LIT>' ) == - <NUM_LIT:1> and not sum ( [ abs ( i ) for i in p [ '<STR_LIT>' ] ] ) : <EOL> _menu = [ ] <EOL> for target_id in _moves : <EOL> if _moves [ target_id ] [ '<STR_LIT>' ] : <EOL> _menu . append ( menus . create_item ( '<STR_LIT:title>' , '<STR_LIT>' % '<STR_LIT:U+0020>' . join ( LIFE [ target_id ] [ '<STR_LIT:name>' ] ) , None ) ) <EOL> for move in _moves [ target_id ] [ '<STR_LIT>' ] : <EOL> _menu . append ( menus . create_item ( '<STR_LIT>' , move , None , move = move , target = target_id ) ) <EOL> if _moves [ target_id ] [ '<STR_LIT>' ] : <EOL> _menu . append ( menus . create_item ( '<STR_LIT:title>' , '<STR_LIT>' % '<STR_LIT:U+0020>' . join ( LIFE [ target_id ] [ '<STR_LIT:name>' ] ) , None ) ) <EOL> for move in _moves [ target_id ] [ '<STR_LIT>' ] : <EOL> _menu . append ( menus . create_item ( '<STR_LIT>' , move , None , move = move , target = target_id ) ) <EOL> _m = menus . create_menu ( menu = _menu , <EOL> position = [ <NUM_LIT:1> , <NUM_LIT:1> ] , <EOL> title = '<STR_LIT>' , <EOL> format_str = '<STR_LIT>' , <EOL> on_select = lambda entry : assume_stance ( LIFE [ SETTINGS [ '<STR_LIT>' ] ] , <EOL> entry [ '<STR_LIT>' ] , <EOL> towards = entry [ '<STR_LIT:target>' ] ) , <EOL> close_on_select = True ) <EOL> menus . activate_menu ( _m ) <EOL> def tick ( p ) : <EOL> if p [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] -= <NUM_LIT:1> <EOL> if p [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> print p [ '<STR_LIT:name>' ] , '<STR_LIT>' , p [ '<STR_LIT>' ] [ '<STR_LIT>' ] , '<STR_LIT>' % p [ '<STR_LIT>' ] [ '<STR_LIT>' ] + '<STR_LIT:)>' <EOL> return False <EOL> if p [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> print p [ '<STR_LIT:name>' ] , p [ '<STR_LIT>' ] , '<STR_LIT>' , p [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> p [ '<STR_LIT>' ] = p [ '<STR_LIT>' ] [ '<STR_LIT>' ] <EOL> p [ '<STR_LIT>' ] [ '<STR_LIT>' ] = None <EOL> return True <EOL> def react_to_attack ( life , target_id , stance ) : <EOL> _target = LIFE [ target_id ] <EOL> _attack = _target [ '<STR_LIT>' ] [ stance ] <EOL> if life [ '<STR_LIT>' ] <= _attack [ '<STR_LIT>' ] : <EOL> _force = life [ '<STR_LIT>' ] [ life [ '<STR_LIT>' ] ] - _attack [ '<STR_LIT>' ] <EOL> else : <EOL> _force = <NUM_LIT:0> <EOL> if _force >= life [ '<STR_LIT>' ] [ life [ '<STR_LIT>' ] ] : <EOL> lfe . push ( life , numbers . direction_to ( LIFE [ target_id ] [ '<STR_LIT>' ] , life [ '<STR_LIT>' ] ) , _attack [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) <EOL> force_stance ( life , target_id , '<STR_LIT>' ) <EOL> elif life [ '<STR_LIT>' ] [ life [ '<STR_LIT>' ] ] <= life [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> force_stance ( life , target_id , '<STR_LIT>' ) <EOL> lfe . add_wound ( life , random . choice ( life [ '<STR_LIT:body>' ] . keys ( ) ) , pain = _attack [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) <EOL> def perform_moves ( people ) : <EOL> for life_id in people : <EOL> _life = LIFE [ life_id ] <EOL> if not _life [ '<STR_LIT>' ] in _life [ '<STR_LIT>' ] or not _life [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> continue <EOL> if _life [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> _target = LIFE [ _life [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] <EOL> if _life [ '<STR_LIT>' ] in _life [ '<STR_LIT>' ] and _target [ '<STR_LIT>' ] in _life [ '<STR_LIT>' ] [ _life [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] : <EOL> if '<STR_LIT>' in _target : <EOL> gfx . message ( '<STR_LIT>' % ( '<STR_LIT:U+0020>' . join ( _life [ '<STR_LIT:name>' ] ) , _target [ '<STR_LIT>' ] ) , style = '<STR_LIT>' ) <EOL> elif '<STR_LIT>' in _life : <EOL> gfx . message ( '<STR_LIT>' % ( '<STR_LIT:U+0020>' . join ( _target [ '<STR_LIT:name>' ] ) , _life [ '<STR_LIT>' ] ) , style = '<STR_LIT>' ) <EOL> print '<STR_LIT>' % ( _target [ '<STR_LIT:name>' ] , _life [ '<STR_LIT:name>' ] , _life [ '<STR_LIT>' ] ) <EOL> else : <EOL> lfe . memory ( _life , '<STR_LIT>' , target = _target [ '<STR_LIT:id>' ] ) <EOL> lfe . memory ( _target , '<STR_LIT>' , target = _life [ '<STR_LIT:id>' ] ) <EOL> alife . judgement . judge_life ( _target , _life [ '<STR_LIT:id>' ] ) <EOL> if '<STR_LIT>' in _life : <EOL> gfx . message ( '<STR_LIT>' % ( _life [ '<STR_LIT>' ] , '<STR_LIT:U+0020>' . join ( _target [ '<STR_LIT:name>' ] ) ) , style = '<STR_LIT>' ) <EOL> elif '<STR_LIT>' in _target : <EOL> gfx . message ( '<STR_LIT>' % ( '<STR_LIT:U+0020>' . join ( _life [ '<STR_LIT:name>' ] ) , _life [ '<STR_LIT>' ] ) , style = '<STR_LIT>' ) <EOL> print '<STR_LIT>' % ( _life [ '<STR_LIT:name>' ] , _life [ '<STR_LIT>' ] , _target [ '<STR_LIT:name>' ] ) <EOL> react_to_attack ( _target , _life [ '<STR_LIT:id>' ] , _life [ '<STR_LIT>' ] ) <EOL> _life [ '<STR_LIT>' ] [ '<STR_LIT>' ] = None <EOL> def fight ( life , target ) : <EOL> examine_possible_moves ( life , [ target ] ) <EOL> def process_fights ( ) : <EOL> _fighters = [ ] <EOL> for life in LIFE . values ( ) : <EOL> if life [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> if sum ( [ abs ( i ) for i in life [ '<STR_LIT>' ] ] ) : <EOL> continue <EOL> if not life [ '<STR_LIT:id>' ] in _fighters : <EOL> _fighters . append ( life [ '<STR_LIT:id>' ] ) <EOL> if life [ '<STR_LIT>' ] [ '<STR_LIT>' ] : <EOL> if sum ( [ abs ( i ) for i in LIFE [ life [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] ] ) : <EOL> life [ '<STR_LIT>' ] [ '<STR_LIT>' ] = None <EOL> life [ '<STR_LIT>' ] [ '<STR_LIT>' ] = None <EOL> continue <EOL> if numbers . distance ( life [ '<STR_LIT>' ] , LIFE [ life [ '<STR_LIT>' ] [ '<STR_LIT>' ] ] [ '<STR_LIT>' ] ) > <NUM_LIT:1> : <EOL> life [ '<STR_LIT>' ] [ '<STR_LIT>' ] = None <EOL> life [ '<STR_LIT>' ] [ '<STR_LIT>' ] = None <EOL> continue <EOL> if not life [ '<STR_LIT>' ] [ '<STR_LIT>' ] in _fighters : <EOL> _fighters . append ( life [ '<STR_LIT>' ] [ '<STR_LIT>' ] ) <EOL> if len ( _fighters ) <= <NUM_LIT:1> : <EOL> WORLD_INFO [ '<STR_LIT>' ] = WORLD_INFO [ '<STR_LIT>' ] <EOL> return False <EOL> if WORLD_INFO [ '<STR_LIT>' ] : <EOL> WORLD_INFO [ '<STR_LIT>' ] -= <NUM_LIT:1> <EOL> else : <EOL> WORLD_INFO [ '<STR_LIT>' ] = WORLD_INFO [ '<STR_LIT>' ] <EOL> return False <EOL> for _fighter in _fighters : <EOL> if lfe . calculate_velocity ( LIFE [ _fighter ] ) : <EOL> continue <EOL> examine_possible_moves ( LIFE [ _fighter ] , _fighters ) <EOL> tick ( LIFE [ _fighter ] ) <EOL> perform_moves ( _fighters ) <EOL> _i = <NUM_LIT:0> <EOL> for fighter in _fighters : <EOL> if sum ( [ abs ( i ) for i in LIFE [ fighter ] [ '<STR_LIT>' ] ] ) : <EOL> continue <EOL> _i += <NUM_LIT:1> <EOL> if _i <= <NUM_LIT:1> : <EOL> if menus . get_menu_by_name ( '<STR_LIT>' ) > - <NUM_LIT:1> : <EOL> menus . delete_active_menu ( ) <EOL> return _fighters </s>
