java拼图游戏设计报告_第1页
java拼图游戏设计报告_第2页
java拼图游戏设计报告_第3页
java拼图游戏设计报告_第4页
java拼图游戏设计报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Web程序开发课程大作业拼图游戏 3011212046张杰2014.11一、题目说明拼图游戏不仅可以帮助人们打发时间,还可以用于锻炼儿童脑力,帮助少儿开发大脑思维,拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。本游戏使用Java语言设计,开发平台为JDK。开发工具Eclipse。JDK是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使

2、用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。2、 题意分析因为要制作拼图游戏,所以首先要实现图片的导入。这是通过getImage()函数来实现的,该函数有两个参数,第一个参数指明图片的路径,第二个参数指明图片的名称。然后,因为要实现图片摆放的随意性,所以要通过initgame()函数来实现。Initgame()函数是自写函数,在函数体内,通过调用Math.random()函数产生随机数,用来达

3、到图片位置摆放的随意性和随机性。最后,因为要实现人机交互.,所以首先要通过一系列函数来实现对鼠标事件的监听和响应,这是通过函数addMouseListener(this) 和addMouseMotionListener(this)来完成的。这样程序会区分用户对鼠标不同的操作,正确执行相应的功能。游戏操作流程:开始游戏操作游戏游戏完成关闭游戏3、 设计目的本游戏的设计目的在于休闲娱乐,玩家可以在学习、编程等工作后用来休息放松,让集中的心态得到释放,对于小孩可以通过精美的卡通的图片来吸引孩子的兴趣,加强动脑动手能力。本游戏适玩人群老少皆宜。4、 设计特点本游戏主要充分运用图形用户界面将一张图片切割

4、成大小相同的九块小图,运用其中的八块,将小图的顺序和位置打乱,通过将图片移动到剩余的一格空白处而改变图片的位置,最终拼成原始图片。五、功能说明游戏功能图:拼图游戏退出游戏选择图片查看图片开始游戏本拼图游戏,运用了Java2中的图形处理技术和消息响应技术。通过图形技术,实现图片的导入和分割。通过消息响应机制,使程序可以响应用户的鼠标操作,进行拼图游戏的操作。这个游戏主要分为四个模块,分别是游戏开始、查看图片、选择图片和退出游戏。这四个摸块的功能各不一样,玩家如果在游戏过程中感觉拼图小块之间的接合不明显,玩家可以点击“查看”按钮来浏览拼图完成的效果图,从而使得游戏不会无从下手;玩家如果觉得当前拼图

5、的画面不满意可以点击“选择”图片按钮来更换图片,或者想更改拼图的画面,玩家可以进入游戏文件夹进行更换图片文件,但是需要注意的是图片需要有格式,同时还需要将所要更改的图片切割成大小相同的九个小块,具体就不详细说了,游戏文件夹中会给大家附一个.txt文件,供大家更换图片使用,从而提高玩家乐趣。六、主要功能程序段import java.awt.Rectangle;/引入类import java.awt.event.*;import javax.swing.*;class PaneButton extends JButton / 继承按钮类实现加图片的方格PaneButton(Icon icon) /

6、构造方法进行初始化,设置图标super(icon);this.setSize(100, 100);/设置每个方格的大小public void move(String direction, int sleep) /方格的移动if (direction = "UP") /方格向上移动this.setLocation(this.getBounds().x, this.getBounds().y - 100); else if (direction = "DOWN") /方格向下移动this.setLocation(this.getBounds().x, thi

7、s.getBounds().y + 100); else if (direction = "LEFT") /方格向左移动this.setLocation(this.getBounds().x - 100, this.getBounds().y); else /方格向右移动this.setLocation(this.getBounds().x + 100, this.getBounds().y);public class PanelOfImage extends JPanel implements MouseListener /图片面板加载方格对象boolean hasAdd

8、ActionListener = false;/设置方格动作监听器的标识PaneButton pane;/声明方格Rectangle nullPanel;/声明空方格,没有添图片public static int currentPID = 1;/当前选择的图片编号public PanelOfImage() /构造方法进行初始化this.setLayout(null);/设置面板的布局为空this.setSize(400, 400);/设置面板的大小nullPanel = new Rectangle(200, 200, 100, 100);/设置空方格的位置pane = new PaneButt

9、on9;/创建九个方格Icon icon;/声明图标for (int i = 0; i < 3; i+) /循环为每个方格加载图片for (int j = 0; j < 3; j+) /循环列icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");/创建图标panei * 3 + j = new PaneButton(icon);/创建方格在方格中加载图片panei * 3 + j.setLocation(j * 1

10、00, i * 100);/设置方格的位置this.add(panei * 3 + j);/面板添加方格this.remove(pane8);/ 移除多余的方格public boolean isFinish() /判断是否拼凑成功for (int i = 0; i < 8; i+) int x = panei.getBounds().x;int y = panei.getBounds().y;if (y / 100 * 3 + x / 100 != i)return false;return true;public void reLoadPictrue() /重新加载图片在重新选择图片时

11、Icon icon;for (int i = 0; i < 3; i+) /循环为每个方格加载图片for (int j = 0; j < 3; j+) icon = new ImageIcon("pictrue/pic_" + currentPID + "_"+ (i * 3 + j + 1) + ".jpg");panei * 3 + j.setIcon(icon);public void breakRank() /方格打乱重新排序while (pane0.getBounds().x <= 100 &&am

12、p; pane0.getBounds().y <= 100) /当第一个方格距左上角近时int x = nullPanel.getBounds().x;int y = nullPanel.getBounds().y;int direction = (int) (Math.random() * 4);/随机产生一个数字对应空方格的上下左右移动if (direction = 0) /空方格左移动,与左侧方格互换位置,左侧方格右移动x -= 100;/空主格左移if (test(x, y) for (int j = 0; j < 8; j+) /循环寻打左侧的按钮if (panej.ge

13、tBounds().x = x)&& (panej.getBounds().y = y) /依次寻找左侧的按钮panej.move("RIGHT", 100);/方格向右移动一格nullPanel.setLocation(x, y);/重新设置空方格的位置break;/跳出循环 else if (direction = 1) /空方格右移动x += 100;if (test(x, y) for (int j = 0; j < 8; j+) if (panej.getBounds().x = x)&& (panej.getBounds()

14、.y = y) panej.move("LEFT", 100);/方格向左移动一格nullPanel.setLocation(x, y);break; else if (direction = 2) /空方格上移动y -= 100;if (test(x, y) for (int j = 0; j < 8; j+) if (panej.getBounds().x = x)&& (panej.getBounds().y = y) panej.move("DOWN", 100);/方格向下移动一格nullPanel.setLocation

15、(x, y);break; else /空方格下移动y += 100;if (test(x, y) for (int j = 0; j < 8; j+) if (panej.getBounds().x = x)&& (panej.getBounds().y = y) panej.move("UP", 100);/方格向上移动一格nullPanel.setLocation(x, y);break;if (!hasAddActionListener)/判断是否添加动作事件for (int i = 0; i < 8; i+)/循环为每个方格添加动作事件

16、panei.addMouseListener(this);hasAddActionListener = true;private boolean test(int x, int y) /检测方格是否在指定的范围内移动if (x >= 0 && x <= 200) | (y >= 0 && y <= 200)return true;elsereturn false;public void mouseClicked(MouseEvent arg0) /鼠标点击时调用public void mouseEntered(MouseEvent arg

17、0) /鼠标进入组件区域时调用public void mouseExited(MouseEvent arg0) /控制鼠标不能移动出面板的范围public void mouseReleased(MouseEvent arg0) /鼠标按键在组件上释放时调用public void mousePressed(MouseEvent event) /鼠标按下时调用PaneButton button = (PaneButton) event.getSource();/获得鼠标按的方格按钮int x1 = button.getBounds().x;/获得该方格按钮的横坐标int y1 = button.g

18、etBounds().y;/获得该方格按钮的纵坐标int nullDir_X = nullPanel.getBounds().x;/得到空方格的横坐标int nullDir_Y = nullPanel.getBounds().y;/得到空方格的纵坐标if (x1 = nullDir_X && y1 - nullDir_Y = 100)/进行比较果满足条件则交换button.move("UP", 100);/方格向上移动else if (x1 = nullDir_X && y1 - nullDir_Y = -100)button.move(&q

19、uot;DOWN", 100);/方格向下移动else if (x1 - nullDir_X = 100 & y1 = nullDir_Y)button.move("LEFT", 100);/方格向左移动else if (x1 - nullDir_X = -100 && y1 = nullDir_Y)button.move("RIGHT", 100);/方格向右移动elsereturn;nullPanel.setLocation(x1, y1);/重新设置空方格的位置this.repaint();/重新加载if (thi

20、s.isFinish() /进行是否完成的判断JOptionPane.showMessageDialog(this, "恭喜你,完成拼图");for (int i = 0; i < 8; i+)/循环撤消鼠标事件panei.removeMouseListener(this);hasAddActionListener = false;import java.awt.*;/引入类import java.awt.event.*;import javax.swing.*;public class TextImagePieceTogether extends JFrame im

21、plements ActionListener /操作实现拼图的游戏的类PanelOfImage imagePanel;/声明图片面板JPanel panelOfSouth, panelOfLook;/声明南侧面板和查看面板Button startButton;/声明开始按钮Button lookButton;/声明查看按钮Button chooseButton;/选择按钮Container container;/ 容器,得到内容面板public TextImagePieceTogether() /构造方法进行初始化container = this.getContentPane();/获得内容

22、面板startButton = new Button("开始");/创建开始按钮startButton.addActionListener(this);/添加监听事件lookButton = new Button("查看");lookButton.addActionListener(this);chooseButton = new Button("选择");chooseButton.addActionListener(this);panelOfLook = new JPanel();/创建查看面板panelOfLook.setLayo

23、ut(null);/设置布局Icon icon = new ImageIcon("pictrue/pic_" + PanelOfImage.currentPID+ ".jpg");/创建图标JLabel label = new JLabel(icon);/创建图标标签label.setBounds(0, 0, 300, 300);/设置标签的位置panelOfLook.add(label);/添加标签panelOfSouth = new JPanel();/创建南侧面板panelOfSouth.setBackground(Color.red);/设置背景

24、颜色panelOfSouth.add(startButton);/添加开始按钮panelOfSouth.add(lookButton);/添加查看按钮panelOfSouth.add(chooseButton);/添加选择按钮imagePanel = new PanelOfImage();/创建图片面板container.add(imagePanel, BorderLayout.CENTER);container.add(panelOfSouth, BorderLayout.SOUTH);this.setTitle("拼图游戏");/设置标题this.setLocation

25、(300, 200);/设置位置this.setSize(308, 365);/设置大小this.setResizable(false);/设置是否可以通过某个用户操作调整this.setVisible(true);/设置可视this.setDefaultCloseOperation(3);/设置默认关闭操作public void actionPerformed(ActionEvent event) /按钮触发的事件Button button = (Button) event.getSource();/获得事件按钮源if (button = startButton) /如果是开始按钮image

26、Panel.breakRank();/调用图片方格打乱方法 else if (button = lookButton) /如果是查看事件if (button.getLabel() = "查看") /如果按钮标签为"查看"container.remove(imagePanel);/容器移除图片面板container.add(panelOfLook);/容器添加查看标签panelOfLook.updateUI();/不用调整大小就可以出现新增删的组件container.repaint();/重绘button.setLabel("返回");

27、/设置按钮标签 else container.remove(panelOfLook);/容器移除查看面板container.add(imagePanel);/容器添加图片面板container.repaint();/重绘button.setLabel("查看"); else if (button = chooseButton) /如果是选择按钮Choice choice = new Choice();/创建选择器choice.add("-小猫-");/添加列表项choice.add("-QQ-");int i = JOptionPan

28、e.showConfirmDialog(this, choice, "选择图片",JOptionPane.OK_CANCEL_OPTION);/弹出对话框if (i = JOptionPane.YES_OPTION) /选择对话框的确定按钮PanelOfImage.currentPID = choice.getSelectedIndex() + 1;/获得列表项的编号imagePanel.reLoadPictrue();/图片重载Icon icon = new ImageIcon("pictrue/pic_"+ PanelOfImage.currentPID + ".jpg")

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论