摘要: 然后,我们实现点击小球的动作。点击小球的时候,分为两步,第一步:选中;第二步,清除。本章先研究选中。首先,我们需要了解点击的小球的位置,但是,之前的设计并没有传入相关的参数。所以我们先来重构BallActionListener 1 package org.stephen.bubblebreaker.listener; 2 3 import java.awt.event.ActionEvent; 4 import java.awt.event.ActionListener; 5 6 import org.stephen.bubblebreaker.control.EventDispatche.. 阅读全文
posted @ 2012-11-27 15:38 史蒂芬.王 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 本章,我们来讨论如何为游戏加上动作。先从整体上考虑,很多Java例子程序喜欢直接在代码中加入:button.addActionListener(new ActionListener() { public void performAction(Event e) {}});这样的代码。这是不好的,因为这不符合单一职责原则,ActionListener应该独立出去,单独成类。这样,当发生问题的时候也容易寻找。有两种形式,一种是本文采用的单独成类的形式,另外一种是在对应的对象中声明内部类。例如:class MyButton.ActionListener {}。整体上来讲,我们会加入:StartActi 阅读全文
posted @ 2012-11-27 14:42 史蒂芬.王 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 在写了这么多理论之后,读者都对实践比较感兴趣。那么如何写自表达代码呢?我们跳开理论部分(以后我会补充理论部分),直接进入实践部分,从本章开始,将以消小球这个游戏为例,以Java代码为样本,引导大家一步一步书写自表达式代码。消小球是一款见于Windows Mobile上的游戏,在12x12的方格子里随即放置各种颜色的小球。选中至少两个相邻的同颜色小球,再次点击,就消除选中的小球,消除的小球的个数累加作为得到的分数,消掉小球以后上面的小球会降落,某列被消除以后,会将其左边的列拉过来,直到无法继续消除位置。好了,游戏规则介绍完毕。那么我们开始在Eclipse里建立工程。Java工程,名称Bubble 阅读全文
posted @ 2012-11-27 13:24 史蒂芬.王 阅读(470) 评论(0) 推荐(0) 编辑
摘要: CVS全称叫做:Concurrent Version System。并发版本系统。经常出现命令运行错误且不易修复。有Eclipse插件Visual Source Safe官方提醒需要经常备份数据。和Visual Studio结合的很好。需要用锁来工作,一旦锁定别人无法打开。会造成死锁文件问题。SVN全称叫做Subversion。常用的免费工具,许多开源工程用的就是Subversion有Eclipse插件保存修改履历git分布式版本管理工具免费工具有Eclipse插件能进行变更跟踪运行速度快采用分布式存储,数据更加稳定和Linux结合的更好。Android采用的就是git管理的代码。 阅读全文
posted @ 2012-11-23 10:32 史蒂芬.王 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 配置管理(Configuration Management)是为了确保软件开发过程中的产品的一致性、稳定性、可追溯性、回滚性等一系列目的而采取的技术上和管理上的手段的总称。往往由于软件开发过程当中重心放在了“开发”本身,配置管理往往被当成了不重要的环节而被忽略了。提起配置管理,很多人都会认为把文档和代码放在版本管理工具里就叫做配置管理了。顶多是做做目录划分,权限设置,签入签出规则设定等。做到上述这些只是做到了版本管理(Version Control),而不是配置管理。除了上述这些之外,配置管理还要求能够保证灵活性、时效性等目的。另外,做好配置管理的一个重要的作用是高效快速而稳定的发布系统。在开 阅读全文
posted @ 2012-11-21 16:44 史蒂芬.王 阅读(1869) 评论(0) 推荐(0) 编辑
摘要: 假设我们在测试一个电子邮件地址的网页输入框,下面是相关的需求描述:当该文本框输入一个“电子邮件”以后,点击保存按钮,如果输入的是正确的电子邮件地址,则转入下一页,否则提示一个消息框,显示“你输入的不是合格的电子邮件,请重新输入”。点击“确认”按钮以后,焦点回落在电子邮件地址输入框里,并且光标放在文本框最后一个文字后面。没有选中文字。原来的输入文字内容不变。那么我们应该测试多少?1. 对话框显示的消息是否要测试?2. 对话框的确定按钮点击是否要测试?3. 对话框的关闭按钮点击是否要测试?4. 焦点回落是否要测试?5. 光标位置是否要测试?6. 选中文字是否要测试?7. 文本框的文字内容是否要测试 阅读全文
posted @ 2012-11-21 13:55 史蒂芬.王 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 我们以Android平台下的输入法为例。假设在OpenWnn输入法(代码请到http://source.android.com/source/downloading.html上找),接入硬件盘的时候,日文输入模式下,按下Shift + T键输入的不是T。应该怎么定位?onKeyDown(int keyCode,KeyEvent event)是入口,然后找到硬件盘的处理方法onEvent();然后再继续找processHardwareKeyboardInputChar(),再继续...再继续...----这种恶梦式的Bug定位主要原因是代码的架构问题。代码的架构不够清晰导致Bug发生时无法快速定 阅读全文
posted @ 2012-11-20 21:05 史蒂芬.王 阅读(440) 评论(0) 推荐(0) 编辑
摘要: 假设有一个文本框,需要校验输入内容是否是电子邮件,那么应该测试多少种用例呢?1. 英文的电子邮件地址 abc@gmail.com2. 带下划线,点号的电子邮件地址 a.b.c@gmail.com a-b-c@gmail.com a-b.c@gmail.com a.b-c@gmail.com a.b@gmail.coma-b@gmail.com a_b@gmail.com a.b_c@gmail.com a-b_c@gmail.com a_b_c@gmail.com3. 很长的电子邮件地址 abcdefghijklmnopqrstuvwxzy@gmail.com4.纯数字的电子邮件地址 123. 阅读全文
posted @ 2012-11-20 20:32 史蒂芬.王 阅读(411) 评论(1) 推荐(0) 编辑
摘要: 完成一个级联下拉列表框(例如:省市联动)需要多少行代码呢?问过若干人,答案从100行到几万行的都有。那么对于一个二级联动下拉列表框需要这么多代码的话,那么一个四级的联动下拉列表框(比如:品牌、分类、类型、型号)又需要多少行代码?对于这个问题,我们推荐的是,每个增加一个下拉列表框只要2行。当然,这没有计算写成通用结构的代码。那么,我们来看看是什么样的代码能够通用到这种程度,可以每增加一个下拉列表框只需要2行就可以了。为了简单起见,我们采用两套级联下拉列表框来实现例子。一个是省市下拉列表框,另一个是产品下拉列表框。先上代码: 1 <HTML encoding="UTF-8" 阅读全文
posted @ 2012-11-19 21:45 史蒂芬.王 阅读(30541) 评论(10) 推荐(4) 编辑
摘要: 假设书写一个网上售书系统,其中一个图书编辑页面,如果可以写成这样,你会怎么感觉? 1 <HMTL> 2 <head> 3 #{title 'BookEdit.Edit'/} 4 </head> 5 <body> 6 #{form action='BookEdit.save()'} 7 #{EditBar title='book.edit.isbn', text=${Book.isbn} /} 8 #{EditBar title='book.edit.name', text=${Boo 阅读全文
posted @ 2012-11-19 21:35 史蒂芬.王 阅读(407) 评论(0) 推荐(0) 编辑