使用游戏学习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
相关文档:
在传智的这段时间每天的情形想都想得到,两点一线,但是每天都感觉到很充实,学习,不停的学习。越是不停的学习,越是感觉自己的力量是那么的微薄,自己的能力是那么的小,JAVA真是博大精深。老师说叫我们不要担心,可是我不担心也不可能哦,毕竟在同类学校毕业的,也许我们可以算得上是很不错的,但是和我们同台竞技的人 ......
今天是写第一篇传智播客教程日志,也是我看
JavaScript
视频的第一天。
先说缘由吧。大三还有三个月就要结束了,可我还没有感觉到自己能够有足够的能力找到份好工作,大学期间学到的都是些皮毛和理论,我不想到了找工作的时候,面试官问我会
XXX
吗?我说不会。因此我想通过培训增加自己的竞争力。我报了本地的一家
I ......
正多边形中最长的对角线就是主对角线,其余的对角线就是副对角线
lang 是 language(语言) 的简写
是java中常用方法最多的包
包含常用类
Runnable接口,只有一个方法run()
exit(int status)
终止当前正在运行的 Jav ......
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 ......