骑马与砍杀中文站论坛

用户名  找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

帖子
购买CDKEY 衣谷三国
查看: 841|回复: 0

[功能与代码] AI驻军与军队自动排序(优化版)

[复制链接]

1

主题

19

回帖

11

积分

随仆

Rank: 1

UID
3635071
第纳尔
2
精华
0
互助
1
荣誉
0
贡献
0
魅力
0
注册时间
2024-3-16
鲜花(0) 鸡蛋(0)
发表于 2025-1-7 17:09:41 | 显示全部楼层 |阅读模式
本帖最后由 Visaell 于 2025-1-7 22:29 编辑

前几天想动手写一段自动排序驻军的代码,发现R大之前写过,使用的是选择排序的方法。
因此我本来想用递归写一个quick sort, 但是骑砍的递归实在太难了,于是我写了一个桶排的方法。
当然如有错误,恳请指出,欢迎大家讨论。(:
(这里用到的item_slot需要自己去constant里面定义一下)
以下是代码:
  1.   ## dd sort troops by level
  2. (6,
  3.     [
  4.       (try_for_parties, ":party_no"),
  5.         (neq, ":party_no", "p_temp_party"),
  6.         (neq, ":party_no", "p_main_party"),
  7.         (assign, ":continue", 0),
  8.         (try_begin),
  9.           (party_slot_eq, ":party_no", slot_party_type, spt_kingdom_hero_party),
  10.           (party_is_active, ":party_no"),
  11.           (assign, ":continue", 1),
  12.         (else_try),
  13.           (this_or_next|party_slot_eq, ":party_no", slot_party_type, spt_castle),
  14.           (party_slot_eq, ":party_no", slot_party_type, spt_town),
  15.           (assign, ":continue", 1),
  16.         (try_end),
  17.         (eq, ":continue", 1),
  18.         (party_get_num_companion_stacks, ":num_stacks", ":party_no"),
  19.         (assign, ":cur_num",0),
  20.         (assign,":max_level",0),
  21.         # start to sort
  22.         (try_for_range, ":unused",0,":num_stacks"),
  23.             (party_stack_get_troop_id, ":cur_troop", ":party_no", ":unused"),
  24.             (neg|troop_is_hero, ":cur_troop"),
  25.             #(str_store_troop_name, s1, ":cur_troop"),
  26.             (store_character_level, ":troop_level", ":cur_troop"),
  27.             (val_sub, ":troop_level",1),
  28.             (val_mul, ":troop_level",15),
  29.             (assign,":cur_num",":troop_level"),  
  30.             (try_begin),
  31.               (item_slot_eq,":cur_num",slot_item_array,0),
  32.               (item_set_slot,":cur_num",slot_item_array,":cur_troop"),
  33.               (item_set_slot,":cur_num",slot_item_troop_num,1),
  34.             (else_try),
  35.               (item_get_slot,":same_lv",":cur_num",slot_item_troop_num),
  36.               (val_add,":same_lv",1),
  37.               (item_set_slot,":cur_num",slot_item_troop_num,":same_lv"),
  38.               (val_add,":cur_num",":same_lv"),
  39.               (item_set_slot,":cur_num",slot_item_array,":cur_troop"),
  40.             (try_end),
  41.             (try_begin),
  42.               (gt,":cur_num",":max_level"),
  43.               (assign,":max_level",":troop_level"),
  44.             (try_end),
  45.             (party_stack_get_size, ":stack_size", ":party_no", ":unused"),
  46.             (party_stack_get_num_wounded, ":num_wounded", ":party_no", ":unused"),
  47.             (item_set_slot,":cur_num",slot_item_party_num,":stack_size"),
  48.             (item_set_slot,":cur_num",slot_item_party_wounded,":num_wounded"),
  49.         (try_end),
  50.         (val_add,":max_level",20),
  51.         #(party_get_num_companions,reg2, ":party_no"),
  52.         (try_for_range_backwards, ":num", 0, ":max_level"),
  53.             (neg|item_slot_eq,":num",slot_item_array,0),
  54.             (item_get_slot,":cur_troop",":num",slot_item_array),
  55.             #(str_store_troop_name, s1, ":cur_troop"),
  56.             (item_get_slot,":stack_size",":num",slot_item_party_num),
  57.             (item_get_slot,":num_wounded",":num",slot_item_party_wounded),
  58.             (party_remove_members, ":party_no", ":cur_troop", ":stack_size"),
  59.             (party_add_members, ":party_no", ":cur_troop", ":stack_size"),
  60.             (party_wound_members, ":party_no", ":cur_troop", ":num_wounded"),
  61.             (item_set_slot,":num",slot_item_array,0),
  62.             (item_set_slot,":num",slot_item_party_num,0),
  63.             (item_set_slot,":num",slot_item_party_wounded,0),
  64.             (item_set_slot,":num",slot_item_troop_num,0),
  65.         (try_end),
  66.         #(party_get_num_companions,reg1, ":party_no"),
  67.         #(try_begin),
  68.               #(neq,reg1,reg2),
  69.               #(display_message,"@total number error"),
  70.               #(display_message,"@after {reg1} "),
  71.               #(display_message,"@original {reg2} "),
  72.         #(try_end),     # check if the number of companions is the same as before sorting
  73.       (try_end),
  74.       (display_debug_message, "@Sorting troops by level done."),
  75.     ]),
  76.   ## dd sort troops by level end
  77.   
复制代码






您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2025-3-25 02:35 , Processed in 0.095409 second(s), 19 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表