基于android平台的汉语语言学习应用开发--本科毕业论文内容摘要:

一种是显式的 Intent,即在构造 Intent 对象时就指定接收者,这种方式与普通的函数调用类似,只是复用的粒度( Activity/Service)有所差异;另一种是隐式 Intent,即 Intent 的发送者在构造 Intent 对象时,并不知道也不关心接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。 通常一个每个 Activity 的代码, java code 文件夹中存有图片资源 布局文件 存放数组,键值 河北大学 2020届本科生毕业论文 (设计 ) 9 应用程序中需要多个 UI 屏幕,也就需要多个 Activity 类,并且在这些 Activity 之间进行切换,这种切换就是通过 Intent 机制来实现的。 在同一个应用程序中切换 Activity 时,通常都知道要启动的 Activity 具体是哪一个,因此常用显式的 Intent 来实现。 河北大学 2020届本科生毕业论文 (设计 ) 10 3 应用程序 手机软件设计原则及方法 手机软件的交互设计原则可总结为如下四项。 这四项原则也是 Ben Shneiderman 的交互设计八项黄金法则: Strive For Consistency(力求一致); Enable Frequent Users to Use Shortcuts(允许频繁的使用快捷键); Offer Informative Feedback(提供明确的反馈);Design Dialog to Yield Closure(设计对话,告诉用户任务已完成); Offer Simple Error Handling(提供错误预防和简单的纠错能力); Permit Easy Reversal of Actions(应该方便用户取消某个操作); Support Internal Locus of Control( 用户应掌握控制权); Reduce Shortterm Memory Load(减轻用户的记忆负担),在移动互联网方向的衍生。 手机软件的交互设计原则为: 一 . 软件响应速度。 软件响应速度快或许不会引起用户的觉察,但是一旦软件响应速度过慢,用户就会失去耐心,降低用户满意度。 响应速度主要体现在几个方面: 1. 软件的加载速度。 最好不要因为联网或加载数据让用户长时间在 Loading 页等待,可以采用分步加载或给用户提供后台加载的选项。 2. 用户操作后的系统反馈速度。 这往往会体现在 Tab 页面的切换、弹出菜单、翻页滚动等方面。 在软 件设计过程中需要考虑不同手机的性能,采用最优的策略保证软件使用过程中的流畅。 3. 联网速度。 目前网络环境下联网的稳定性和速度往往是软件的最大瓶颈。 虽然客观条件如此,但仍需要产品设计师和开发工程师在有限的条件下降低由于联网而造成的负面影响。 例如,下一页的预读功能、友好的加载提示、接入点自动检测、有效的联网错误处理等。 4. 退出速度。 要让用户能够找到退出的地方,在退出的同时避免有过多的服务器交互,尽量把这些工作放在用户的使用过程当中。 而且尽量实现彻底退出,因为后台运行也会给用户的手机带来不必要的耗电和内存的占用。 二 . 尽量减少用户输入。 在手机上输入大量的文字很麻烦。 在软件设计中应尽量简化用户的输入,这就要求软件具有更多的针对用户操作的记忆和用户行为的预测。 例如,输入法记录用户的输入习惯常用词优先排序。 三 . 软件需要保持简洁和易用性,避免用户的误操作。 河北大学 2020届本科生毕业论文 (设计 ) 11 尤其随着智能手机大屏幕触摸屏的广泛应用,复杂的软件布局很容易导致用户的误点击,此外在软件设计中还需注意将用户常用的功能和重要的功能放在用户容易发现和容易操作的位置上。 四 . 友好的导航。 导航的设计对于手机软件应用来说非常重要。 用户需要随时知道自己所处的位置,并且能够快速的回 到起点。 例如,在手机应用中的设置返回键。 汉语学习连连看 这款应用软件正是本着以上四条原则设计的,当然,初次接触软件设计工作,还有很多需要改进的地方。 程序效果展示。 如图 ,提示开始游戏,退出游戏和关于。 如图 ,选择其中一种进行游戏 ,进入游戏,会出现正在加载的字样,如图 ,点击开始游戏会出现各种图案,同时开始计时,如图 ,如图 35.游戏成功还是失败都会提醒再来一局或者退出游戏,如图 36,37。 点击 menu 菜单,会弹出退出和取消如图 39,方便快捷的退出功能会提升应用的用户体验。 河北大学 2020届本科生毕业论文 (设计 ) 12 图 3 1 图 3 2 河北大学 2020届本科生毕业论文 (设计 ) 13 图 3 3 图 3 4 河北大学 2020届本科生毕业论文 (设计 ) 14 图 3 5 图 3 6 河北大学 2020届本科生毕业论文 (设计 ) 15 图 3 7 图 3 8 河北大学 2020届本科生毕业论文 (设计 ) 16 主要模块概述。 定义一个 6*6 二维数组 map[][]来模拟地图,并在初始化时为其所有值赋值为 1,表示 36 处全部含有图片。 当两个图片满足消去的条件并消去时,数组所对应的位置变为 0,表示此处不再有图片。 以拼音模式为例。 拼音与汉字要成对出现,共有 16 张图片, 36 处方格用来放图片。 将第一对和第二对图片分别重复两次,其他图片重复一次。 所有的图片都要在 GridView 中显示。 GridView 的使用方法是先在布局文件中对 GridView 进行配置,然后在 java 文件中再为 GridView 配置内容。 配置内容时要使用 Adapter,即适配器。 定义一个 mImageIds 数组,让适配器读取这个数组的内容。 本例中 GridView有 36个控 件, GridView为其中的每一个控件分配位置和 Id,从左到右,从上到下依次递增。 如表 31 所示。 得到 GridView 的位置后,按照我们想要的效果对数组进行赋值。 效果如图 39. 图 3 9 排成这样的效果后,再对 mImageIds 数组进行多次随机交换,即可打乱顺序,产生一个随机的排列。 效果如图 310. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 表 3 1 河北大学 2020届本科生毕业论文 (设计 ) 17 图 3 10 由于随机交换的次数有限,很 大概率上有的拼音与汉字对没有被分开,或者随机交换到一起,这就为游戏的成功进行提供了可能。 当然也有可能出现破解不了的局面,只是这种概率会很小。 如果想要完全避免这种破解不了的情况,个人想到了一种解决办法,就是记录下多种能够成功的排列方式,每次生成界面时从中随机抽取。 这种方法虽然简单,但是工作量很大,比较繁琐。 这个模块用来跟踪记录交换后的位置。 在图 39 的情形下,拼音和所对应汉字的位置满足一定关系,我们比较容易就能判断出拼音和汉字是否能对号这一条件。 而经过随即交换后,位置被打乱了,这就需要记 录下交换过程。 每次点击两个图片时,将这两个图片的位置还原到图 39 的情形进行比较判断。 所以次模块连接着两个最主要的算法,虽然简单,但是意义重大。 那么,跟踪记录是如何来实现的呢。 定义一个数组 a, a[i]=i,数组长度为 36。 用这个数组来记录各个图片的原位置。 所谓原位置,即图 39 所示的情形。 当 mImageIds 数组随即交换时,数组 a 同步交换。 这样根据图片现有的位置和数组 a 就可以得到图片的原位置。 比如处于 33 位置的汉字“星”,在随即交换时换到了 0 位置,在数组 a 中, 0 和 33也就交换了位置。 用 p 表示原位置,用 q 表 示现在的位置,则满足 p=a[q]。 此模块与其他两个算法之间的关系如下图所示。 图 3 11 河北大学 2020届本科生毕业论文 (设计 ) 18。 这个算法是整个程序最核心的算法。 判断所点击的两个图片能否消去,要判断两个条件。 第一,两个控件是否满足拼音与汉字成对的条件,即逻辑上匹配;第二 ,在拐点不超过两个的前提下,两个控件能否联通,即物理上匹配。 对于第一个条件就要用到上一个模块跟踪记录下来的位置进行判断。 按照图 310 的情形进行分组,如表 32 所示。 每个黑框内为一组,每一组第一行的两个或三个位置和第二行的两个或三个位置进行匹配。 判断逻辑匹配的算法采用了穷举法,即列举出每一种情况进行判断。 例如第一次点击的控件原位置是 12,那么第二次点击的控件如果原位置是 18 或 19,那么这两个控件就满足了逻辑上的匹配。 public boolean ispipei(int pos1,int pos2){ int position1=pos1。 int position2=pos2。 int apos1=a[position1]。 int apos2=a[position2]。 if(apos1==0||apos1==1||apos1==2){ if(apos2==6||apos2==7||apos2==8){return true。 } } if(apos1==6||apos1==7||apos1==8){ if(apos2==0||apos2==1||apos2==2){return true。 } } if(apos1==3||apos1==4||apos1==5){ if(apos2==9||apos2==10||apos2==11){return true。 } } if(apos1==9||apos1==10||apos1==11){ if(apos2==3||apos2==4||apos2==5){return true。 } } if(apos1==12||apos1==14||apos1==16||apos1==24||apos1==26||apos1==28) {if(apos2==apos1+6||apos2==apos1+7) {return true。 }} if(apos1==13||apos1==15||apos1==17||apos1==25||apos1==27||apos1==29) {if(apos2==apos1+6||apos2==apos1+5) {return true。 }} if(apos1==18||apos1==20||apos1==22||apos1==30||apos1==32||apos1==34) {if(apos2==apos16||apos2==apos15) {return true。 }} if(apos1==19||apos1==21||apos1==23||apos1==31||apos1==33||apos1==35) {if(apos2==apos16||apos2==apos17) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 表 3 2 河北大学 2020届本科生毕业论文 (设计 ) 19 {return true。 }} return false。 } 判断第二个条件是否成立的算法则要复杂许多。 连连看要求满足物理上联通的条 件是连线不超过两个拐点。 所以按照零拐点,一个拐点和两个拐点的顺序对两控件的连线进行判断。 为了方便起见,首先定义两个函数。 一个水平判断函数 horizontal 和一个竖直判断函数 vertical。 这两个函数分别用于判断水平两点或竖直两点是否满足联通。 联通的条件是两点之间(不包括两点)没有图片,即 map 数组中,两点之间(不包括两点)全为 0。 有了这两个函数,后面的工作会方便许多。 public boolean horizontal(int p1x,int p1y,int p2x,int p2y){ int ax=p1x。 int ay=p1y。 int bx=p2x。 int by=p2y。 if(ax==ay1||ay==ax1) {return true。 } if(ax==bxamp。 amp。 ay==by) return false。 if(ay!=by) return false。 if(ay==byamp。 amp。 ax!=bx){ int x_start = ax = bx? ax : bx。 //x_start=min{ax,bx} int x_end = ax = bx ? bx : ax。 //x_end=max{ax,bx} for(int x = x。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。