使用游戏学习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
相关文档:
备注:
本文选自ChinaITLab网校课程《刘晓涛Java就业直通班V2.0》之预备知识,点击这里了解更多!
JAVA学习之路---学习路线及要点
2.软件开发学习路线
两千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒进也不保守并非中庸之道,而是找寻学习软件开发的正确路线与规律。
从软件开发人员的生涯规划来讲,我们可 ......
最近经常和公司做JAVA的兄弟们打交道,由于需要统加密算法,所以要求做一个加密的DLL文件供兄弟们调用,根据网上各位大虾们的经验,在加上个人在摸索过程中的体会,现在将流程以及个人心得贴上,以供以后漫漫程序生涯参考,如有不对的还请各位大力指正。
第一步是编写java类, ......
正多边形中最长的对角线就是主对角线,其余的对角线就是副对角线
lang 是 language(语言) 的简写
是java中常用方法最多的包
包含常用类
Runnable接口,只有一个方法run()
exit(int status)
终止当前正在运行的 Jav ......
http://hi.baidu.com/shedewang/blog/item/b4a71b254e43ce35c895599b.html
说是支持1亿pv/天,也许有点夸张,但如果您能认真看完相信也不会让您失望。
如果大家真想支持我、支持中国人开源项目,请把该文贴到自己的博客中或者收藏本文,记得包含文档的下载地址!!!!!!!谢谢。
我说的系统主要是构建在hibernate之上 ......