精华内容
下载资源
问答
  • 推荐个视频给你:闪闪老师pv3d教学录像7-18上午(http://you.video.sina.com.cn/b/15059641-1504951865.html) 虽然不认识。。。。但初学者也是有好处的。

    推荐一个视频给你:闪闪老师pv3d教学录像7-18上午(http://you.video.sina.com.cn/b/15059641-1504951865.html)

     

    虽然不认识。。。。但对初学者也是有好处的。

    展开全文
  • 协同教学

    2012-08-29 09:48:00
    近20年来,特殊教育,特别是弱智教育迅速发展,人们弱智教育的课程设置、教学模式进行了深入的研究和探讨,班级授课制、分组教学、分层教学等多种教学形式也进行了大量的研究。但是,随着轻度弱智学生随班就读的...

    近20年来,特殊教育,特别是弱智教育迅速发展,人们对弱智教育的课程设置、教学模式进行了深入的研究和探讨,对班级授课制、分组教学、分层教学等多种教学形式也进行了大量的研究。但是,随着轻度弱智学生随班就读的增多,培智学校的生源结构发生了重大变化,生源对象已从过去的轻、中度学生而逐步转向中、重度弱智儿童,这些学生除了智力低下外,同时还伴有多重残疾,学生之间的学习能力存在着很大的个别差异,因此,在实施教学的过程中,教学方式势必突破原来的班级传统模式,将触角延伸出去,跨越班级的界限,进行专业合作,以团队方式进行教学活动,即所谓的协同教学。

     

     

    一、实施协同教学的意义

     

     

    协同教学是指由两个或两个以上的教师及教学助理人员以一种专业的关系,组成教学团队,彼此分工合作,共同策划和执行某一单元、某一领域或主题教学活动的一种教学形态。采用协同教学,从学生个体来说:提供并增加了个别学习的机会,教师在一次活动中能照顾到不同程度学生的学习障碍,减少个别差异,每位学生在原有基础上增加了学习和训练的机会。同时,不论是单科还是跨学科,教师将片段、零星的知识、概念予以整合,成为有系统、有组织的完整的教学内容,使一次教学活动能达到最大的效果。从教师团队来说:协同教学使得某一教师团队应运教学的需要而共同备课、共同商讨、互相合作,增加了互相交流的机会,同时也能互补不足,取长补短,发挥每一位老师的所长,优化解决学生问题的最佳方案。

     

     

    二、实施协同教学必须注重的几项工作

     

     

    1、 组成教学团队。实施协同教学,首先必须建立一支具备良好的教学品质,既有爱心和责任心,又能互相配合、协调的教师团队,并且了解协同教学的目的、功能及有关的专业知识,使每一位参与者都能建立协同教学的观念,进而共同商讨、策划协同教学活动。教学团队可根据需要灵活设置,可以是一定时期内的固定组织,也可以根据单元主题教学的活动内容而组织起来的临时团队。

     

     

    2、 制订个别教学计划。为了保证“协同教学”有计划、有针对性的进行,教学团队成员要共同商讨,对每一个学生确定一个比较具体的个别化教学计划(IEP),以使在教学过程中,能按照学生的不同特点,安排可行的、明确的学习内容。

     

     

    3、 拟订教学方式及流程。拟订协同教学的方式与流程时,必须是教师团队成员共同参与、共同协商,决定学生学习的内容和组织形式,并分配工作。设计教学活动时,同时要考虑各项变量和情境设置,让协同教师清楚如何实施及实施的时间、地点、内容和对象。

     

     

    4、 及时评估。协同教学的评估是由教学团队全体成员共同负责的,评估包括两个方面的内容:(1)对学生学习成绩的评估:针对学生学习过程中的认知、技能、情感等方面,以多元评量的方式,评估学生的发展状况。(2)对协同教学工作的评估:对于教学团队教学准备的规划、教学过程中的流程、内容安排、资源运用以及分工和教学后的实施效果等,进行建设性的回顾与检讨,成为日后实施的修正依据。

     

     

    三、我校实施协同教学的几种模式

     

     

    协同教学的实施方式,依据学生的编组和教学团队的分工形态,可以做多样的排列组合,在教师专业自主的前提下,参与人员可依据学校的规模,课程的设计等选择适当的方式,以下是我校在实施协同教学时经常使用的几种模式:

     

     

    (一)多位教师合作的协同教学。

     

     

    1、 单一学科中多位教师的协同教学。这是指同一年级同一领域的教师一起进行的协同教学。如我校中重度学生的体育课,我们就采用循环训练的形式,全体中重度班级的教师一起参与协同教学。我们将体育项目分为球类、器械、田径及垫上运动四类,每周四下午,根据教师的专长、特点,二位一组,负责一项项目。把全校中重度班级的学生,组成一个教学集团,以分组的形式,在同一时间轮转,分别接受各种运动项目的训练。再如我校的感统训练课,也是多位教师协同,每人负责一个项目,全体学生采用轮回训练的方式。这样做的好处在于:其一:教师不会因为项目的繁杂而有过多的负担,教学准备趋于专、精,对每个学生的训练也更具有针对性。其二:对于学生而言,可以改善中重度弱智儿童由于分类学习活动而带来的局限性。其三:循环教学让重度年级的师生都能彼此认识,彻底打破了班级的界线,学生能接受每一位老师不同风格的指导和训练,老师也能依据每个学生的特性,共同商讨学生辅导策略,师生互动更加多元化。其四:对学生素质发展的测评更公正客观。学生期末的总成绩是每一分项教师在各阶段评估成绩的累计。而且,从中还可以比较持续地观察、发现学生的发展变化。

     

     

    2、 跨学科多位教师的协同教学。这是指两个领域或学科以上的教师共同设计及进行的教学。在我校的主题教学中经常运用此种教学方式,如在主题为“各种各样的汽车”中,数学、社会实践、语常课的老师就共同设计教学内容,共同创设教学环境,围绕汽车,学习使用钱币,学乘汽车,认识各种车辆及交通标志,学习常用的汉字及社会交往的礼仪、语言等,每次上课,由一位教师主讲,其余人员协助教学,或是视教学内容而定组织形式。这样,教师共同设计教学内容,提供了不同的创意与资源交流共享,丰富了学习内容,学生学习的内容经过教师的整合,更易于接受和巩固。

     

     

    (二)二位教师的协同教学。

     

     

    1、 分组式协同教学。智残儿童表现在学习上的共同特点就是记忆、感知、思维、语言等方面能力的欠缺,尤其是中重弱智度学生的数学活动,更需要学生的抽象思维和逻辑思维能力的协调运用,因此,学生在数学学习上的差异尤其显著。根据中重度学生的特点,我们在数学活动中就采用分组式的协同教学,两个班级的教师协同教学内容,依学生能力分组,两位老师各自任教其中的一组,各自教授相同或相似的教学内容;有时,根据不同的教学内容,一位教师讲解基本知识,另一位则为能力较弱的一组提供额外的补习,让他们打好基础学习新知识。分组式协同教学,让学生有一个适合自己程度的学习内容和适宜的学习速度,在学习过程中,根据学生的学习进度,还可灵活调整组别,学生的学习效果更能显现。

     

     

    2、分合式协同教学。中重度弱智儿童注意力极不稳定,有意注意的时间较短,专家指出:对于他们进行的教学活动,应当多提供运用各种感官的活动或训练。因此,我们在教学中经常为学生提供多种操作材料,让学生在动手操作中巩固和复习新学的知识点。分合式的协同教学,为这种操作性的学习提供了便利,两位教师共同执教同一教学内容,把学生分成若干教学小组,共性的活动则合,如:听故事、观看图片、进行游戏。需加强个别辅导、个别教学的则分,教师分组教学生完成不同的巩固练习,必要时,对学生进行个别教授。

     

     

    四、实施协同教学后的思考

     

     

    协同教学打破了以往传统教学集体授课的教学模式,把学生的学习内容整合成一个主题或一个学习领域,发挥了课程统整的效果;协同教学把教师从单一的教授学生知识,补偿缺陷到让教师发挥个人所长,走合作的模式,进行互动的教学,有效地促进了特殊教育从缺陷补偿向教育性的潜能开发的转变,从平等发展到可持续性发展的转变。但是,方式的改变也需要各方面的改变与支持,在实践过程中,我们也觉得存有一定的问题。

     

     

    1、 人。教师教育观念的更新,不是一蹴而就的,协同教学着重教学团队的合作,少至二人,多至七、八人,所有相关的教学人员均需自我角色的重新调整,观念的更新,没有了任课老师和辅助教学人员之分的协同教学,每位教师都是本次教学活动的主导者,只有让老师对协同教学有充分的了解,包括意义、特色、实施方法和成效,只有每位成员都有共同的观念和认识,向前推进的脚步才会越走越稳健。

     

     

    2、 时。在实施过程中,我们觉得:教学活动时间应富有弹性,可长可短,有时,常因一节课时间的限制而使教学活动打断;教师的任课节数也应有灵活性,应该根据需要自我调配,而不是强求按期初的课表来执行;教学团队也应有可供调配运用的时间,他们需要有共同的时间来拟订方案,讨论和评估,灵活多变的协同教学需要根据教学实际不断调整,那么,如何调配,谁来调配的问题,与现行的学校管理模式存在着冲突。配合协同教学的学校管理模式成了需要研究的一个新的课题。

     

     

    总之, 协同教学是一种多元组合的教学方式,教师应在实践的过程中灵活运用,不断修正,以上只是笔者就这一问题的一些粗浅体会,以求教于同行。

     

    转载于:https://www.cnblogs.com/gzhnan/articles/2661505.html

    展开全文
  • 最大的个缺点是无法用控件直接使用指针寻址的方法写地址 不过软件作者表示这个将在CheatMaker 1.70时解决 但是本文的主旨是来说明CheatMaker是个及其便捷的修改器设计器 特别是对于不怎么懂计算机语言的人 ...

    CheatMaker目前还是有一些需要完善的地方
    最大的一个缺点是无法用控件直接使用指针寻址的方法写地址
    不过软件作者表示这个将在CheatMaker 1.70时解决

    但是本文的主旨是来说明CheatMaker是个及其便捷的修改器设计器
    特别是对于不怎么懂计算机语言的人

    Frame:窗体


    窗体是设计器的基本,所有的界面设计都是在窗体上完成的,一个CMF可以建立多个窗体
    --------------系统--------------
    【名  称】:通用操作,控件名称标识
    【文  本】:通用操作,控件显示文字,这里即窗口标题栏所表示的文字
    --------------布局--------------
    【坐  标】:通用操作,如果你选择的窗体位置为坐标指定则有用,否则无用
    【大  小】:通用操作,不解释...
    【窗体位置】:有<坐标指定>、<屏幕剧中>、<窗体居中>,窗体居中只在按钮创建内置窗体时会有效果,用得很少
    --------------样式--------------
    【背景颜色】:通用操作,不解释...
    【图像文件】:窗体的底图,用于美化修改器
    【图像模式】:对于底图的显示模式,同Windows桌面,不解释
    【图标文件】:窗体的ICO,创建独立EXE修改器时会修改器变成指定的图标
    【无标题栏】:顾名思义,只是如果没标题栏就不会有右上角的X来关闭窗口,则需要用按钮的退出窗体属性或者Alt+F4来退出了
    【窗体透明度】:运行时可以按照百分比透明,美化用,不错的东西
    接下来的楼层是各个控件的介绍,控件介绍凡是相关到通用型操作的就不累叙

    Button:按钮控件


    用于数据控件的操作或者窗体的操作,现在也可以执行控件操作的脚本,具体见功能解说部分
    --------------系统--------------
    【名  称】:虽然是通用操作,但是窗体内各种控件的名称,在写控件脚本的时候会被调用,如果不写脚本基本可不用管
    【附加数据】:按钮控件目前尚无系统默认支持的附加数据可用
    【脚  本】:执行一些脚本,可以动态的控制控件功能、显示、相关操作等,以后有空专门介绍下,这里略过
    --------------样式--------------
    【是否禁用】:禁用后运行时控件显示为灰色不可操作
    【是否显示】:运行是是否显示在界面上,当然不显示也无法操作,这个通常用于GroupBox控件,也有用于脚本的
    【字  体】:不解释...
    【风  格】:控件显示在界面上的样式,自己试试就知道了,根据Windows主题的不同,效果显示往往也不一样
    【图像文件】:可以用一个图像来显示按钮,具体如下图
           
    --------------定制--------------
    【功  能】:这个是重点,目前支持的功能如下
           <保存数据>:将你修改的数据保存到内存
           <读取数据>:读取内存里当前的数据
           <锁定保存>:锁定内存数据
           <锁定读取>:这个...基本没用
           <读取默认数据>:在数据操作控件中有个【默认值】,这个按钮就是可以让数据控件写上这个默认值,通常用来制作类似[能力值MAX]这种快捷操作按钮
           <创建文档窗体>:如下图,在设计的时候一个修改器可以创建多个内置窗体
           
           而内置窗体的调用就是通过按钮来控制的,当你选择创建文档窗体后又会多出几个选项
           
           【创建文档】:是个拉选框,如果有多个内置窗体,就会有多个窗体名称选项
           【模态显示】:表示修改器运行后多个窗体间可以自由切换,如果不能自由切换,则必须要关闭窗体后才能操作另一个窗体
           【内置窗体】:如果填写的坐标,则运行后创建窗体时不会创建一个新窗口,而是在本窗体的对应坐标为左上起点来显示新的窗体
           <退出窗体>:平常没什么用,但是如果窗体选择了【无标题栏】则用于窗体退出
           <只执行脚本>:这个很有用,不过也相对复杂,以后有空专门写个教学
    -------------数据--------------
    【操作范围】:这个要跟GroupBox(框架控件)联系起来讲,默认的Frame是这个窗体内的所有数据控件都会被操作到,但是如果窗体内用到了GroupBox,则可以选择只控制GroupBox范围内的数据控件
           如下图,保存数据时可以选择只保存某个框架控件内的控件数据操作,这个在<读取默认数据>时用得多,另外就是ListBox(列表控件)用得多,ListBox后续再讲
    TextBox:文本控件


    用于内存数据的显示,数据类型可自定,除了数据也可以直接显示ASCII码或者文本
    --------------系统--------------
    【文  本】:虽然是通用操作,但是这里想说明下,在TextBox中这个属性没效果
    【附加数据】:目前系统自带的Value_Fix插件定义了两个附加数据20和21
           附加数据21,后跟参数(H)和(L),表示将同一个字节的数据分高4bit和低4bit显示,例如在三国志III中,武将的隐藏能力值,冷静和勇猛是同一个字节,如关羽的是CD,其实是表示12(C)的冷静和13(D)的勇猛,需要拆开来显示并操作这个数据,就会用21(H),21(L)来填写附加数据
           附加数据20,后跟参数(运算),通常有些游戏表面显示数值和内存内的数值是不一样的,比如梦幻模拟战2中的金钱,游戏中显示的50000,内存中只有5000,那怎么同步显示呢,给个附加数据20(*10)即可,表示把内存的数据读出后先运算完再显示在TextBox中,当然写数据保存的时候会自动反运算,如这里就是自动(/10),注意/是会取整数的,所以不用担心数据写入不对,当然加减运算更不是问题
    --------------样式--------------
    【排  列】:<居左>、<居中>、<居右>,不解释
    -------------数据--------------
    【地  址】:当然就是内存地址了,如果程序指定了基地址,那么这里需要填写的就是偏移地址,据作者说下一个版本在这个地址栏可以直接填写多级指针,我们不放期待一下
           另外就是地址可以不是一个,而是多个,如定义:A410,A510,A610...,就是分别往这些地址写上数据,也支持简化格式A410-A418这样的定义,相当于往A410,A412,A414,A416,A418里分别写上数据
    【数值大小】:在数据类型非二进制的情况下,这里的数字表示从【地址】算起显示和操作的字节数,默认的虽然是1、2、4、8,但其实也可以操作单数的字节数,如填写3,则读取和操作内存时就会只操作3个字节,第四个字节就不会动
           如果数据类型选择的是二进制,则对应一个字节里的8个二进制位置,对应关系如下,即二进制时,数据大小表示显示和控制的是地址的字节里的第几个bit位,二进制通常用于CheckBox、CheckListBox、RadioButton控件,TextBox控件很少会有用二进制的时候
           00000001 数值大小 8
           00000010 数值大小 7
           00000100 数值大小 6
           00001000 数值大小 5
           00010000 数值大小 4
           00100000 数值大小 3
           01000000 数值大小 2
           10000000 数值大小 1
    【默 认 值】:定义了默认值后,对应按钮控件功能中的<读取默认数据>就有作用了,可以制作快捷按钮,不用手工一个个数据填写,而做到一键填写数据
    【数据类型】:<十进制>、<十六进制>、<浮点数>、<二进制>、<字符串>,这几个就是基本的类型,至于<连续字符串>、<连续十六进制>基本就没用到过
           <二进制>数据长度固定为1字节,注意<二进制>跟【数值大小】的定义关系
           <浮点数>数据长度固定为4字节,操作的有效位是7位

    Lable:标签控件


    就是在设计界面上添加文字说明的控件,用得最多,但是不操作数据,没什么可以解释的
    --------------样式--------------
    【背景透明】:如上图所示,两个文本框对比就知道什么作用了,美化修改器界面用

    CheckBox:选择控件


    选择控件也是个用得很多的控件,很多人做修改器,如CheatEngine做的修改器大多都是后台定义好了各种数据修改,然后让你选择“是/否”修改,这种定义和这个控件的操作就比较类似
    CheatMaker里的CheckBox也可以不仅仅定义一个地址和数据,可好像CE写Enable的脚本一样在里面定义多个地址和数据
    --------------系统--------------
    【附加数据】:系统默认的支持附加数据1,表示是否写入取消值,如上图这般写的话,表示勾选了保存修改后,就把地址A140写上数据100(这里的64因为是选择的十六进制),而取消这个勾选时则往地址A140写上数据0
    -------------数据--------------
    【取 消 值】:当附加数据为1时,勾选掉这个选项时,写入定义的取消值数据到地址
    【数据格式】:<单一数据>、<集合数据>,单一数据就是表示只定义一个地址列表(为什么是列表?因为前面说道了地址是可以定义多值的)和一个数据,<集合数据>在选择后出现以下图片
           
           【数据集合】:点击后出现数据列表,可以定义多个地址,多个数据大小,多种数值,值得注意的是这里的数据类型都是统一的,如果在上面图中选择的十六进制则这里的数据也要写十六进制,如果定义的二进制,数值大小满足之前说道的二进制取值关系,即1-8分别对应一个地址的8个bit位
           

    11.jpg (24 KB, 下载次数: 8)

    下载附件 保存到相册

    2011-6-10 09:34 上传


           最后如果要定义集合数据的里每个地址和数据的取消值怎么办的问题,目前因为程序没有支持写取消值,则我们需要定义两个CheckBox的集合数据,第二个CheckBox的集合写上第一个CheckBox的值的取消,不过因为CheckBox是可以多选的,不明所以的用户如果把两个都勾上同时保存程序就会按照优先级选择其中一个数据写进内存了,所以这种方法最好的运用不是用在这个控件而是用在一个和这个类似的控件RadioButton(单选按钮)中,这个我们后面会有介绍
    综上,目前CheckBox现在还有两个缺点,一个是不能像Lable控件一样设置背景透明,那么在界面美化时会遇到一点障碍,不过对这个缺点有取巧的方法,就是拆分两部分,用Lablel来写CheckBox的说明,而把CheckBox缩小到只有那个选择框
    另一个缺点是CheckBox使用集合数据时,无法针对每个数据集合中的每个地址定义取消值

    GomboBox:组合控件


    组合控件也是最实用的控件,他的作用和ListBox(列表控件)其实完全相同,只是两个在界面上的显示不同而已,还有就是系统默认的是ComboBox为操作数据,ListBox为操作地址
    我们知道内存只认得数字,但是这些数字在游戏中经常表示为其他的东西,比如道具的代码,这个控件最初就是为把数字和文字做对应的关系而存在的,至于控制地址的功能是后来加上的
    --------------系统--------------
    【文  本】:这个文本和TextBox的文本一样,在实际操作中没有任何作用
    【附加数据】:系统默认支持的附加数据为1,后跟参数(十六进制数据),用于<控制地址>的操作方式,在ListBox中进行说明
    --------------样式--------------
    【图像文件】:这里的图像文件要和这里的图像大小联合起来说,这里添加进去的图像是横向的,而图像大小就是对这个图像按照定义的像素进行切割显示
           值得注意的是这里图像文件透明色的掩码是RGB(FF00FF),即玫红色,见后面的举例图
    【图像大小】:指ComboBox的数值列表的每一行对应的图片的大小,结合后面说到的数值列表,会举实例说明这个图像定义的作用
    -------------数据--------------
    【数值列表】:定义内存里的数据与所显示的文字的对应关系,格式为“数据-文字”,如下图所示

    【功能类型】:有<数据操作>、<控制地址>、<控制数值>、<控制数值列表>4种,默认的是<数据操作>,<控制地址>的在ListBox控件说明的时候再来举例,暂时不讲
           <控制数值列表>和>、<控制数值>虽然用得没前两者多,但也是个比较强的功能,和<控制地址>一起在ListBox里去说明
    -------------定制--------------
    【列表高度】:这是这个控件唯一区别于ListBox的地方,这个控件在实际修改器界面中是个拉选框,如后面举例图二所示,而拉选框的框架高度就是这里定义的,含义不大,默认即可
    图片的一个举例:图一是某修改器的道具的一个图片定义,结合上图中的那个数值列表定义,图二是实际运行后的修改器的这个控件的显示效果,不知道各位看明白没
    图一

    图二

    GroupBox:框架控件


    框架控件虽然没有直接操作数据,但是是界面上一个非常重要的辅助控件,其框架所框入的控件会计入这个框架,那么对应ComboBox、ListBox的<控制地址>的功能类型,以及Button的【操作范围】的功能就可以被使用了
    可以做到一个ListBox控制指定的特定的某个或某几个框架内的数据控件来地址偏移,ListBox的控制功能后面马上就会说到
    -------------系统--------------
    【名  称】:注意这里的名称不仅仅可以被脚本调用,也可以被上面所说的操作范围属性来调用,如下图就是ComboBox的控制地址的功能所对应的【操作范围】属性,一个界面有两个GroupBox,就是对应的名称来进行区分的
    PictureBox:图像控件


    图像控件目前的功能局限于美化界面了,当然有时候Lable控件的文字说明不容易分辨时,上个图片代替Lable控件不光美化了界面,也起到了很好的说明作用
    虽然脚本可以调用,脚本写起来相对还是麻烦的,但是以后如果脚本功能若不光用于按钮控件,还能对ListBox和ComboBox中<控制地址>的属性中每一行来写脚本的话,图像控件就可以用于辅助的说明
    图像控件的操作都是一些通用功能,但注意图像控件里的图片的透明背景需要用本身就是透明背景的gif图片,而不是和之前说到的ComboBox的图像文件是用的RGB(FF00FF)做透明掩码

    ListBox:列表控件


    列表控件是CheatMaker最实用最方便的一个控件,特别是操作一些有规律的内存数据排列,这个比较好的例子就是三国志英杰传的例子,见下面这个帖子
    http://bbs.52miji.com/thread-19795-1-1.html
    除了没有【列表高度】属性外和ComboBox的操作方式是完全一样的,包括图像文件的应用,也可以是<操作数据>的方式,不过ListBox操作数据不如ComboBox直观,所以系统默认的是<控制地址>的功能类型,所以着重将这个方式
    --------------系统--------------
    【附加数据】:当ComboBox和ListBox用于<控制地址>的功能是有效,系统支持的附加数据为1,后跟参数(十六进制数据),表示定义的地址列表每行地址偏移间隔为所定义的数据
           如在三国志英杰传的实例中,ListBox数据为:0-刘备、2C-关羽、58-张飞,但实际上当列表比较大时可以简化这一偏移的计算,只要附加数据写上“1(2C)”,则无论列表怎么定义,当选择下一行时,就会在前一行的地址基础上增加2C的偏移,此时无论是定义的:0-刘备、2C-关羽、58-张飞,还是定义的:100-刘备、101-关羽、102-张飞,得到的都是同一个效果
           但是同时这也是一把双刃剑,一旦用附加数据后,你无法对你的列表进行排序了,比如如果我不启用附加数据,可以定义:2C-关羽、0-刘备、58-张飞,但是如果用了附加数据的方式,还按前面这个顺序定义的话,你选关羽的时候看到的仍然会是刘备的数据,选刘备仍然看到的是关羽的数据,所以这个附加数据如果你想把列表排序则不能使用(其实利用一个进制转换的小程序和Excel表的功能同样可以迅速的写出大列表的偏移,所以用不用这个附加数据不是大问题)
    -------------数据--------------
    【数值列表】:数值列表的添加格式和ComboBox一样,“数据-说明”,但是如果是<控制地址>时,列表的添加的数据就是写的地址的相对偏移地址了,一般的默认第一行是“0-XXX”,表示当前操作的控件的地址是初始的地址,不做任何偏移,而第二行开始就是写相对第一行的地址偏移了,这个在上面的举例帖子里有说明,不做累叙
    【操作范围】:默认是Frame,表示全部的窗体控件地址都做偏移,但是前面讲到GroupBox的时候说到过,GroupBox是可以对控件进行分组划分的,分组后,ListBox对控件地址偏移的控制也可以控制到某一个组
    【功能类型】:和ComboBox相同,但是界面显示的效果不一样,ComboBox是一个下拉框,ListBox则是一个可支持滚动条的框架,《永恒传说》修改器中就对ListBox有个具体的应用,见下图,只需要写一次界面,增加一个ListBox就可以控制到游戏中7个主人公的属性修改

    我们现在来讲一下<控制数值列表>的功能,以上面说到的三国志英杰传为例子
    ListBox里我们说道了<控制地址>的功能,添加的方式是

    对应的兵力的TextBox控件填写的地址是401D4
    事实上我们可以对<控制地址>的方式这么填写

    那么这个时候对应的兵力的TextBox控件的地址用默认的0就可以了
    看懂了的人应该明白,其实就是个相对偏移和绝对偏移地址的问题
    而<控制数值列表>的作用可以动态的控制ListBox的<控制地址>的列表
    比如我们依然可以按照前面那种相对偏移的列表来写上列表,即“0-刘备...”,但是我依然把TextBox写上地址0
    我现在使用一个<控制数值列表>的功能改变ListBox的列表,相当于控制别的控件的ListBox被控制了,如下面两个图


    这个修改器在运行后效果如下

    改变一下控制ListBox的ComboBox,得到的图如下,显然兵力的显示变得正常了

    <控制数值列表>根据修改器需求的不同也可以有各种用法,其中之一的比较容易想到的用法就是“版本切换”,比如不同版本游戏的地址有相对的偏移,可以通过这种方式做个版本选择框出来
    不过在动态脚本功能出现后,这个功能的作用被弱化了许多,因为用脚本来实现版本切换更具有实用性,不过这依然是个很好的功能
    <控制数值>的功能有点类似,但是控制的不是“列表”(ComboBox、ListBox、TabCtrl)的数据,而是控制的TextBox和CheckBox的数据,控制里面的数据增加一个量,但这两个控件被控制时需要用十六进制

    CheckListBox:多选列表


    从控件操作使用上来说CheckListBox和CheckBox的<集合数据>格式十分类似,具体见6楼的说明,但是增加了图片文件的功能,图片的运用和ComboBox相同,具体见7楼的说明
    但是CheckListBox是将CheckBox的<集合数据>每行分开显示并可操作
    --------------系统--------------
    【附加数据】:虽然和CheckBox相同,但是还是强调一下,附加数据1,后不跟参数,表示当勾选项取消时往勾选项所在的地址里写上取消值,这个和CheckBox一样,因为只能定义一个取消值则每一行的勾取消时都是写入这个值而无法逐行定义每行数据取消值,算是个不够自由化的缺点
    举例说明一下,下图一是梦幻模拟战的人物可雇佣的兵种的设定,图二是修改器运行的效果
    图一

    图二

    ProgressBox:进度控件


    就是将一个地址的数据显示成进度条的样式,当然需要设置该数据的最大值,不过也非常遗憾的告诉各位,该控件目前只是纯美化用,不起任何控制作用,也不能由鼠标拖动该进度条
    --------------布局--------------
    【大  小】:ProgressBox的大小是控制进度条的长宽显示,越长进度条显示的精度越大,相对比较有用
    --------------样式--------------
    【背景颜色】:进度条的颜色显示,可根据界面风格来选定
    --------------数据--------------
    【数  值】:这里的数值不起任何控制作用,表示进度条所定义的地址上的数据大于等于这个数值时,进度条就显示满进度
    除了进度条不能被鼠标相应的缺点外,另外就是不能自定义图片来表示进度,简单的说虽然是纯粹起美化作用的控件,但还无法完全自定义美化方式,而只能确定下颜色,下图是进度条的一个应用
     
       

    13
     楼主|发表于 2011-6-10 09:43:34|只看该作者
    TabCtrl:多标框架


    多标控件的标签栏相当于一个按钮,相当于按钮<创建文档窗体>的内置窗体功能,可以在同一个界面上完成对多个内置窗体的切换
    --------------系统--------------
    【附加数据】:目前没有可支持附加数据,因为该控件并不是控制控件的地址偏移,数值列表是填什么下面马上就会说明
    --------------样式--------------
    【图像文件】:和ComboBox和ListBox等定义方法相同,图片按照大小切割后显示在每个标签标题栏
    --------------数据--------------
    【数值列表】:这个是重点,这里并不是添加“数值”的列表,而是添加窗体名称的列表,格式为:“窗体名称-显示文本”,窗体名称可以是中文,见下图

    这么定义后,标签栏就会显示状态、道具、武器、防具、魔法几个标签,标签切换对应内置窗体的切换,运行效果见下两个图

    RadioButton:单选按钮


    首先要声明虽然有“按钮”两个字,但和Button控件无关,是一个有点类似CheckBox的控制功能,单选嘛,所以要有对比项,这个控件使用一般是2个以上的数量出现
    可以是控制同地址,也可以是控制不同地址,一般都要调用“互斥”机制,即选择了一个组里面的其中一个,就要取消另外两个的数据
    --------------系统--------------
    【附加数据】:和CheckBox一样,附加数据1表示写入取消值,这个附加数据一般应用于不同地址的“互斥”操作,因为不同地址单选其中一个时,另一个应该要写入取消值,所以会用到附加数据,但是同地址的单选,只是往地址上写上不同的值的选择而已,所以是不能用上附加数据1的
    --------------样式--------------
    【背景透明】:和Lable一样,贴心的用于界面美化的功能,我很郁闷为什么单选控件有此功能而选择控件CheckBox却没有这功能
    --------------样式--------------
    【操作范围】:这个和重要,单选控件一般是几个几个为一组来存在的,这个范围就是对这些控件进行分组管理的,都是通过GroupBox来进行分组,这样几组单选控件就可以独立操作互不影响
    【数据格式】:注意单选控件也是支持<集合数据>的,操作方式和CheckBox相同,至于使用集合数据的时候怎么进行“互斥”操作可以根据实际情况来确定是否启用附加数据1
    这个控件不做什么举例说明了,在CheatMaker官方下载的软件里有个Demo的演示窗体有个举例说明,我用得不多,就在某个修改器中用来操作了一个同地址的互斥,选择性别为:男/女




    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    我们从最简单的人物兵力开始入手

    01.jpg (132.86 KB, 下载次数: 23)

    下载附件 保存到相册

    2011-6-6 20:27 上传


    我用FPE找了一下人物兵力(为什么用FPE...个人喜好...因为FPE的编辑框看着舒服)

    当然这个兵力地址下次启动游戏的时候说不定就变了,所以下一步要找基地址
    启用CE调试刘备的兵力地址

    找到基地址后验证一下

    现在启用CheatMaker,因为CM1.62版本并没有添加对dosbox0.74的支持,所以添加一个程序支持

    把刚才搜索到的基地址添加进去,另外如果这里是2级指针,则在基地址后边加上“,地址”,并把附加数据填上“1”

    添加完毕后选择对应的进程,启动内存编辑,看一下刚才的地址偏移,现在可以确认程序支持没有问题了

    然后启用CM的“运行设计器”,添加一个lable控件和一个TextBox控件,并对TextBox控件做如图红色框的编辑

    再添加一个ListBox控件,点击“数据列表”,然后写上个列表,为什么图上这么写,因为根据图一中的那些文字说明
    这里每行之间是写上一个相对第一行的偏移地址,第一行则认为是0
    其实ListBox附加数据可以简化这个流程,附加数据写上“1(2C)“,则认为每行的间隔地址为2C,不需要去计算了
    只需要写上
    1-刘备
    2-关羽
    3-张飞
    这样的东西
    但是这么添加不好对列表排序,所以暂时还是按图片中的添加方法来

    添加完保存下,然后运行一下修改器

    可以看到如图的效果,然后再多添加一些地址进去吧,别忘了添加一个按钮
    按钮有几个功能,读取数据、保存数据是两个最基本的功能
    创建窗体也是个实用功能,本次不讲这个

    我最后设计完毕的效果如下图所示,最后会提供这个CMF源文件,大家可以随意打开看下

    最后是生成EXE的独立修改器,如下图所示,选好对应的支持程序后,对应的类名和标识也会自动填上(因为程序之前已经添加到了支持程序列表里)
    这里的插件,如果独立修改器有用到插件的话,则CM目录里的Plugins文件夹的对应插件需要和独立的EXE保留在同同一目录下(具体清参考我做的太阁4修改器,里面用到了一个插件),插件是可自行开发的,会编程的朋友可以任意添加新插件到CM里
    因为这里没用到特殊插件,故可直接生成即可


    最后是该修改器的源文件随意参考下



    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    基地址的查找与特征数据


      所谓基地址其实就是指针,基地址就是指的某一个数据在程序模块中的固定指向,最广泛的应用是在模拟器这种东西,每次模拟游戏时游戏里的【数据段】都是相对于某一个地址的偏移地址,所以与其每次都取写这个指针,不如把这个地址记录下来作为这个模拟器的基地址,则可以在做相同模拟器的游戏的时候方便很多
      指针怎么查找?CM其实目前没有反汇编的功能,所以关于指针的查找还是建议使用CheatEngine或者OllyDBG,我个人推荐前者
      CheatEngine简称CE,这软件功能十分强大,但是直到6.0版本,对于修改器界面的设计始终功能比较简单,无法做出比较随心所欲的修改器,而纯粹以编程的方式去处理修改器界面则门槛相对较高,所以也有了CheatMaker这一类的中间软件层的存在,所以就笔者我而言,是属于用CE寻址,然后用CM实现界面设计的这一类人(另一说,CE 6.1的版本已经可以推出了比较好的修改器设计功能,但是到目前为止笔者尚未研究出头绪…)

    以SFC模拟器:Snex9X为例子,模拟器版本Ver 1.52,游戏三国志III,如下图查找金钱



    得到了唯一地址:013BF460



    然后对这个数据跟踪,得到一个可能的地址指针值,注意这个地址指针值的013BCBA0是对应ESI的值,而EBX的值是28C0,这个是指的平原金钱的偏移地址
    值得注意的是[ebx+esi]的模式esi通常将不是固定值,这种时候,指针的好处就特别明显了,因为每次用模拟器模拟同一个游戏,对应的数据的搜索的绝对地址往往都在变动
    但是相对esi的ebx的偏移地址则是固定的



    直接搜索相关这个地址的内容可以得到以下结果



    如果得到的结果很多需要做一些进一步的测试和跟踪, 其实这里搜索到的这些都可以作为这个版本模拟器的基地址,比如任意选择一个0076448C



    我们可以看到,指针指向的地址的数据已经和原地址数据一致了 ,这里的28C0是之前的ebx的值,就是刚才平原城金钱的相对偏移地址
    那么我们把这个指针添加到CM的支持程序管理





    这里的最大偏移量是指的相对于这个基地址所指向的地址,最大允许的偏移量是多少,SFC游戏几乎不会超过20000,但其实这里填0表示不限制,也没有关系
    添加完毕后,我在CM里搜索平原城的金钱地址得到如下图片



    这个时候,对应的CM地址等于了原来的ebx的值,即这个金钱地址的相对偏移地址,我们的基地址添加成功了

    但是这么添加基地址,仅仅只是支持了Snes9X Ver 1.52版,如果用户换了一个版本的模拟器,则将出现不支持的情况,这是因为一个程序的升级通常会让基地址发生变化,所以在模拟器里要能够支持一个系列全版本的模拟器,就需要使用动态定位基地址的方法,于是采用了“基址特征数据”这个概念

    回到我们之前的搜索出很多基地址的那个步骤,这里选择基地址其实是有诀窍的,我们启动另一个版本的Snes9X模拟器,模拟同样的游戏,同样搜索平原金钱的地址指针
    我们保留之前的模拟器进程和调试器进程,同时启动不同版本的模拟器进程双开另一个调试进程来进行跟踪调试以方便对比



    采用同样的方法得到了 也可以得到基地址列表
    那么现在需要从这些基地址里面找到可以通用的特征码,这个比较考验经验,查看特数据的方式可以右键点击任意基地址,点击“反汇编该内存区域”
    然后找到两个不同版本的模拟器之间的通用的一个基地址特征数据,如果找不到甚至要开始进行2级或者多级指针查找
    所谓的基址特征数据就是指的通过一段内存数据的搜索可以定位到一个固定地址,然后通过这个固定地址增加一个偏移值就可以定位到基地址
    比如这里SFC模拟器SNes9X我们就用2级指针来进行基地址搜索以及确定基址特征码,首先以0076448C作为一级指针来追踪二级指针
    (如果这里对于多级指针的查找和添加方法看不明白的,请在网上搜索CheatEngine八步教学的教程自学一下)



    重新读取一下游戏就可以找到以下代码



    使用深度扫描可以找到对应007311C8的指针



    这个时候对于基地址的添加就多了一种方式,使用2级指针进行寻址,这时候【附加数据】需要填上1,才能正常寻址



    改完后我们可以尝试搜索平原的金钱,可以看到添加2级指针的基地址的结果和之前的效果相同



    但是换一个版本的模拟器时同样无法使用
    所以我们对于其他版本的模拟器(笔者这里用的Snes9X 1.53)以同样的方法和选地址方式进行这个2级指针的寻址,得到对比结果如下



    可以看到两个版本的模拟器,对应的2级指针地址很接近但并不相同,那么我需要一种可以自动定位到各个版本的基地址的方法,这种自动定位的方法就是“特征码寻址”
    我们分别对上图的红框内的2级指针地址查看反汇编的代码,如下图



    然后又可以得到一个对比图,下图中选中的部分就是相关到2级指针的地址的代码



    通过观察可以看到,虽然2级指针的地址和代码不同的模拟器版本有一些区别,但是在这段代码前两者确有一段共同的代码:2B C7 48 C1 E0 05 50
    我们不妨对这段代码进行搜索,如下图,注意反汇编里看到的字节搜索的时候要反过来,2B C7 48 C1,搜索就要搜索C148C72B



    非常幸运的,这段代码在模拟器的程序里具有唯一性,那么我们就可以通过这段代码定位到之前的2级指针的地址
    这段代码的地址是00409664,2级指针的地址是00409674,两个地址之前相差10(H),那么我通过定位到00409664,然后增加10(H)的偏移就可以得到2级指针的基地址00409674
    我们在看一下另一个版本的模拟器,这段代码定位的地址是00409FD4,而2级指针的地址是00409FE4,差值也是10(H)
    那么这两个版本的模拟器的共性我们就找到了(这种共性肯定不止一处,这里只是介绍方法)
    最后我们就是要把共性统一成模拟器的基地址



    这里的基址特征数据就是用刚才我们所说的不同版本模拟器的共性进行定位到基地址,而这里的附加数据“5”表示找到的基地址的指向的地址的偏移,我们再把前面添加2级指针的基地址的图来对比一下



    按照基址特征数据的方式,我们尝试一下对其他版本的模拟器搜索金钱地址的结果,之前我搜索的是Snes9X 1.52版,现在我来搜索1.53版





    我们可以看到,现在两个版本的模拟器通过特征地址的方式统一了搜索的结果,但是这样其实我们还只是作出了通用1.52和1.53两个版本的模拟器
    如果想作出更大的兼容性,则还需要拿更多的版本的Snes9X来做这种共性的测试,最终找到一个共性地址
    值得说明的是,这里的基址特征数据可以用?做替代,比如2BC748C1E00550作为特征地址码的话可以写成2B??48C1????50,这样其实可以模糊出更多的版本共性出來
    本文可以看作一篇实例教学,关于附加数据和添加说明写法的详细说明,还可以参考http://www.cheatmaker.org/Help/supportDoc/supportDoc.html

    这里最下面的位置写了各个基地址和附加数据的写法和作用


    指针型数据的使用

    有关本楼举例的植物大战僵尸的修改器及其cmf源码下载
    http://bbs.52miji.com/thread-23170-1-1.html

      上述关于基地址的概念其实就是指针,笔者之所以拿模拟器来举例子是因为基地址的应用大多在模拟器领域,而有很多PC游戏不同的数据用的“基地址”不是一个,这样就无法通过定义一个“基地址”来解决问题,对于这种多基地址的PC游戏,直接使用控件调用指针是最好的方法,在控件的基础教学里我们都有提到过一些控件的【附加数据】这个功能,但是其实所有的地址控件都有一个通用的附件数据“9”,9后面跟参数(第一指针,第一级偏移,第二级偏移...),这样一个控件就可以在修改器进程里做指针寻址,而不是单纯的静态寻址

    我们以《植物大战僵尸》(应该没有人没玩过了吧…)这个游戏为例,使用的版本是年度版的汉化版,下图是通过指针寻址得到的游戏中的“阳光”这个数据的地址



    可以看到,这个数据的基地址是7784F8,第一级的偏移是868,第二级的偏移是5578,在CheatEngine里通过这种定义方式就可以准确的得到阳光的地址和数据
    那么这个数据怎么在CheatMaker里制作修改器时进行添加,则可以如下图所示



    对应数据控件的地址写上指针的最后一级的偏移地址,对应这里的就是5578,而在附加数据部分,9(第一级指针7794F8,第一级偏移868),就完成了和CheatEngine相同的动态寻址效果
    我们再看一下游戏中的花园里那个喷雾剂的寻址结果



    游戏中是17,对应内存地址的数据是1017,有个简单的防修改算法,那么添加到CheatMaker寻址的方法和上述类似,但是我用了两个附加数据以控制数据的显示,如下图



    这里9(7794F8,950)以及地址里的224,和上述金钱的一样,不解释了,附加数据的后半截,用“|”符号进行了间隔,20这个附加数据是对读出的地址进行运算后再显示,这个在控件教学的TextBox控件里是有说明的,同时你写入的数据也会根据这个运算反算后再写回内存
    其实我想说的是,控件的附加数据是可以用多个的,中间只需要用“|”符号间隔,我们可以看一下修改器运行的效果对比



    看上图就可以知道这样写可以让我们的修改器读起来更顺畅
    但是我强调关于附加数据可叠加使用的目的是另一个,就是配合附加数据“9”来使用的另一个附加数据“6”
    我们之前说过了,关于进程的“基地址”或者“特征地址”的查询和添加方法,如果一个进程被定义好了基地址,那么对这个进程做的搜索个控件地址控制操作都是以这个基地址为前提的,那么有些游戏,比如模拟器,大多数游戏的大多数数据都有一个固定的“基地址”,一般情况下只需要添加好了这个基地址就可以解决了,但是少数游戏的数据并不受这个绝大多数基地址的控制,而是另一个基地址,那么对这少部分数据我不需要按照这个进程所对应的基地址进行寻址,而想使用Windows下的一般进程的指针寻址,那么对于这种已经添加了基地址的进程,控件想要使用一般寻址来调用指针的话,则需要在把附加数据“9”和附加数据“6”一起用,格式一般为:6|9(指针),附加数据“6”后面没有参数,仅仅表示这个控件的寻址不受进程基地址的限制,而使用绝对指针寻址



    上图是NDS游戏《光与影的英雄》的修改器,对应的DeSmuME模拟器,该模拟器已经添加好了特征码,95%的游戏都可以使用这个特征码进行相对偏移地址的寻址,但是《光与影的英雄》这个游戏就是特例,部分数据不使用通用的那个基地址,于是我想在不改变DeSmuME.exe的进程的通用基地址的情况下,单独定义这个游戏的一些数据的基地址,就可以采用上图中的那种附加数据的调用方式



    展开全文
  •  集合就如同数组,用来存储和管理组特定类型的数据对象,除了基本的数据处理功能,集合直接提供了各种数据结构及算法的实现,如队列、链表、排序等,可以让你轻易地完成复杂的数据操作。在使用数组和集合时要先...

     这一节我们来学习集合,什么是集合呢? 集合就如同数组,用来存储和管理一组特定类型的数据对象,除了基本的数据处理功能,集合直接提供了各种数据结构及算法的实现,如队列、链表、排序等,可以让你轻易地完成复杂的数据操作。在使用数组和集合时要先加入system.collections命名空间,它提供了支持各种类型集合的接口及类。集合本身上也是一种类型,基本上可以将其作为用来存储一组数据对象的容器,由于c#面向对象的特性,管理数据对象的集合同样被实现成为对象,而存储在集合中的数据对象则被称为集合元素。这里提到了接口这个概念,它也是面向对象编程进化的重要标准,我们在这里不做过多的讲解,先注重学习集合中的对象及其使用就可以了,下面我们来学习第一种集合:

             动态数组ArrayList.ArrayList类提供了继承了IList接口。什么是继承呢?这也是面向对象语言的重要特点之一,现在你们先把它理解为,如果一个对象继承了类或接口,那么它也具有了这个类和接口中的方法、属性,可以用这些继承的方法和属性来做相应的操作,比如:数组增加元素没有Add()方法,但是动态数组ArrayList继承了一个增加元素有Add()方法的接口,那么当它要增加元素的时候,不仅可以用索引,也可以用继承下来的Add()方法了。随着学习的深入,我会给大家再具体讲解继承的概念和使用继承的好处。那么下面让我们来看看动态数组所继承的这个接口IList它有什么特性呢?

         Ilist接口:定义了利用索引访问集合对象的方法,还继承了ICollection和IEnumerable接口,除实现了接口原有的方法成员外,其本身也定义多个专门的方法成员,例如新增、移除、在指定位置插入元素或是返回特定元素在集合中所在的位置索引,这些方法主要为集合对象提供类似数组的元素访问功能。
         ILsit接口成员:add、insert、RemoveAt、Remove、contains、Clear、indexof方法,它最大的特色在于提供类似数组索引的访问机制。

        ArrayList对象是较为复杂的数组。我们可以将它看为扩充了功能的数组,但ArrayList并不等同于数组,与数组相比,它以下功能和区别是:

    1.  数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了ArrayList的容量时,则可以自动进行内存重新分配和元素复制,比如往1号索引位插入n个元素,插入后,元素的索引依次向后n个位置排列,它是动态版本的数组类型。

    2.ArrayList提供添加、插入或移除某一范围元素的方法。但是在数组中,只能一次获取或设置一个元素的值,如利用索引赋值。

    3.ArrayList只有一维,而数组可以是多维。
           如何声明一个动态数组呢?

    ArrayList  AL=new ArrayList( Capacity );//初始容量capacity也是可以不写的 

    原因就是即使不在初识化确定容量,容量不够的时候,会自动的按倍数作扩充。

    接下来我们来看一下动态数组的常用属性

    Capacity     获取或设置ArrayList可包含的元素数。

    Count        获取ArrayList中实际包含的元素数。

    IsReadOnly 获取一个值,该值表示ArrayList是否为只读。

    Item           获取或设置指定索引处的元素。  

     动态数组的常用方法  

    增加元素-ArrayList.Add(value);利用Add方法增加集合元素值

    我们也可以索引增加元素ArrayList[Index]=value;
    插入元素-ArrayList.Insert(Index,value);将元素的值value,插入到第Index位置。
    删除元素-ArrayList.Clear();  全部删除集合中的元素

                 ArrayList.Remove(value);按照集合元素值删除元素

                 ArrayList.RemoveAt(Index);按照集合的元素索引删除元素
    缩减容量-ArrayList.TrimToSize();将集合的容量减少到实际元素个数的大小

                   在执行删除操作后,要养成良好的缩减容量的习惯,节省内存空间,提高性能。
    查找元素-除了按数组的索引查找外,还可以用ArrayList.Contains(value);按照元素值查找集合,如果包含便返回True,不包含时返回False。

       下面的例子我会给你们分部的演示出以上方法及属性,运行结果我会用图片的形式显示出来,帮助你们理解动态数组是使用。

    ArrayList AL = new ArrayList();

    AL.Add("Hello");

    AL.Add(" World");

    Console.WriteLine("给数组添加元素");

    foreach (Object obj in AL)

    { Console.Write(obj); }

    Console.WriteLine();

    Console.WriteLine("个数:" + AL.Count);

    Console.WriteLine("容量: " + AL.Capacity);

    AL.Insert(1, " c#");

    Console.Write("在索引值为1的地方插入 ");

     foreach (Object obj in AL)

    {Console.Write(obj); }

     Console.WriteLine();

     Console.WriteLine("个数:" + AL.Count);

     Console.WriteLine("容量: "+AL.Capacity);

     

    AL.Add("");//给集合添加“。”,查看集合的容量

    Console.WriteLine("容量。: " + AL.Capacity);

     AL.Add("---");//给集合添加“---”,查看当集合的容量不够时,倍数变化

    Console.WriteLine("容量---: " + AL.Capacity);

    Console.WriteLine("3号索引的"+AL[3]);//用索引方式获取集合元素值

    Console.WriteLine("数组中是否包含?"+AL.Contains ("?")); //利用contains方法,查找集合中是否包含“?”

    Console.WriteLine("经过之前操作后的数组元素:");

    foreach (Object obj in AL)

    { Console.Write(obj); }

    Console.WriteLine();

    Console.WriteLine("个数:" + AL.Count);

    Console.WriteLine("容量: " + AL.Capacity);

    AL.Remove("");//移除集合中的“。”元素

    AL.Remove("?");//移除集合中的“?”,但是因为没有“?”,所以此行代码不会对集合进行操作。

    Console.WriteLine("没有?个数只减少1个容量不变");

    foreach (Object obj in AL)

    { Console.Write(obj); }

    Console.WriteLine();

    Console.WriteLine("个数:" + AL.Count);

    Console.WriteLine("容量: " + AL.Capacity);

    AL.RemoveAt(3);//移除3号索引的元素

    Console.WriteLine("移除3号索引位的元素:");

    foreach (Object obj in AL)

    { Console.Write(obj); }

    Console.WriteLine();

    Console.WriteLine("个数:" + AL.Count);

    Console.WriteLine("容量: " + AL.Capacity);

    AL.TrimToSize();               //缩减容量

     Console.WriteLine("实际容量: " + AL.Capacity);

    AL.Clear();

    Console.WriteLine("清除全部元素后:");

    Console.WriteLine("个数:" + AL.Count);

    Console.WriteLine("容量: " + AL.Capacity);

     

     AL.TrimToSize();               //缩减容量

     Console.WriteLine(“再次缩减实际容量: " + AL.Capacity);

    回到了ArrayList最初的容量。

     

          通过以上的例子你们应该已经理解集合的方法,我们再来总结一下集合ArrayList相比数组有什么好处?主要是它可以根据使用大小按需动态增加,不用受事先设置大小的控制,还有就是可以随意的添加、插入或移除某一范围元素,比数组要方便。但是它也有不足ArrayList 不管对象是什么类型都会添加到集合j中,在编译时都是没有问题的,但是在遍历的时候,为防止集合中元素的类型不一致,所以最好使用object类型来接收遍历j的元素,如foreach(object i in j)这样就能减少错误,可能同学们会想,用object类型我们记住了,怎么就成弊端的呢?

     

    这里我们就要学到另一个知识点,就是装箱和拆箱。所谓装箱就是把值类型打包成object引用类型的一个实例中,也就是说在进行装箱的时候,必须分配并构造一个全新的对象。而拆箱就是指从对象中提取值类型,将object类型强制转换为原类型。

      比如: ArrayList j=new ArrayList();

               j.Add(123);

               j.Add("123");

              在添加时,ArrayList是会隐式的将整形的123 进行如下装箱操作:  int i=123;  object o=(object)i;也就是说存进j的元素都将变成object类型

              而在使用这个整形的123时,ArrayList又会进行如下的拆箱操作:   o=123;      i=(int)o;  也就是将o再强制转换成原来的类型表现出去

      想想这将是很大的性能消耗,需要进行大量的计算,至于怎么记住装箱拆箱,我们就把这个过程想象成现实生活中,你买了很多中水果(元素),为了方便搬运,我们把他们都放到一个大盒子(集合对象)里,但是因为有榴莲,我们又得把榴莲(值类型元素)单独包装好(装箱过程)再放到盒子里,到了家后,我们要打开盒子取出水果,在拿到榴莲时,要想见到真正的榴莲,我们就的把包装去掉(拆箱),我们马上就闻到了榴莲那独有的味道了(变回原类型)。哎!这个过程多麻烦呀!分了这么多步,在C#2.0出来后,就推出了新的技术来解决这个问题,那就是泛型,以后的章节我会讲解这个新特性。    

     

     

    下面我们来讲一下ArrayList向数组的转换。

         

    ArrayList.ToArray() // 转换成object类型数组
    ArrayList.ToArray(Type ) // 转换成Type类型数组
                                 ArrayList arl = new ArrayList(3);
                string[] ar = new string[3];
                arl.Add("W");
                arl.Add("h");
                arl.Add("y");
                //限定string类型,将arl强制转换string类型数组
                ar = (string[])arl.ToArray(typeof(string));
                foreach (string a in ar)
                {
                    Console.Write(a+"   ");
                }
    结果输出是 W h y  动态数组的内容就讲解到这,留一道上机作业:设计一个程序,创建ArrayList数组对象,存储利用Random类产生的10个随机数值,并在排序之后输出到控制台。         
    展开全文
  • 云计算在科研和教学中的应用

    千次阅读 2013-11-09 13:45:12
    教育者、研发管理人员、IT总监和研发人员需要意识到和充分利用云在研究、教学和学习方面的潜能。他们可以通过部署共有云、私有云和混合云来补充他们当前的计算基础设施。实际上,个最新的调查显示有一些人已经通过...
  • 翻转课堂教学感受调查

    千次阅读 2016-01-26 22:04:55
    数据结构课程结束,进行了教学感受调查,记录并公布如下。开始时间:2015-12-22 结束时间:2016-1-17 样本总数:78 份 原始数据来源:http://www.sojump.com 本报告包含样本数量:78份第1题 如果再学次数据结构...
  • [color=#0000FF]看到caozhy的《[url=http://bbs.csdn.net/topics/390491859]手把手教编程,不知道有没有人愿意参与[/url]》帖子,希望通过手把手教学方面提高教学效率,另方面也排除掉了伸手党。出发点是不错...
  •  考核方式:考查课程教学方法 采用翻转课堂形式。学生课前完成知识点的学习;课堂围绕解决问题能力的培养开展教学活动;课后学生完成实践,完成成为专业人员必须的专业训练。  利用蓝墨云班课、CSDN博客、问卷星...
  • 任务驱动教学探讨 作者:燕十八 发表日期:2012年6月5日 原文地址:http://www.yanshiba.com/archives/495   PHP 学习计划流程 开篇跟大家推荐我自己也在使用的PHP视频教程...希望和我一样喜欢自学的朋友,
  • 将时尚的互联网引入教学中来

    千次阅读 2011-12-19 18:04:07
    在目前高校的教学工作中,有些同学迷恋网络,以致于影响了学习成绩。很多人将此归罪于网络,甚至有些学校做出大一新生不准购买计算机等的规定。实际上,所谓这种负面的迷恋网络,是指学生将很大部分的时间用在了打...
  • 网上教学管理系统的设计与实现

    万次阅读 多人点赞 2019-04-14 18:54:54
    网上教学管理系统的设计与实现 第1章 绪 论 1.1 背景 为了促进计算机专业学生工程实践能力的提升,使老师能够更好的管理学生,帮助学生提高学习成绩掌握更多的专业知识,增强师生之间的交流;解决老师...
  • 计算机教学的地位和作用

    千次阅读 2014-02-20 09:42:52
    1 计算机教学的地位和作用 我国的计算机基础教育从无到有、由点到面,从少数理工科专业率先实践,到所有高校的非计算机专业都普遍开设了相关课程,计算机教育得到了极大的发展。高等学校的计算机教育有两类不同的...
  • 外挂基础知识入门教学

    千次阅读 多人点赞 2018-04-18 17:05:47
    自己编写封包截获工具的好处还在于可以具体针对某款游戏而编制特定的工具,这之中最重要的是可以事先将加密数据解密成明码,为分析封包提供方便。   2.1  封包截获技术 根据具体的截获原理不同,封包截获技术可...
  • 浅议网络环境下的教学

    千次阅读 2005-10-30 09:43:00
    随着现代信息技术的迅猛发展,各地有条件的学校陆续建起了网络教室,... 两相比,凸现网络环境下教学的诸多优点 、回眸传统的课堂教学传统的课堂教学中学生的学习不能异步进行。学生具有个体差异性。某节课的教
  • Jsp教学中三层架构规划

    千次阅读 2012-03-10 20:02:49
    在JavaWeb开发的教学中,我们通常都会带着学生用JSP+Servlet+JavaBean技术完成个或多个小型管理信息系统。在教学中,为了加深学生灵活的软件设计的理解,采用三层架构的方式搭建应用框架。在实际操作过程中,有3...
  • 作者: 胡春娟 (小学语文 酒泉市小学语文班 ) 设计理念: 1、探究学习。强调学生自己读书,自己探究,自己体验,在探究中获得自己的感受,加深文章的理解。 2、合作学习。重视学生的原有知识水平,重视资料...
  • 教学管理信息系统的设计

    千次阅读 2010-11-02 17:00:00
    上海交通大学教学管理信息系统的设计 董传良 蒋磊宏 张增泰 <br /> 摘 要:建设高水平的大学,校园信息系统的建设是重要的环。本文针对上海交通大学多校区、地域分散的特点,介绍了基于Internet/...
  • 第1题 你这学期的翻转课堂总体感受为______ [单选题]第2题 从翻转课堂中,你的收获有________ [多选题]第3题 关于课前自学,你认为_______ [多选题]第4题 你看视频的方式_______ [多选题]第5题 对于自测...
  • Redis超级详解(附带实操教学

    千次阅读 2020-05-23 23:36:33
    个打开的文件通过唯一的描述符进行引用,描述符石打开文件的元数据到文件本身的映射 所以Redis使用的是多路复用IO模型,防止阻塞影响性能 将监控文件是否可读,交给selector,那么线程就可以做点别的事情去了 ...
  • 问题:今日学堂是个什么性质的学校? 回 答:在中国的教育体系中,尚无法今日学堂的性质加以界定的,它当然不是公立学校,但也不是严格意义的民办学校和私立学校,一些媒体把今日学堂称为私塾, 其实它与...
  • Dva.js 入门级教学文档-2

    千次阅读 2019-05-12 21:58:49
    Dva.js 入门级教学文档-2简介四、Model 包下文件架构(重点)1、namespace2、state3、reducers(1)、save(2)、state(3)、action(4)、payload(5)、return4、effects(1)、*(2)、query(3)、payload(4)、call(5)、put(6)、...
  • 回过头看看,发现网课有很多优势,将来可以补充到传统教学中。 51节理论课,21次博客作业。 过程辛苦,但收获满满。 停课不停学,不负韶华。 看到同学们写的总结,有欢乐也有感动。 认真阅读每份总结后,...
  • 马克思主义认识论和实验教学

    千次阅读 2005-03-09 09:19:00
    ”——这是镌刻在马克思墓碑上的马克思经典著作《关于费尔巴哈的提纲》中的段经典名言。正是在这篇被恩格斯盛赞的“天才大纲”中,马克思把“实践”的观点引入了认识论。从此,“实践”成了马克思主义唯物论同
  • MySQL数据库零基础教学[超详细]

    千次阅读 多人点赞 2019-12-20 23:26:59
    文章目录、数据库简介二、MySQL数据类型常用类型三、常用Sql语句(1)Sql语句简介(2)数据定义语言DDL`create,alter,drop`(定义 修改 删除 表[数据库])(3)数据操纵语言DML`update,insert,delete`(对表中数据 增删改...
  • 虽然参加了这门MOOC的第期的学习,成绩也相当不错,在之后的工作中也较经常使用Geogebra制作一些动画,但是我是名高中物理教师,Geogebra的使用不是很系统,所学内容肯定会有很多遗忘,有些功能也感到陌生,...
  • 面对越来越严峻的资源和环境压力,科学发展已经不仅仅是个口号。要想转变在国际产业链竞争中的不利态势,走创新型发展的路已经刻不容缓。但是在我国,信息化人才培养还处于发展阶段,面临着it人才的缺口。在追逐...
  • 自20 世纪40年代世界第台现代计算机在美国诞生以来,美国一直执全球计算机学界之牛耳,这同时也是美国计算机产业界占据绝对优势的重要原因之我们成批量地引进的国外众多优秀教材绝大多数也都来自美国计算机学科...
  • 但是随着各国编程教育重视程度逐步加深,以及孩子通过编程学习适应未来智能社会的帮助,这些都让家长深刻地意识到:儿童机器人编程教育对于孩子的成长不可或缺。 未来编程未来会纳入高考范畴吗?从国家及各省...
  • Java自学必备的视频教学之面向对象

    千次阅读 2017-11-13 17:26:01
    面向对象是以对象为单位,通过调度组合不同的对象来完成某个事情。是种编程思想,是种思考问题的思维方式。 怎样建立面向对象思维方式: 1、 先整体,再局部,就像我们 2、 先抽象,再具体 3、 能做...
  • 关于“计算机在教育教学中的应用”的思考在2002年全县中小学教导主任经验交流会上的发言 很高兴有这样个机会与大家共同探讨“计算机在教育教学中的应用”。对于计算机,我是半路出家,知之不多;而各位在基层长期...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,173
精华内容 8,869
关键字:

一对一教学的好处