使用游戏学习java面向对象编程(2)
上一次,我们完成了界面的组织。接下来我们完成业务逻辑。
1)如何完成周围相邻的按钮变色。
分析:因为我们做了一个5*5的数组。并且事先我们给每个自定义的button加了x和y坐标
就是为了更方便的给相邻的按钮变色。
当我们点击(2,2)按钮时,周围的 4个按钮会变化。
当然首先我们应该先给每个按钮增加监听器。我们使用内部类来完成此功能
内部类如下
//定义一个内部类,专用于处理button事件
class buttonHandler implements ActionListener {
MyButton btn;
//构造方法,得到需要处理的button
public buttonHandler(MyButton button) {
btn = button;
}
public void actionPerformed(ActionEvent e) {
changeRound(btn);
if (isWin()) {//如果赢了,显示一个对话框
disableAll(); //不能再点击了。
JOptionPane.showMessageDialog(null, "恭喜恭喜!您过关了");
}
}
}
再次强调这个类是定义在Game类中的。
接下了要回到我们的目的--相邻按钮,变色策略如下
//改变自己以及四周的按钮的颜色
public void changeRound(MyButton btn) {
int i = btn.getXCord();//取得按钮所在的位置
int j = btn.getYCord();
buttons[i][j].changeColor(); //先自己变色,也可以btn.changeColor();
if (j > 0) {
buttons[i][j - 1].changeColor();//上
}
if (j < N - 1) {
buttons[i][j + 1].changeColor();//下
}
if (i > 0) {
buttons[i - 1][j].changeColor();//左
}
if (i < N - 1) {
buttons[i + 1][j].changeColor();//右
}
}
最后,每次点击按钮都要检测按钮是否全部已经被搞定了。
//检测玩家是否已经赢了的方法
//思路:将所有的按钮的背景色都查一遍
public boolean isWin() {
boolean flag = true;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (buttons[i][j].getBackground() == Color.white) {
return false;
}
}
}
return flag;
}
ok. 程序就已经基本搞定了。
总结一下知识点:
1)继承
2)数组
3)java swing事件
4)内部类
其中swing 和内部类还有一些细节可以深入。大家可以自己去查相关的资料
代码下载
http://cnjava.blog.51cto.com
相关文档:
因数据安全,需要将生成的报表xls,添加水印,所以自已在jxl中进行代码修改。
使用例子
public class testJxl {
public static void main(String[] args) throws Exception {
OutputStream out = new FileOutputStream("./aaaa.xls"); // 写入到FileInputStream
WritableWorkbook wwb= Workbook.createWorkbook(out);
......
8. 当系统处理完成后,报表被显示出来。这是一份商品销售报告,显示的是每类商品的季度销售额以及累计情况。接下来,我们尝试用 Java
创建一个事件响应处理类,把每季度销售额在10万美元以上的数据用红色标示出来。
创建 Java 类
按照如下步骤,用 Java 创建百灵报表(BIRT)的事件响应处理程序。
......
1、创建了一个对象后:
(1)没有在适当的地方释放掉
(2)在应该释放的地方没有做释放操作
例如:下面一段程序:
m_progressDlg = ProgressDialog.show(this, getString(R.string.market),getString(R.string.is_visiting), true);
new Thread() {
public v ......
返回多个对象:
PROCEDURE AUTO_SEL_INVOICE_DETAIL(
P_RESULT_LIST OUT SYS_REFCURSOR) AS
BEGIN
OPEN P_RESULT_LIST FOR
SELECT DISTINCT CC.CHARGE_COLLECTION_ID CHARGE_COLLECTION_ID, CC.COLLECT_DATE COLLECT_DATE, C ......