LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y

Similar documents
新・解きながら学ぶJava

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

Microsoft Word - 01.DOC

untitled

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

Chapter 9: Objects and Classes

CC213

无类继承.key

图形学 Project 2 要求 任意两个多边形, 求出其相交的区域 使用说明 例 1 第一步, 与 Project 1 画多边形的方法相同, 画一个多边形 ; 第二步, 单击 INTERSECT WITH, 随后画出第二个多边形 ; 第三步, 单击 FILL 进行填充

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

邀請大陸專業人士來臺從事文教相關活動參考手冊(修訂二版)

untitled

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

java2d-4.PDF

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

软件工程文档编制

威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点


2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

新版 明解C++入門編

untitled

Microsoft Word - 第3章.doc

Microsoft Word - Broker.doc

Swing-02.pdf

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

javaexample-02.pdf

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

FY.DOC

《大话设计模式》第一章

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

untitled

1.5招募说明书(草案)

C 1

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(Microsoft Word - \277\357\262\325\252\272\246\322\266q.doc)

Microsoft Word - ch04三校.doc

untitled

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Guava学习之Resources

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

Microsoft Word - 中耳的主要疾病~中耳炎.doc

PowerPoint 簡報

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

Guava学习之CharSequenceReader

建模与图形思考

台北市立大安高工職業學校

Chapter 9: Objects and Classes

EJB-Programming-4-cn.doc

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

新・解きながら学ぶC言語

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

Java

CHAPTER 1

untitled

新版 明解C言語入門編

第3章.doc

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

新・明解C言語入門編『索引』

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

DU Ad Platform_SDK 安卓接入指南 DU Ad Platform_SDK for Android 接入手册 ( 触发式广告 ) DUAd_SDK_Trigger v1.0 百度在线网络技术 ( 北京 ) 有限公司 百度在线网络技术 ( 北京 ) 有限公司 - 1 -

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

3-1 Wii ( )

06 01 action JavaScript action jquery jquery AJAX CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS b

全国计算机技术与软件专业技术资格(水平)考试

CHAPTER VC#

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

Microsoft Word - 新1-12.doc

PowerPoint 演示文稿

C/C++语言 - 运算符、表达式和语句

untitled

3.1 num = 3 ch = 'C' 2

TwinCAT 1. TwinCAT TwinCAT PLC PLC IEC TwinCAT TwinCAT Masc

untitled

邀請大陸專業人士來臺從事文教相關活動參考手冊(95.6)

PowerPoint 演示文稿

Microsoft Word - Learn Objective-C.doc

untitled

EJB-Programming-3.PDF

01_Service

技 术 文 件

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

概述

概述

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

untitled

JavaIO.PDF

建模与图形思考

chp6.ppt

Microsoft Word - 使用OGEngine开发别踩白块儿.doc

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

JBuilder Weblogic

Microsoft Word - chap10.doc

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

Transcription:

拼图游戏 任务说明 本实例实现了拼图游戏的开发 运行程序, 单击 开始 按钮将打乱图片的位置, 效果如图 1 所示, 然后通过鼠标单击图片进行移动, 直到将所有图片都移动到正确位置, 游戏过关, 过关后的效果如图 2 所示 图 1 打乱图片位置的效果图 2 图片移动到正确位置的效果 关键技术 本程序主要通过 Swing 与枚举类实现, 程序将一幅完整的图片平均分成 9 部分, 每一部分为一个正方形, 并将最后一个图片修改为空白图片, 作为游戏中的一个空位置 对于每一个图片部分, 程序封装了一个按钮对象进行装载, 当该按钮对象被单击后, 程序将调换该按钮与装载空白图片的按钮, 其关键技术是使用枚举类控制方向, 以及使用 setlocation() 方法设置按钮的位置 (1) 本实例通过枚举类定义了图片移动的 4 个方向, 分别为上 下 左 右, 其定义方式与定义一个类相似, 但定义枚举类使用关键字 enmu, 枚举类 Direction 的定义如下 : 01 public enum Direction { UP, DOWN, // 上 // 下

LEFT, RIGHT // 左 // 右 (2) 当图片移动后, 按钮的坐标发生改变, 此操作通过 setloca tion() 方法实现 setlocation() 方法是从 Component 类继承的, 其定义如下 : public void setlocation(int x, int y) 参数说明 x: 当前控件左上角在父级坐标空间中新位置的 x 坐标 y: 当前控件左上角在父级坐标空间中新位置的 y 坐标 实现过程 (1) 新建一个项目 (2) 在项目中创建一个名称为 Direction 的枚举类, 用于定义图片移动的 4 个方向, 其关键代码见关键技术部分 (3) 创建名称为 Cell 的类, 用于封装一个单元图片对象, 此类继承 JButton 对象, 并对 JButton 按钮组件进行重写, 其关键代码如下 : 01 public class Cell extends JButton { private static final long serialversionuid = 718623114650657819L; public static final int IMAGEWIDTH = 117; private int place; public Cell(Icon icon, int place) { // 图片宽度 // 图片位置 this.setsize(imagewidth, IMAGEWIDTH); this.seticon(icon); this.place = place; // 单元图片的大小 // 单元图片的图标 // 单元图片的位置 public void move(direction dir) { // 移动单元图片的方法 Rectangle rec = this.getbounds(); // 获取图片的 Rectangle 对象 switch (dir) { // 判断方向 case UP: // 向上移动 this.setlocation(rec.x, rec.y - IMAGEWIDTH); case DOWN: // 向下移动 this.setlocation(rec.x, rec.y + IMAGEWIDTH); case LEFT: // 向左移动

this.setlocation(rec.x - IMAGEWIDTH, rec.y); case RIGHT: // 向右移动 this.setlocation(rec.x + IMAGEWIDTH, rec.y); public int getx() { return this.getbounds().x; // 获取单元图片的 x 坐标 public int gety() { return this.getbounds().y; // 获取单元图片的 y 坐标 public int getplace() { return place; // 获取单元图片的位置 (4) 创建名称为 GamePanel 的类, 此类继承 Jpanel 类 实现 M ouselistener 接口, 用于创建游戏面板对象 在 GamePanel 类中定义长度为 9 单元的图片数组对象, 并通过 init() 方法对所有单元图片对象进行实例化, 其关键代码如下 : 01 public class GamePanel extends JPanel implements MouseListener { private static final long serialversionuid = -653831947783440122L; private Cell[] cells = new Cell[9]; // 创建单元图片数组 private Cell cellblank = null; // 空白 public GamePanel() { super(); setlayout(null); // 设置空布局 init(); // 初始化 // 初始化游戏 public void init() { int num = 0; // 图片序号 Icon icon = null; // 图标对象 Cell cell = null; // 单元图片对象 for (int i = 0; i < 3; i++) { // 循环行 for (int j = 0; j < 3; j++) { // 循环列 num = i * 3 + j; // 计算图片序号 icon = SwingResourceManager.getIcon(GamePanel.class, "/pic/" + (num + 1) + ".jpg"); // 获取图片 cell = new Cell(icon, num); // 实例化单元图片对象

// 设置单元图片的坐标 cell.setlocation(j * Cell.IMAGEWIDTH, i * Cell.IMAGEWIDTH); cells[num] = cell; // 将单元图片存储到单元图片数组中 for (int i = 0; i < cells.length; i++) { this.add(cells[i]); // 向面板中添加所有单元图片 /** * 对图片进行随机排序 */ public void random() { Random rand = new Random(); // 实例化 Random int m, n, x, y; if (cellblank == null) { // 判断空白的图片位置是否为空 cellblank = cells[cells.length - 1]; // 取出空白的图片 if (i!= cells.length - 1) { // 对非空白图片注册鼠标监听 cells[i].addmouselistener(this); m = rand.nextint(cells.length); // 产生随机数 n = rand.nextint(cells.length); // 产生随机数 x = cells[m].getx(); y = cells[m].gety(); // 对单元图片调换 cells[m].setlocation(cells[n].getx(), cells[n].gety()); cells[n].setlocation(x, y); @Override public void mousepressed(mouseevent e) { Cell cell = (Cell) e.getsource(); // 获取触发时间的对象 int x = cellblank.getx(); int y = cellblank.gety(); 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) == Cell.IMAGEWIDTH) { cell.move(direction.up); // 向上移动 cellblank.move(direction.down); else if (cell.getx() == x && (cell.gety() - y) == -Cell.IMAGEWIDTH) { cell.move(direction.down); // 向下移动 cellblank.move(direction.up); if (issuccess()) { // 判断是否拼图成功 int i = JOptionPane.showConfirmDialog(this, " 成功, 再来一局?", " 拼图成功 ", JOptionPane.YES_NO_OPTION); // 提示成功 if (i == JOptionPane.YES_OPTION) { random(); // 开始新一局 /** * 判断是否拼图成功 * @return 布尔值 */ public boolean issuccess() { int x = cells[i].getx(); int y = cells[i].gety(); if (i!= 0) { if (y / Cell.IMAGEWIDTH * 3 + x / Cell.IMAGEWIDTH!= cells[i].getplace()) { // 判断单元图片位置是否正确 return false;// 只要有一个单元图片的位置不正确, 就返回 false return true; // 所有单元图片的位置都正确返回 true