- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java游戏编程原理与实践教程课件第9章—陈锐夏敏捷主编
Java游戏编程原理与实践教程;在“游戏”中,拼块以随机顺序排列,网格上有一个位置是空的。完成拼图的方法是利用这个空位置移动拼块,玩家用鼠标点击空位置周围拼块来交换它们位置,直到所有拼块都回到原位置。拼图游戏运行结果如图9-1。; 游戏界面和相关图片素材 ;9.2 程序设计的思路
游戏中动态生成一个大小3*3的图片按钮数组cells。将图片woman.jpg分割成行列数3*3的小图片,并按顺序编号;每个图片按钮显示一副小图片,其位置成员place存放用0,1,2到8的数,代表正确位置编号。注意最后一个图片按钮显示的是空白信息图片“9.jpg”而位置成员place存放8。
游戏开始时,随机打乱这个图片按钮数组cells,根据玩家用鼠标点击,来交换图片按钮数组cells对应按钮与空白图片按钮位置,判断按钮数组cells所有元素的位置成员place是否有序来判断是否已经完成游戏。;9.3 关键技术
9.3.1 按钮显示图片实现
Swing中的按钮可以显示图像(图片)。
JButton中显示图像的构造方法:
JButton(Icon icon) :按钮上显示图标。;9.3 关键技术
9.3.2 图片按钮移动实现
当图片按钮移动后,按钮的坐标发生改变,此操作通过setLocation()方法实现。setLocation()方法是从Component类继承的,其定义如下:
public void. setLocation (int x, int y)
参数x,当前组件左上角在父级坐标空间中新位置的x坐标。参数y,当前组件左上角在父级坐标空间中新位置的y坐标。;9.4 程序设计的步骤
项目组成如图9-2所示。;9.4.1 设计单元图片类(Cell.java)
创建名称为Cell的类,用于封装一个单元图片对象,此类继承JButton对象,并对JButton按钮组件进行重写。
9.4.2 枚举类型Direction.java
项目中创建一个名称为Direction的枚举类型,用于定义图片移动的4个方向。
// 枚举类型四个方向
public enum Direction {
UP, // 上
DOWN, // 下
LEFT, // 左
RIGHT // 右
};9.4.3 游戏面板类GamePanel.java
在项目中创建一个名称为GamePanel的类,此类继承JPanel类,实观MouseListener接口,用于创建游戏面板对象。GamePanel类中定义长度为9单元的图片数组对象cells,并通过init方法对所有单元图片对象迸行实例化。
构造方法GamePanel()调用init()初始化对所有单元图片对象迸行实例化。单元图片对象进行实例化是可以直接用现成分割好的图片1.jpg,2.jpg,…..9.jpg(见图9-3)实现。其中9.jpg为空白图片。
也可以不用现成分割好的图片,使用BufferedImage类的getSubimage方法可以对一个大的图片woman.jpg进行任意分割成子图像。;现成分割好的图片1.jpg,2.jpg,…..9.jpg;
图片块上单击事件中,通过e.getSource()获取触发事件的对象cell,与空白图片块cellBlank进行位置比较,从而决定被单击对象cell和空白图片块cellBlank移动方向。
public void mouseClicked(MouseEvent e) {
Cell cell = (Cell) e.getSource();// 获取触发事件的对象
int x = cellBlank.getX();// 获取空白图片块x坐标
int y = cellBlank.getY();// 获取空白图片块y坐标
if ((x - cell.getX()) == Cell.IMAGEWIDTH cell.getY() == y) {
cell.move(Direction.RIGHT);// 向右移动
cellBlank.move(Direction.LEFT);
} else if ((x - cell.getX()) == -Cell.IMAGEWIDTH cell.getY() == y) {
cell.move(Direction.LEFT);// 向左移动
cellBlank.move(Direction.RIGHT);
} else if (cell.getX() == x (cell.getY() - y) == C
文档评论(0)