- 好友
- 0
- 在线时间
- 0 小时
- 最后登录
- 2025-1-20
随仆

- UID
- 3635071
- 第纳尔
- 2
- 精华
- 0
- 互助
- 1
- 荣誉
- 0
- 贡献
- 0
- 魅力
- 0
- 注册时间
- 2024-3-16
 鲜花( 0)  鸡蛋( 0)
|
本帖最后由 Visaell 于 2025-1-7 22:29 编辑
前几天想动手写一段自动排序驻军的代码,发现R大之前写过,使用的是选择排序的方法。
因此我本来想用递归写一个quick sort, 但是骑砍的递归实在太难了,于是我写了一个桶排的方法。
当然如有错误,恳请指出,欢迎大家讨论。(:
(这里用到的item_slot需要自己去constant里面定义一下)
以下是代码:- ## dd sort troops by level
- (6,
- [
- (try_for_parties, ":party_no"),
- (neq, ":party_no", "p_temp_party"),
- (neq, ":party_no", "p_main_party"),
- (assign, ":continue", 0),
- (try_begin),
- (party_slot_eq, ":party_no", slot_party_type, spt_kingdom_hero_party),
- (party_is_active, ":party_no"),
- (assign, ":continue", 1),
- (else_try),
- (this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_castle),
- (party_slot_eq, ":party_no", slot_party_type, spt_town),
- (assign, ":continue", 1),
- (try_end),
- (eq, ":continue", 1),
- (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
- (assign, ":cur_num",0),
- (assign,":max_level",0),
- # start to sort
- (try_for_range, ":unused",0,":num_stacks"),
- (party_stack_get_troop_id, ":cur_troop", ":party_no", ":unused"),
- (neg|troop_is_hero, ":cur_troop"),
- #(str_store_troop_name, s1, ":cur_troop"),
- (store_character_level, ":troop_level", ":cur_troop"),
- (val_sub, ":troop_level",1),
- (val_mul, ":troop_level",15),
- (assign,":cur_num",":troop_level"),
- (try_begin),
- (item_slot_eq,":cur_num",slot_item_array,0),
- (item_set_slot,":cur_num",slot_item_array,":cur_troop"),
- (item_set_slot,":cur_num",slot_item_troop_num,1),
- (else_try),
- (item_get_slot,":same_lv",":cur_num",slot_item_troop_num),
- (val_add,":same_lv",1),
- (item_set_slot,":cur_num",slot_item_troop_num,":same_lv"),
- (val_add,":cur_num",":same_lv"),
- (item_set_slot,":cur_num",slot_item_array,":cur_troop"),
- (try_end),
- (try_begin),
- (gt,":cur_num",":max_level"),
- (assign,":max_level",":troop_level"),
- (try_end),
- (party_stack_get_size, ":stack_size", ":party_no", ":unused"),
- (party_stack_get_num_wounded, ":num_wounded", ":party_no", ":unused"),
- (item_set_slot,":cur_num",slot_item_party_num,":stack_size"),
- (item_set_slot,":cur_num",slot_item_party_wounded,":num_wounded"),
- (try_end),
- (val_add,":max_level",20),
- #(party_get_num_companions,reg2, ":party_no"),
- (try_for_range_backwards, ":num", 0, ":max_level"),
- (neg|item_slot_eq,":num",slot_item_array,0),
- (item_get_slot,":cur_troop",":num",slot_item_array),
- #(str_store_troop_name, s1, ":cur_troop"),
- (item_get_slot,":stack_size",":num",slot_item_party_num),
- (item_get_slot,":num_wounded",":num",slot_item_party_wounded),
- (party_remove_members, ":party_no", ":cur_troop", ":stack_size"),
- (party_add_members, ":party_no", ":cur_troop", ":stack_size"),
- (party_wound_members, ":party_no", ":cur_troop", ":num_wounded"),
- (item_set_slot,":num",slot_item_array,0),
- (item_set_slot,":num",slot_item_party_num,0),
- (item_set_slot,":num",slot_item_party_wounded,0),
- (item_set_slot,":num",slot_item_troop_num,0),
- (try_end),
- #(party_get_num_companions,reg1, ":party_no"),
- #(try_begin),
- #(neq,reg1,reg2),
- #(display_message,"@total number error"),
- #(display_message,"@after {reg1} "),
- #(display_message,"@original {reg2} "),
- #(try_end), # check if the number of companions is the same as before sorting
- (try_end),
- (display_debug_message, "@Sorting troops by level done."),
- ]),
- ## dd sort troops by level end
-
复制代码
|
|