使用游戏学习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);
......
0. 学习一章掌握一张,然后再不断的用。
1. 找一些比较经典的例子,源码(源码爱好者), 每个例子比较集中一种编程思想而设计的,比如在我的实践当中,我曾经学习过一个很经 典的例子就是用Java实现的HotDraw(源自SmallTalk),你可以用rolemodel或hotdraw在 搜索引擎上找一下,我记不大清 ......
选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类
对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用 ......
1、创建了一个对象后:
(1)没有在适当的地方释放掉
(2)在应该释放的地方没有做释放操作
例如:下面一段程序:
m_progressDlg = ProgressDialog.show(this, getString(R.string.market),getString(R.string.is_visiting), true);
new Thread() {
public v ......