1、Java游戏编程原理与实践教程,主编 陈锐 夏敏捷 人民邮电出版社,游戏在8 8格子的游戏池中进行。每个格子中有一个图像。鼠标连续选中两个相邻的图像,它们的位置会互换,互换后如果横排或竖排有 3 个以上相同的图像,则可以消去该图像,并得分。,第10章 对对碰游戏(按钮版),游戏界面和相关图片素材,10.2 程序设计的思路 游戏屏幕由8行8列的方块组成,方块的动物图案各不相同,为显示方块的动物图案,采用图形按钮实现。屏幕由8行8列的方块组成,所以采用二维JButton数组button88;为了方便判断横排或竖排有3个以上相同的图像按钮,这里使用二维int数组animal88,储存对应按钮的动物图
2、案ID(0到6的数字)。 在定时器timer控制下,不停的统计用户的得分,并控制时间进度条,如果生命进度条为100%,则游戏结束,出现游戏结束提示框。,10.2 程序设计的思路当用户鼠标连续选中两个相邻的方块(图形按钮)buttony2x2,button y1x1时,交换二维数组animal中两个按钮的动物图案ID,而不是交换位置,交换以后调用isThreeLinked(y2, x2)和|isThreeLinked(y1, x1)检测屏幕上是否有符合消去规则的方块,如果有被消去的方块,则removeLinked(y2, x2)修改记录要绘制方块的动物图案ID的animal88数组对应元素的值,
3、不需要绘制为EMPTY(即7,因为动物图案ID是0到6的数字)。并调用updateAnimal()从游戏屏幕该列上方重新随机产生新的动物图案ID,更新动物图案ID数组animal88。最后print()更新所有方块按钮的图形Icon,从而看到动态游戏效果。,10.3 关键技术 10.3.1 动态生成88的按钮 本章8行8列的方块是由按钮实现的,Java能实现这种图形化按钮,仅仅使用Jbutton相关方法就可以实现 .JButton button= new JButton( );ImageIcon exitedImageIcon =new ImageIcon(“res / exited.png“
4、);ImageIcon enteredImageIcon =new ImageIcon(“res / roll.png“);ImageIcon pressedImageIcon =new ImageIcon(“res / down.png“);button.setIcon(exitedImageIcon); /设置鼠标不在按钮上时的图标button.setRolloverIcon(enteredImageIcon); /设置鼠标移到按钮上时的图标button.setPressedIcon(pressedImageIcon); /设置鼠标点击时的图标button.setContentAreaFi
5、lled(false); / 是否显示外围矩形区域 选否button.setFocusable(false); /去掉按钮的聚焦框button.setBorderPainted(false); /去掉边框,10.3 关键技术 10.3.2 进度条组件JProgressBar 使用JProgressBar类创建进度条组件。该组件能用一种颜色动态地填充自己,以便显示某任务完成的百分比。 构造方法: JProgressBar() 创建一个显示边框但不带进度字符串的水平进度条。 JProgressBar(int min, int max)创建具有指定最小值和最大值的水平进度条。 常用方法: pulic
6、 void setValue(int n) 将进度条的当前值设置为 n。 pulic int getValue() 返回进度条的当前值。,10.3 关键技术 10.3.3 定时器功能 Timer组件可以定时执行任务,这在游戏动画编程上非常有用。Timer组件可以使javax.swing.Timer包中的Timer类来实现,该类的构造方法为: Timer(int delay, ActionListener listener); 该构造方法用于建立一个Timer组件对象,参数listener用于指定一个接收该计时器操作事件的侦听器,指定所要触发的事件,10.3 关键技术 10.3.3 定时器功能
7、例如开始按钮事件代码中创建Timer组件对象的代码:if (e.getSource() = buttona) /开始buttonatimer = new Timer(800, new TimeListener();timer.start(); 本程序内部定时器类TimeListener修改进度条的状态,并判断是否到达最大值100,如果到达则定时器结束,88的图形按钮无效,而“开始”按钮有效。从而可以开始新游戏。,10.4 程序设计的步骤 10.4.1 设计游戏窗口类(MyJframes.java) 游戏窗口类MyJframes实现游戏全部功能,继承JFrame组件实现的。是由上方Panel1和中间Panel2组成。 10.4.2 设计内部定时器类 内部定时器类TimeListener修改进度条的状态,并判断是否到达最大值100,如果到达则定时器结束,88的图形按钮无效,而“开始”按钮有效。从而可以开始新游戏。,