TC官方合作论坛

 找回密码
 立即注册
查看: 3930|回复: 18

[源码分享] 2.006功能强大了很多,准备全面转向2.006版本。另发起开源基础函数运动!!!详情入内

[复制链接]
发表于 2011-12-26 17:23:38 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
一个语言只所有为什么好用,用的人多,其中有两部分:
第一部分是:语言平台本身强大
第二部分是:基于些平台的开源基函数强大
所以,为了TC语方更好用,更强大。更多的提高大家的编码效率,本人向所有高手们发发起开源运动呼吁,把你们的珍藏的基础工具函数拿出来吧。让大家共享吧。
列表代码:


  1. //用数组实现在列表,模似2.03中变量队列的功能,可保存随意个元素
  2. namespace 列表

  3. //一个多行二列的数组,第一列为id,第二列为数据
  4. int[][] date

  5. //当前列表中有多少个元素
  6. int size

  7. //当前数组的长度
  8. int length

  9. //每次扩大值
  10. int growth

  11. //多线程同步标识
  12. bool isinit

  13. //初始化数组与数组长度,初始大小为100
  14. function bool 初始化(int 初始大小,int 扩张值)
  15. if( isinit == false)
  16. length = 初始大小
  17. date = int[length][2]

  18. growth = 扩张值

  19. isinit = true
  20. endif

  21. return true
  22. endfunction

  23. //销毁列表
  24. function bool 销毁()
  25. if( isinit == true )
  26. date = int[1][2]
  27. length = 0
  28. growth = 0
  29. size = 0
  30. isinit = false
  31. endif

  32. return true
  33. endfunction

  34. //增加一个元素到列表中,id为编号,value为值,不能是0做为id值
  35. //true为增加成功,false为增加失败
  36. //如果id重复,会将原有值进行覆盖
  37. function bool 增加元素(int id,int value)
  38. if( id == 0 )
  39. return false
  40. endif

  41. //列表已满
  42. if( size >= length )
  43. 列表.扩张数组()
  44. endif

  45. //循环数组,查看是否存在空位,如果有空位,则将数据放入
  46. int i = 0
  47. while(i < length)
  48. //如果查找到为0,则表示此位没有被使用
  49. if( date[i][0] == 0 )
  50. date[i][0] = id
  51. date[i][1] = value

  52. size = size + 1
  53. break
  54. endif

  55. i = i + 1
  56. endwhile

  57. return true
  58. endfunction

  59. //根据编号删除元素
  60. //成功返回true 失败返回false
  61. function bool 删除元素(int id)
  62. int i = 0
  63. while(i < length)
  64. if( date[i][0] == id)
  65. date[i][0] = 0
  66. date[i][1] = 0

  67. size = size - 1

  68. return true
  69. endif

  70. i = i + 1
  71. endwhile

  72. return false
  73. endfunction

  74. //查看编号是否已存在
  75. //true表示已存在 false表示不存在
  76. function bool 编号是否存在(int id)
  77. int i = 0
  78. while(i < length)
  79. if( date[i][0] == id )
  80. return true
  81. endif

  82. i = i + 1
  83. endwhile

  84. return false
  85. endfunction

  86. //查看此值是否在列表中已存
  87. //不能判度0值是否存在
  88. function bool 值是否存在(int value)
  89. int i = 0
  90. while(i < length)
  91. if( date[i][1] == value )
  92. return true
  93. endif

  94. i = i + 1
  95. endwhile

  96. endfunction

  97. //根据编号取出列表中的元素
  98. //成功,返回指定的值。失败返回-2147483647,约定此值为失败
  99. function int 取出元素(int id)
  100. if( 列表.编号是否存在(id) == false)
  101. return -2147483647
  102. endif

  103. int i = 0
  104. while(i < length)
  105. if( date[i][0] == id )
  106. return date[i][1]
  107. endif

  108. i = i + 1
  109. endwhile

  110. endfunction

  111. //得到当前列表元数个数
  112. function int 列表元素个数()
  113. return size
  114. endfunction

  115. //得到当前列表的大小
  116. function int 列表大小()
  117. return length
  118. endfunction

  119. //这个函数可以得到所有id值,返回一个int类型数组
  120. //返回数组的0下标值为数组的长度
  121. function int[] 得到所有编号()
  122. int[] ids = int[size + 1]
  123. ids[0] = size

  124. int i = 0,j = 1
  125. while( i < length)
  126. if(date[i][0] != 0)
  127. ids[j] = date[i][0]
  128. j = j + 1
  129. endif
  130. i = i + 1
  131. endwhile

  132. return ids
  133. endfunction

  134. //这个函数可以得到所有值,返回一个int类型数组
  135. //返回数组的0下标值为数组的长度
  136. function int[] 得到所有值()
  137. int[] values = int[size + 1]
  138. values[0] = size

  139. int i = 0,j = 1
  140. while( i < length)
  141. if(date[i][0] != 0)
  142. values[j] = date[i][1]
  143. endif

  144. i = i + 1
  145. endwhile

  146. return values
  147. endfunction

  148. //此函数为内部函数
  149. function bool 扩张数组()
  150. //定义新的数组,比原数组大扩张值
  151. int[][] temp = int[length + growth][2]

  152. //将原数组中的数据拷贝到新数组中
  153. int i = 0
  154. while(i < length)
  155. temp[i][0] = date[i][0]
  156. temp[i][1] = date[i][1]
  157. i = i + 1
  158. endwhile

  159. //将原数组替换成新数组
  160. date = temp
  161. //长度修改为扩张后的长度
  162. length = length + growth

  163. return true
  164. endfunction

  165. endnamespace
复制代码
测试代码
  1. #include "列表.t"

  2. namespace 工具
  3. //定义默认空间

  4. function bool start_click()
  5. 列表.初始化(10,10)
  6. //string id,value
  7. //repeat(11)
  8. // help.inputbox("id","id",id)
  9. // help.inputbox("value","value",value)
  10. // help.sleep(100)
  11. //
  12. // 列表.增加元素(convert.strtoint(id,0),convert.strtoint(value,0))
  13. //endrepeat

  14. //先加10个元素
  15. 列表.增加元素(1,1)
  16. 列表.增加元素(2,2)
  17. 列表.增加元素(3,3)
  18. 列表.增加元素(4,4)
  19. 列表.增加元素(5,5)
  20. 列表.增加元素(6,6)
  21. 列表.增加元素(7,7)
  22. 列表.增加元素(8,8)
  23. 列表.增加元素(9,9)
  24. 列表.增加元素(10,10)

  25. //打出列表大小和元数个数
  26. help.messagebox("列表大小是:" + convert.inttostr(列表.列表大小()))
  27. help.messagebox("列表元素个数是:" + convert.inttostr(列表.列表元素个数()))

  28. //多加一个,打出列表大小和元素个数
  29. 列表.增加元素(11,11)

  30. help.messagebox("增加一个元素后列表大小是:" + convert.inttostr(列表.列表大小()))
  31. help.messagebox("增加一个元素后列表元素个数是:" + convert.inttostr(列表.列表元素个数()))

  32. //取出一个元素
  33. help.messagebox("id:11对应的值为:" + convert.inttostr(列表.取出元素(11)))

  34. //判断元素是否存在
  35. if( 列表.编号是否存在(1) )
  36. help.messagebox("编号1存在")
  37. endif
  38. if( 列表.值是否存在(1) )
  39. help.messagebox("值1存在")
  40. endif
  41. if( 列表.编号是否存在(15) )
  42. help.messagebox("编号15存在")
  43. else
  44. help.messagebox("编号15不存在")
  45. endif
  46. if( 列表.值是否存在(15) )
  47. help.messagebox("值15存在")
  48. else
  49. help.messagebox("值15不存在")
  50. endif

  51. //删除一个元素
  52. 列表.删除元素(1)
  53. help.messagebox("删除一个元素后列表大小是:" + convert.inttostr(列表.列表大小()))
  54. help.messagebox("删除一个元素后元素个数是:" + convert.inttostr(列表.列表元素个数()))

  55. //得到元素的编号数组
  56. help.messagebox("删除后所有编号是")
  57. int[] ids
  58. ids = 列表.得到所有编号()
  59. int i = 0
  60. while( i < ids[0] )
  61. help.messagebox(convert.inttostr(ids[i+1]))
  62. i = i + 1
  63. endwhile

  64. help.messagebox("增加一个元素100,这个元素将会在第一位置")
  65. //再加一个元素
  66. 列表.增加元素(100,100)
  67. //得到元素的编号数组
  68. ids = 列表.得到所有编号()
  69. i = 0
  70. while( i < ids[0] )
  71. help.messagebox(convert.inttostr(ids[i+1]))
  72. i = i + 1
  73. endwhile

  74. 列表.销毁()

  75. return true
  76. //函数返回语句
  77. endfunction

  78. function bool exit_click()
  79. //这里添加你要执行的代码
  80. help.exit()

  81. return true
  82. //函数返回语句
  83. endfunction

  84. endnamespace
  85. //空间结束语句
复制代码
本人最近想研究脚本日志模块,有想一起研究的朋友到18群找寒心月,就是我。
回复

使用道具 举报

发表于 2011-12-26 17:37:03 | 显示全部楼层
给力啊,非常好的想法!:strong:
回复 支持 反对

使用道具 举报

发表于 2011-12-26 17:37:59 | 显示全部楼层
这么好的文章和代码,必须顶!! 献花~~~  :rose
回复 支持 反对

使用道具 举报

发表于 2011-12-26 17:39:59 | 显示全部楼层
本人最近想研究脚本日志模块,有想一起研究的朋友到18群找寒心月,就是我。


^_^
收徒弟了,收徒弟了!大家积极报名啊!寒心大大收徒弟了!走过路过,不要错过!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-26 17:53:15 | 显示全部楼层
大家帮我测测啊,这个列表中包括了对数组操作的一些经典方法。比较容易出问题的。
回复 支持 反对

使用道具 举报

发表于 2011-12-26 17:53:58 | 显示全部楼层
:*
回复 支持 反对

使用道具 举报

发表于 2011-12-26 21:55:39 | 显示全部楼层
顶一个
回复 支持 反对

使用道具 举报

发表于 2011-12-26 23:38:26 | 显示全部楼层
恩,思路比较普遍,经典~
将int数组改为string数组的话,更实用,比如编号 "1",内容  “ 撒旦法撒旦法”,这样好用多了
提供给用户的接口,比如编号,还是int型,内容为string型,
可以改改,就是多了些数据转换的工作,加油~
赞个:strong:
回复 支持 反对

使用道具 举报

发表于 2011-12-27 03:37:52 | 显示全部楼层
不错,有想法,顶个
回复 支持 反对

使用道具 举报

发表于 2011-12-27 09:50:53 | 显示全部楼层
支持!:-o
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-5-21 14:31 , Processed in 0.039225 second(s), 24 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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