当前位置:文档之家› java拼图游戏代码(完整版)

java拼图游戏代码(完整版)

java拼图游戏代码(完整版)
java拼图游戏代码(完整版)

Pintu.java(c lass)

import java.awt.Color;

import java.awt.FileDialog;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.Rectangle;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JRadioButtonMenuItem;

public class Pintu extends JFrame implements ActionListener{

JMenuBar menubar=new JMenuBar(); //菜单条

JMenu menu1=new JMenu("操作"); //菜单

JMenu menu2=new JMenu("设置");

JMenu menu3=new JMenu("帮助");

//菜单选项

JMenuItem jitem1=new JMenuItem("开始游戏");

JMenuItem jitem2=new JMenuItem("退出游戏");

JMenuItem jitem3=new JMenuItem("游戏图片");

JMenu jitem4=new JMenu("难度设置");

JMenuItem jitem5=new JMenuItem("关于我们");

JRadioButtonMenuItem nandu1=new JRadioButtonMenuItem("3*3");//单选菜单JRadioButtonMenuItem nandu2=new JRadioButtonMenuItem("4*4");

String filename="a.jpg"; //默认图片路径

ImageIcon preimage=null; //预览图对象

JButton prebtn=null; //预览图片放置控件

int m=3,n=3; //默认设置为3*3的阵列

int w=80,h=80; //默认小方格的高度与宽度

int step=0; //拼图步数

JLabel lstep=new JLabel("步数:0步");

JLabel isover=new JLabel("状态:未开始");

ImageIcon[] pic=null; //存放小方格图片

JButton btn[][]=null; //小方格控件

Rectangle p[][]=null; //小方格的位置与大小

public void init()

{

this.setTitle("拼图游戏");

this.setLayout(null);

this.setBounds(400,100,300,480);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

isover.setBounds(100,50,100,30);

lstep.setBounds(100,10,100,30);

this.add(isover);

this.add(lstep);

//菜单显示

this.setJMenuBar(menubar);

menubar.add(menu1);

menubar.add(menu2);

menubar.add(menu3);

menu1.add(jitem1);

menu1.add(jitem2);

menu2.add(jitem3);

menu2.add(jitem4);

menu3.add(jitem5);

jitem4.add(nandu1);

jitem4.add(nandu2);

nandu1.setSelected(true);//设置单选默认值为3*3

jitem2.addActionListener(this); //注册监听事件

jitem3.addActionListener(this); //注册监听事件

nandu1.addActionListener(this); //注册监听事件

nandu2.addActionListener(this); //注册监听事件

jitem1.addActionListener(this); //注册监听事件

jitem5.addActionListener(this); //注册监听事件

this.setV isible(true);

this.setResizable(false);//不能更改窗体大小

setpic();//图片分割必须放置窗体显示以后

}

//判断我们的图片是否拼图完整如果完成返回true 未完成返回false public boolean check()

{

boolean b=true;

for(int i=n;i<(m+1)*n;i++)

{

int x1=i/n,y1=i%n;

if(btn[x1][y1].getIcon()!=null&&btn[x1][y1].getIcon()==pic[i-n])

{

}

else

{

b=false;

}

}

return b;

}

//图片的放置

public void setpic()

{

isover.setText("状态:未开始");

step=0;

lstep.setText("步数:"+step+"步");

w=280/m;

h=280/n;

Image[] a=splitImage(filename,1,1,100,100); //缩放预览图

preimage=new ImageIcon(a[0]); //图片转换image=》IMageIcon

if(prebtn==null) //*如果存在,就不需要重新分配控件只需要更新图标

prebtn=new JButton(preimage);//把图片设置为JButton的图标

else

prebtn.setIcon(preimage);

prebtn.setBounds(200,5,100,100);

this.add(prebtn);

//图片分割

pic=new ImageIcon[m*n];//分配空间大小

if(btn==null) //*如果存在,就不需要重新分配控件只需要更新图标btn=new JButton[m+1][n]; //分配控件实例化

p=new Rectangle[m+1][n]; //坐标

Image[] t=splitImage(filename,m,n,w,h);//图片分割m*n个每个高度与宽度为w,h

for(int i=0;i<(m+1)*n;i++)

{

int x1=i/n,y1=i%n;//下标转换

if(btn[x1][y1]==null) //*如果存在,就不需要重新实例化控件

btn[x1][y1]=new JButton();//实例化每个控件

btn[x1][y1].setBounds(y1*w+5,x1*h+50,w,h);//控件坐标

btn[x1][y1].addActionListener(this);//添加事件

this.add(btn[x1][y1]);

}

for(int i=1;i

{

btn[0][i].removeActionListener(this);//第一行除了第一个以外,其他都不注册事件

btn[0][i].setVisible(false); //第一行除了第一个以外,其他都不显示}

int temp[]=randarray(m*n);

for(int i=0;i

{

pic[i]=new ImageIcon(t[i]); //图片转换image=》ImageIcon }

for(int i=0;i

{

btn[(i+n)/n][(i+n)%n].setIcon(pic[temp[i]]);//设置图标

}

btn[0][0].setBackground(Color.BLUE); //设置背景

btn[0][0].setIcon(null);

this.repaint(); //图片及时刷新

}

//图片方格随机产生一组随机序列数组,不能重复

public int[] randarray(int n)

{

int re[]=new int[n];

for(int i=0;i

re[i]=i;

for(int i=1;i

{

int t;

int a=(int)(Math.random()*(n-1)+1);//-1 +1是为了第一个数不使用随机数

t=re[i];

re[i]=re[a];

re[a]=t;

}

return re;

}

@Override

public void actionPerformed(ActionEvent e) {

if(e.getSource()==jitem5)//关于

{

JOptionPane.showMessageDialog(this,"四川师范大学成都学院开发实验室\n2010年12月12日");

return;

}

if(e.getSource()==nandu1)//难度选择

{

nandu1.setSelected(true);//更改单选菜单

nandu2.setSelected(false);

for(int i=0;i<(m+1)*n;i++)

{

int x1=i/n,y1=i%n;//下标转换

this.remove(btn[x1][y1]);//清除所有button控件

}

m=n=3;//重新设置难度

btn=null;//释放btn对象

setpic();

return;

}

if(e.getSource()==nandu2)

{

nandu2.setSelected(true);

nandu1.setSelected(false);

for(int i=0;i<(m+1)*n;i++)

{

int x1=i/n,y1=i%n;//下标转换

this.remove(btn[x1][y1]);//实例化每个控件

}

m=n=4;

btn=null;

setpic();

return;

}

if(e.getSource()==jitem1)//重新开始

{

for(int j=0;j<(m+1)*n;j++)

{

int x2=j/n,y2=j%n;//下标转换

btn[x2][y2].removeActionListener(this);//实例化每个控件}

setpic();

return;

}

if(e.getSource()==jitem2)

{

System.exit(0);

}

if(e.getSource()==jitem3)

{

FileDialog df=new FileDialog(this,"图片选择",FileDialog.LOAD);

df.setV isible(true);

if(df.getFile()==null)

return;

filename=df.getDirectory()+df.getFile();//文件路径+文件名

for(int j=0;j<(m+1)*n;j++)

{

int x2=j/n,y2=j%n;//下标转换

btn[x2][y2].removeActionListener(this);//实例化每个控件

}

setpic();

return;

}

for(int i=0;i<(m+1)*n;i++)//循环所有控件

{

int x1=i/n,y1=i%n;//下标转换

if(e.getSource()==btn[x1][y1])//如果点击了小方格

{

step++;

lstep.setText("步数:"+step+"步");

isover.setText("状态:已开始");

//向上移动

if(x1>0&&btn[x1-1][y1].isV isible()&&btn[x1-1][y1].getIcon()==null)

{

btn[x1-1][y1].setIcon(btn[x1][y1].getIcon());//获取当前图标给上一个控件为图标

btn[x1][y1].setIcon(null);//当前图标设置为空

}

//向下移动

if(x1

{

btn[x1+1][y1].setIcon(btn[x1][y1].getIcon());//获取当前图标给下一个控件为图标

btn[x1][y1].setIcon(null);//当前图标设置为空

}

//向左移动

if(y1>0&&btn[x1][y1-1].isV isible()&&btn[x1][y1-1].getIcon()==null)

{

btn[x1][y1-1].setIcon(btn[x1][y1].getIcon());//获取当前图标给左一个控件为图标

btn[x1][y1].setIcon(null);//当前图标设置为空

}

//向右移动

if(y1

{

btn[x1][y1+1].setIcon(btn[x1][y1].getIcon());//获取当前图标给右一个控件为图标

btn[x1][y1].setIcon(null);//当前图标设置为空

}

btn[x1][y1].setBackground(Color.BLUE);

if(check())

{

isover.setText("状态:已完成");

for(int j=0;j<(m+1)*n;j++)

{

int x2=j/n,y2=j%n;//下标转换

btn[x2][y2].removeActionListener(this);//完成以后清除所有的监听

}

}

}

}

}

// 图片分割方法

public Image[] splitImage(String file, int rows, int cols) {

Image t = new ImageIcon(file).getImage();

int w = t.getWidth(this) / cols;

int h = t.getHeight(this) / rows;

return splitImage(t, rows, cols, w, h);

}

public Image[] splitImage(String file, int rows, int cols, int w, int h) {

Image t = new ImageIcon(file).getImage();

return splitImage(t, rows, cols, w, h);

}

public Image[] splitImage(Image t, int rows, int cols, int w, int h) {

Image[] result = new Image[rows * cols];

try {

for (int i = 0; i < result.length; i++) {

result[i] = createImage(w, h);

Graphics g = result[i].getGraphics();

g.translate((-i % cols) * w, (-i / cols) * h);

g.drawImage(t, 0, 0, w * cols, rows * h, 0, 0,

t.getWidth(this), t.getHeight(this), this);

}

} catch (Exception e) {

}

return result;

}

}

Play.java(class)

public class Play {

/**

* @param args

*/

public static void main(String[] args) {

Pintu p= new Pintu();

p.init();

}

}

拼图游戏开发总结报告

拼图游戏开发总结报告 1.引言 (1) 1.1编写目的 (1) 1.2项目背景 (1) 1.3定义 (1) 1.4参考资料 (2) 2.开发结果 (2) 2.1产品 (2) 2.2主要功能及性能 (5) 2.3所用工时 (5) 2.4所用机时 (5) 2.5进度 (5) 2.6费用 (6) 3.评价 (6) 3.1生产率评价 (6) 3.2技术方案评价 (6) 3.3产品质量评价 (6) 4.经验与教训 (6) 1.引言 1.1编写目的 本报告为拼图游戏的开发总结报告,目的在于总结项目开发,描述系统是否符合需求。预期参考人员包括用户、测试人员、、开发人员、项目管理者、其他质量管理人员和需要阅读本报告的高层经理。 1.2项目背景 【说明项目来源、委托单位、开发单位及主管部门。】 1.3定义 【列出报告用到的专门术语的定义和缩写词的原文。】

1.4参考资料 【列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括: a.项目经核准的计划任务书、合同或上级机关的批文; b.项目开发计划; c.需求规格说明书; d.概要设计说明书; e.详细设计说明书; f.用户操作手册; g.测试计划; h.测试分析报告; i.本报告引用的其他资料、采用的开发标准或开发规范。】 2.开发结果 2.1产品 程序名称:PuzzleGame 目标程序字节数:52k 程序总数:20个 产品文档名称:需求分析、软件总体设计、软件单元测试计划、软件测试报告 产品截图如下:

2.2主要功能及性能 2.3所用工时 14个工作日 2.4所用机时 【按所用计算机机型分别计时。】 2.5进度 与实际进度对比有所延迟,因为时间太分散,效率有点低

Java课程设计——拼图游戏

拼图游戏 1.游戏规则介绍 (1)本游戏中有一个格子是空的,其他格子内随机放置由要拿来拼图切割成的8个小图片。在开始游戏之前,会出现一张完整的图片,点击“菜单”里面的“开始”, 进行拼图游戏,通过将空格旁边的小图片与空格交换位置(不断的移动方块), 来实线拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。在 移动过程中,窗口右边会显示移动的步数。 (2)游戏拼完后,会弹出一个信息框,询问是否再玩一局,点击“Yes”将再打开一个游戏开始的界面,可以继续新的一局游戏,点击“No”将结束游戏,关闭所有窗 口。 2.游戏实现的功能 (1)点击运行程序,将弹出一个窗口,显示一张完整的图片。 (2)菜单栏的菜单,会出现3个菜单项:“开始”、“重新开始”、“结束”。 点击“开始”,即开始一局游戏;“在游戏的任何时候点击”重新开始“,即结束 当前游戏,重新开始一局新的游戏;点击“退出“,立即退出游戏,关闭窗口。 (3)在游戏过程中,游戏界面右边会同步显示当前的步数。 游戏的一些界面: (1)主界面: (2)菜单项:

(3)帮助--->关于 (4)点击开始 (5)游戏过程 (6)游戏成功

(7)破纪录 3.程序实现 Pt类: (1)建立一个类Pt,public class Pt extends JFrame implements KeyListener{}。该类继承父类JFrame,实现KeyListener接口。 (2)Pt类的构造函数Pt()。定义窗口参数,添加菜单栏和多个标签;调用读文件函数read (),读取该游戏的最高记录,并将该记录输出到标签上;为各个菜单添加事件,鼠标点击“开

数字拼图游戏

安徽新华学院计科软件测试方法和技术 课程设计任务书 一、设计题目:数字拼图游戏(出题人:於世芳) 说明:一个拼图游戏。 二、目的与要求 1.目的 培养学生综合利用JAVA语言进行程序设计的能力,主要是培养学生利用JAVA的标准控件进行应用程序设计的技能。 2.基本要求 ?能够实现拼图功能。 ?可以通过初始化任意次的重新游戏。 ?游戏完成后做出相应提示. 3.创新要求 在基本要求达到后,可以参考其他拼图游戏,进行创新设计,创新方向提示如下: ★将数字换成图片。 ★可以记录游戏者成绩并排行 ★增加暂停功能或窗口最小化时暂停计时。 三、设计方法和基本原理 1.问题描述 程序界面见题图。 2.问题的解决方案 ①设计程序界面 因为用的全是基本控件,界面设计没有什么难度,这里涉及到动态添加控件数组,可参见课本控件数组一节内容。 ②编写代码 代码包括事件处理过程和功能函数,还有必要的声明。变量声明部分声明本程序所需要的变量和数组。

事件处理包括下面的主要事件: Form_Load() 作一些初始化的工作。主要是设定初始等级,动态添加控件数组。 Private Static Sub cmdButton_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 游戏运行。 cmd_Click( ) 游戏初始化 其它功能的处理不再一一描述了 四、主要技术问题的描述 虽然界面操作有些复杂,但难点显然并不在于此。下面是初始化设置中的一段程序:package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.events.Event; import flash.text.TextField; //import mx.controls.Alert; public class Main extends Sprite{ var arr:Array=new Array(1,2,3,4,5,6,7,8); var ditu:Array=new Array(new Array(3),new Array(3),new Array(3)); var pailie:Array=new Array(new Array(0,0),new Array(40,0),new Array(80,0), new Array(0,40),new Array(40,40),new Array(80,40), new Array(0,80),new Array(40,80),new Array(80,80));

MFC课程设计之拼图游戏设计报告

拼图游戏 实验报告 一、实验目的

1、通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。 2、通过实践进一步领会程序设计的特点和应用,提高运用C++ 以及面向对象知识解决实际问题的能力,初步掌握MFC变成的基本功能。 3、通过实践掌握用C++ 编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力,为后续的相关课程的学习打下基础。 二、小组分工 为了发挥组内同学的各自特长,我们小组分工如下: 1、苏嘉彬——前期进行系统需求分析,系统结构设计,完成拼图界面的设计工作, 后期完成课程设计报告 2、嵇鹏飞(组长)——完成主要程序的编写工作(图形分割、存储、拼图) 3、依代吐力·艾尼——搜集资料,完成计时器的设计工作,软件接口的设计及测 试 三、程序设计思路 1、初步方案讨论 拼图游戏是同学们喜欢的益智游戏之一,带着浓厚的兴趣,我们选择拼图游戏设计 作为我们小组本次MFC课程设计的课题。在讨论中,有的同学希望用单文档(SDI) 的形式完成本次设计,有的同学则偏向于用对话框(Dialogue)的形式,最终我们小组 讨论决定最终的设计采用对话框形式实现拼图功能。 2、方案变更、疑难解决 (1)最初我们决定采用对话框形式来实现拼图的基本功能,但是在实施过程中出 现了几次很严重的错误:Debug Assertion Failed,缺少ivewers.dll文件等等,在最后的 尝试中我们发现如果采用单文档(SDI)形式写拼图的话,可以实现最基本的功能,因 此我们最终决定使用单文档来完成该课程设计。 (2)一开始我们讨论决定采用的方式是将位图读入后再进行图片的分割,而在实 际的操作过程中由于图片的分割有一定的困难,因此我们最后采用的方式是将位图进行 分割完毕后再逐个用Brush在指定位置上进行绘画,实现图形的分割。 3、系统需求分析 (1)系统功能 简单的拼图游戏应该有拼图、计时、判断拼图成功、游戏者用时统计排名等功能, 拼图内部还应该有难度选择、相邻拼图块自动拼图等功能。图1所示是拼图游戏的用例 图,表明拼图游戏的主要功能。 图1 (

java课程设计-拼图游戏代码

package love; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; public class Games extends JFrame implements ActionListener { private JButton buttons[][];// 存储按键的数组 private Container container;// 一个容器 private GridLayout layout;// 布局方式为GridLayout private int count = 0, is[] = new int[8];// count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组 public Games() { super("拼图游戏");// 设置标题 layout = new GridLayout(3, 3);// 3行3列 container = getContentPane();// 该容器的布局方式,及其重要,否则产生空引用异常 container.setLayout(layout);// 将该布局方式作用于容器 buttons = new JButton[3][3];// 给按键数组分配储存空间 int locate1, locate2;// locate1用来指示当前产生的元素 locate2用来指示locate1之前的元素 for (locate1 = 0; locate1 < 8; locate1++) {// 该方法作用是产生1到8这8个数,随机分配给数组,即无序排列 int g = new Random().nextInt(8) + 1;// 随机产生一个空白按键,即不显示的那个 is[locate1] = g; for (locate2 = locate1 - 1; 0 <= locate2; locate2--) { if (is[locate1] == is[locate2]) break; } if (locate2 != -1) locate1--; } int temp = 0; int r = new Random().nextInt(3);// 随机产生一个0到3的数,代表空白按键的行 int l = new Random().nextInt(3);// 随机产生一个0到3的数,代表空白按键的列 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) {

java拼图游戏面向对象课程设计报告

姓名Name 学号 Student No. 20137045 班级 Class 代码总行数Code Lines 222 项目名称 Item 1.实验目的 本次课程设计旨在通过一个完整项目的开发,巩固面向对象程序设计、软件工程、数据库技术等课程的相关知识,加深学生对Java语言的理解,尤其是对面向对象思想、Java编码规范、JDBC访问数据库的理解,使学生进一步掌握环境构建、代码编写、文档阅读与理解、文档编写、软件测试、发行与部署等技能,进一步提高学生的学习能力、理解能力、表达能力及沟通能力。 2.实验内容 本次课程设计选定的实验项目是使用JAVA语言编写一个拼图游戏并实现其基本功能。不用自己手动切割图片,再进行加载。而是应用类方法在内存中进行图片切割和加载,方便了用户的使用。 利用了Graphics中的public abstract boolean drawImage()方法把img 中由(sx1, sy1)(sx2, sy2)指定的矩形区域画到observer 中由(dx1, dy1)(dx2, dy2)指定的矩形区域内进行构思拼图游戏的具体实现。 导入了一个可播放背景音乐的jar包,在玩游戏时可以欣赏背景音乐。 3.类图

4.运行界面

图1、游戏初始界面 图2、游戏运行界面

图3、拼图成功界面 5.关键代码(要求在类的定义以及方法定义的前面给出相关描述信息)//定义一个Pintu类 public class Jpgsaw extends JFrame{

private Image image, buff; //原始图片,缓存图片 private int[][] map = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8} }; //定义数组map,给分割后的图片标号 private Point point = new Point(2, 2); //记录第九块图片位置 private int sx; //分割后每一个图片的宽度 private int sy; //分割后每一个图片的高度 private Canvas canvas; //加载图片容器,定义可以显式定位子元素使用坐标是相对 Canvas 区域的区域,绘制图形 private Graphics gs; //gs画出Canvas图片坐标 private Graphics gb; //gb画出buff图像 private boolean isRunning = false; //游戏是否正在进行 private JButton start = new JButton("开始新的游戏"); // 按钮1 private JButton show = new JButton("显示正确图片"); //按钮2 private JTextArea showStep = new JTextArea("显示步骤");//设置步骤显示 private JPanel panel = new JPanel(); //一般轻量级面板容器,装在上面2个按钮 private int steps = 0; // 记录移动的步骤 public Jpgsaw(String title) { //构造方法,初始化变量 super(title);//调用了当前类Jpgsaw的父类JFrame的构造方法 try { //异常抛出 image = ImageIO.read(new File("gg.jpg")); //装载图片 } catch (IOException e) {//捕获自定义的异常 e.printStackTrace(); } initScreen(); //用此方法来初始化canvas,由于canvas 初始化较复杂,所以单独写一个方法 buff = new BufferedImage(715, 381, BufferedImage.TYPE_INT_BGR);//Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片 gb = buff.getGraphics();//存在于Image类中,存在于缓冲器中的图片,设置坐标 sx = image.getWidth(this) / 3;//图片分割后每一个图片的宽度 sy = image.getHeight(this) / 3;//图片分割后每一个图片的高度 setLayout(new BorderLayout());//设置此布局方法,加入控件 add(panel, BorderLayout.SOUTH);//布置容器的边框布局,它可以对容器组件进行安排,并调整其大小 add(canvas, BorderLayout.CENTER); panel.setLayout(new GridLayout(1, 4));//把组件按指定的几行几列分开,添加其他组件时,会按添加的顺序挨个添加到该组件上 panel.add(start); panel.add(show); panel.add(showStep); showStep.setEditable(false);//步骤默认false,使调用这个函数的控件不能被编辑 showStep.setFont(new Font("黑体", Font.PLAIN, 16));//设置字体

Java语言实现拼图游戏源代码

Java语言实现拼图游戏源代码 /* * JA V A小游戏-拼图我做的第一个小游戏 * Cell类是继承的按钮类,并加上相应图形,形成方格 *MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心*/ import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Choice; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Icon; import javax.swing.JButton; public class MyMainFrame extends JFrame implements ActionListener { MyCanvas myCanvas; JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板Button start,preview,set;//定义开始,预览,设定按钮 Container container;//容器,得到内容面板 public MyMainFrame() {//初使化 container=this.getContentPane(); start=new Button("开始"); start.addActionListener(this); preview=new Button("预览");

java拼图游戏图片插入与分割

public static void cut(String srcImageFile, String descDir, int destWidth, int destHeight) { try { Image img; ImageFilter cropFilter; // 读取源图像 BufferedImage bi = ImageIO.read(new File(srcImageFile)); int srcWidth = bi.getHeight(); // 源图宽度 int srcHeight = bi.getWidth(); // 源图高度 if (srcWidth > destWidth && srcHeight > destHeight) { Image image = bi.getScaledInstance(srcWidth, srcHeight, Image.SCALE_DEFAULT); destWidth = 200; // 切片宽度 destHeight = 150; // 切片高度 int cols = 0; // 切片横向数量 int rows = 0; // 切片纵向数量 // 计算切片的横向和纵向数量 if (srcWidth % destWidth == 0) { cols = srcWidth / destWidth; } else { cols = (int) Math.floor(srcWidth / destWidth) + 1; } if (srcHeight % destHeight == 0) { rows = srcHeight / destHeight; } else { rows = (int) Math.floor(srcHeight / destHeight) + 1; } // 循环建立切片 // 改进的想法:是否可用多线程加快切割速度 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { // 四个参数分别为图像起点坐标和宽高 // 即: CropImageFilter(int x,int y,int width,int height) cropFilter = new CropImageFilter(j * 200, i * 150, destWidth, destHeight); img = Toolkit.getDefaultToolkit().createImage( new FilteredImageSource(image.getSource(), cropFilter)); BufferedImage tag = new BufferedImage(destWidth, destHeight, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(img, 0, 0, null); // 绘制缩小后的图 g.dispose(); // 输出为文件

VB制作拼图游戏

《VB制作拼图游戏:简单算法》1、首先按照截图把控件添加好! (技巧:PS处理322*322的图片,划分切块,形成九个小图片,这里采用的是Jpg格式,然后采用Command按钮来显示这些图片,同学们也可以采用Label,是一样的,重点是鼠标单击事件!注意:添加九个Command按钮,一定要设置每个按钮的Height、Width、Top、Left值来完成对图片的吻合拼接,这样可以使界面看起来美观大方!) 2、界面的设计 这里很多同学习惯更改Command的Caption值来显示某些文本,但要注意,你

这里很可能为了美观会使用自己机子上单独安装的某些字体,这些字体拿到其他机子上是不生效的,那么怎么办呢?这里有个比较“笨拙的方法”——你可以利用Word工具打好想要显示的文本,设置个性字体,然后截图,插入到Command上面,这样的话,无论是什么字体,都可以显示了,因为图片的属性是无法更改的!这个方法同样可以用来美化Label!当然了,自己究竟怎么样设计,就靠想象力了,最终得到的效果是要有一个美观、简洁大方的界面! 3、算法设计(全部代码) Dim Num As Integer Private Sub Command1_Click() If Command2.Picture = Command11.Picture Then Command2.Picture = Command1.Picture Command1.Picture = Command11.Picture End If If Command4.Picture = Command11.Picture Then Command4.Picture = Command1.Picture Command1.Picture = Command11.Picture End If End Sub Private Sub Command11_Click() MsgBox ("开发者:孔世明" & vbCrLf & "学院:信息科学与技术学院" & vbCrLf & "专业:

VB课程设计报告--拼图游戏

VB课程设计报告 —拼图游戏 知识点:控件数组,公共对话框控件,PictureClip控件,多模块程序设计,图片的应用。 1.题目介绍 “拼图”是一种老少皆宜、容易上手的益智类小游戏,本题目要求编制一个拼图游戏程序。使用方法如下: (1)指定一幅图片,将其分割成m × n 个小图块并且打乱顺序后重新排列,其中有一块没有图块的“空挡”。 (2)使用鼠标单击与空挡相邻的图块使该图块与空挡的位置互换。(3)利用空挡位置移动各图块,最终恢复图片原貌,完成拼图。移动的步数越少则说明游戏者的水平越高。游戏过程中,可以打开参考图帮助找到正确的位置。 2.功能要求 (1)运行程序,在进入游戏之前显示一个背景图片。 (2)选择菜单中的“打开图片”命令,显示打开图片对话框,“打开图片”对话框使用公共对话框控件实现,并且只能指定以*.jpg *.bmp 为扩展名的文件。可以在查看菜单中选着“缩略图”进行预览。(3)选择图片之后,程序弹出“指定行列数”对话框,提示将图片分几行几列。使用微调按钮可以调节行数和列数,限制在3-7之间。(4)指定行列数之后,单击确定返回主窗口,程序自动按照指定的

行列数将图片进分割,然后随机排列。 (5)打乱的图片中一空挡位置,用户单击与空挡相邻的图块可以与其互换位置。点击了空挡或者与其不相邻的,程序不做任何操作。原图只少右下角的图块。 (6)图片复原时,程序显示消息框表示祝贺,同时显示游戏共使用的步数。 (7)游戏过程中,如果用户希望参考原图,可以单击“显示原图”按钮,打开“参考图”窗口。 (8)窗体中的背景颜色可以改变,从菜单中选择“背景颜色”命令,弹出“颜色”飞、公共对话框,用户从中选择一颜色即可。 (9)在游戏过程中或在完成后,均可退出程序或选择“打开图片”菜单命令重新开始一个新图片。 (10)“参考图”窗口应是一个非模态窗口,在关闭主窗口时同时卸载,而不是隐藏,否则该程序不会完全关闭,仍会驻留内存。 3.程序设计 概述:(1)PictureClip 控件来管理打开图片并将其分为指定的行列图块,其Picture、Rows、Cols等属性值应在程序中设定。 (2)使用image控件数组来显示图块,设计时只需在窗体上放置一个image控件并将其的index设为0 ,其他的用load语句加载。 (3)“打开图片”和“颜色”对话框commondialog控件实现。设置其filter属性使之只能打开bmp和jpg类型的图片文件。 (4)将image控件的stretch属性设计为TRUE。

java拼图游戏代码

Puzzle类: package com.eavan; public class Puzzle { public static void main(String[] args) { // TODO Auto-generated method stub new PuzzleWin(); } } PuzzleWin类: /** * 可以为游戏添加一个计时的功能,让时间成为一个判定标准* 可以分析一下为什么图片不清楚 * 可以向怎么能够让选择图片和选择难度没有顺序性(较容易)* */ package com.eavan; import java.awt.Color; import java.awt.FileDialog; import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; import java.awt.GridLayout; import java.awt.HeadlessException; import java.awt.Image; import java.awt.Transparency; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.Random; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

数字排序拼图游戏

数字排序拼图游戏 【摘要】:Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。 【关键字】:Java;发展;程序设计 一引言 现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,以适应社会的发展,能够独立完成面临的任务,作为一名有创新意识的新型人才。 拼图游戏是广受欢迎的一种智力游戏,它的变化多端,难度不一,让人百玩不厌。个性化的拼图,拼凑的不仅仅是一张照片,而是一个故事,一段回忆,一缕温情。每一片的单片都有它自己的位置,就像每段回忆都有它的故事,你要将它放在专属的地方,放对了就慢慢丰富起来,放错了就无法完整。 二设计大作业的目的与要求 1.1 设计目的 JSP/JAVA是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JSP/JAVA课程后,进行的一次全面的综合训练,JAVA程序的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

QT拼图实验报告

拼图游戏 1. 文档介绍 本文档主要介绍了一个简单的拼图游戏的开发过程 2. 系统概述 就是一个简单的拼图游戏,将一幅图片随机打散,然后拼出原图,很简单,也没有加入时间限制,只是一个拼图游戏的核心。 3. 设计约束 本软件是用Qt开发出来的,Qt一个c++的gui类库,可以跨多种操作系统平台。除了Qt库,还用到的就是标准的c程序库,各个系统中的开发环境也都有。基于这两点,所以我开发出来的拼图游戏可以跨平台移植而不用修改代码,直接在目标平台上再重新编译一下就行了。另外,我开发的只是一个拼图游戏的核心。有很强的可扩展性,可以根据不同的需要而加入代码进行定制。拼图中用到的图像分割和随机打散算法都是比较高效的。鼠标点击图像块进行图像的交换,非常易用,对用户来说,非常清晰。 4. 开发与运行环境 ●操作系统:Windows7 32位旗舰版Service Pack 1 ●处理器:Pentium(R) Dual-Core CPU E6300 @ 2.8GHz 2.8GHz ●安装内存(RAM): 2.00GB ●编译器:minGW移植到windows下的gcc编译器 ●调试器:minGW移植到windows下的gdb调试器 ●Make:minGW中的mingw32-make ●Qt C++ GUI库 ●软件开发成功后拿到windowx xp和其他windows 7下运行毫无问题。

5. 软件的总体结构图 图1 程序总流程图

5.1 随机打散图片 图2 随机打散图片

5.2 拼图流程 图3 拼图流程

6. 功能模块设计 对于一个拼图游戏的核心来说,主要的模块就是图片的随机打散模块和拼图模块。我将屏幕窗口分成9块,如下图所示: 图4 屏幕窗口 6.1 图像随机分割 我们将图像也分成和屏幕窗口一样的9块,如下图所示: 图5 图像分割 在Qt中,视口是物理坐标系下指定的任意矩形,窗口指的是同一矩形,只不过是逻辑坐标系下的。我们先将视口设置成屏幕上的一块,然后窗口设置成一块大小和一块图像的大小一样的矩形,我们将一块图像绘制到窗口中,经过窗口-视口变换后就绘制到了视口所对应的屏幕上。

java拼图游戏设计报告

《Web程序开发》课程 大作业 拼图游戏 3011212046 张杰 2014.11

一、题目说明 拼图游戏不仅可以帮助人们打发时间,还可以用于锻炼儿童脑力,帮助少儿开发大脑思维,拼图游戏结合了许多元素,可以图片切割,游戏拼图,游戏成功时和打破记录时的判断,同时还有游戏时间和步数的记录,并以文档形式进行保存。在拼图时首先把图片添加到background目录下,程序会自动获取该目录下的所有文件,并加载到游戏中,进行切割后,显示在拼图按钮上。 本游戏使用Java语言设计,开发平台为JDK。开发工具Eclipse。JDK是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。 二、题意分析 因为要制作拼图游戏,所以首先要实现图片的导入。这是通过getImage()函数来实现的,该函数有两个参数,第一个参数指明图片的路径,第二个参数指明图片的名称。然后,因为要实现图片摆放的随意性,所以要通过initgame()函数来实现。Initgame()函数是自写函数,在函数体内,通过调用Math.random()函数产生随机数,用来达到图片位置摆放的随意性和随机性。最后,因为要实现人机交互.,所以首先要通过一系列函数来实现对鼠标事件的监听和响应,这是通过函数addMouseListener(this) 和addMouseMotionListener(this)来完成的。这样程序会区分用户对鼠标不同的操作,正确执行相应的功能。 游戏操作流程: 开始游戏 操作游戏 游戏完成

拼图游戏C#代码

声明:本游戏由14477-Ly所写,可以转载,须说明出处 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { public static int x1, y1;//定义两个数用来移动数组作为参考坐标 static int[,] ss = new int[20, 20];//定义一个静态二维数组做为参考数组 static int[,] sss = new int[20, 20];//定义一个静态二维数组做为移动数组 static bool pan = false;//判断真假值用于程序跳出 static int iii = 0;//用于统计步数 static int[,]paixu=new int[20,20];//用来存储对应难度的排行榜 static int[] tongjishuzu = { 0,0,0,0,0,0,0};//统计各难度的排行 static bool yanse11 = false;//用来判断是否产生随机背景颜色 static bool yanselll = false;//用来判断是否产生随机字体颜色 ///

/// 对数组进行排序 /// /// /// public static void paixushuzu(int x,int nandu)//用直接选择排序方式对排行榜进行排序 { if (x > 10) x = 10; for (int i = 1; i < x; i++)//用直接选择排序方式对排行榜进行排序 { int b = 0; for (int j = 0; j <= x - i; j++) { if (paixu[nandu - 3, j] >= paixu[nandu - 3, b]) b = j; else continue; } int h; h = paixu[nandu - 3, b]; paixu[nandu - 3, b] = paixu[nandu - 3, x - i]; paixu[nandu - 3, x - i] = h; }

Flash拼图游戏制作课程设计报告

目录 第1章需求分析 (1) 1.1 引言 (1) 1.2 课程设计题目 (1) 1.3 课程设计目的 (1) 1.4 程序运行环境及开发工具 (1) 1.5 课程设计任务及要求 (1) 第2章概要设计 (2) 2.1 设计原理及方法 (2) 第3章详细设计 (3) 3.1 第一步: (3) 3.2 第二步: (3) 3.3 第三步 (4) 3.4 第四步 (5) 3.5 第五步 (5) 3.6 第六步 (6) 3.7 第七步 (7) 3.8 第八步 (8) 3.9 第九步 (8) 3.10 第十步 (9) 3.11 第十一步 (9) 3.12 第十二步 (10) 3.13 第十三步 (10) 3.14 第十四步 (11) 第4章系统调试与运行结果 (13) 4.1 系统调试 (13) 4.2 运行结果 (14) 第5章总结与体会 (15) 参考文献: (15)

第1章需求分析 1.1 引言 FLASH作为一款目前最流行的网络动画制作软件,恐怕不知道的人少之又少。其实FLASH强大的功能不光能让我们轻松制作动画,我们还可以利用它完成一些意想不到的工作。比如说是拼图游戏,在这个领域应用非常广泛!而且可以制作各种丰富有趣的小游戏来,是非常的有趣的! 1.2 课程设计题目 拼图游戏设计 1.3 课程设计目的 本课程的设计的目的是通过实践使同学们经历多媒体应用系统开发的全过程和受到一次综合训练,以便能较全面地理解、掌握和综合运用所学的知识。结合具体的案例,理解并初步掌握常用多媒体软件的使用,利用多媒体计算机等设备进行音频与视频数据的获取和处理、图像处理与图像文件格式转换、超文本超媒体在交互式多媒体软件的应用;通过《多媒体课程设计》实验,使学生能够达到提高多媒体技术的实际开发应用能力,了解系统分析、系统设计、系统实施的主要环节和步骤以及软件文档的制作过程。 1.4 程序运行环境及开发工具 硬件:PC机一台 软件:Windows 7,PhotoshopCS4,Flash8 1.5 课程设计任务及要求 设计“拼图游戏”,游戏是Flash制作中很重要的一部分,主要应用的是flash内

java语言实现拼图游戏源代码

java语言实现拼图游戏源代码 Java语言实现拼图游戏源代码 /* * JAVA小游戏,拼图我做的第一个小游戏 * Cell类是继承的按钮类,并加上相应图形,形成方格 *MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心 */ import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Choice; import java.awt.Color; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.Icon; import javax.swing.JButton; public class MyMainFrame extends JFrame implements ActionListener { MyCanvas myCanvas; JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板 Button start,preview,set;//定义开始,预览,设定按钮

java拼图游戏完整代码

// Cell.java package cn.itcast.picture.ui; import javax.swing.Icon; import javax.swing.JButton; /* * 图片小方格类 */ public class Cell extends JButton { //带有图片的小方格 public Cell(Icon icon) { super(icon); //设置小方格大小 this.setSize(150, 150); } //带有图片和文字的小方格 public Cell(String text, Icon icon) { super(text, icon); //设置小方格大小 this.setSize(150, 150); this.setHorizontalTextPosition(CENTER);//设置文字水平居中显示 this.setVerticalTextPosition(CENTER);//设置文字垂直居中显示 } // public void move(String direction) { switch (direction) { case "UP": this.setLocation(this.getBounds().x,this.getBounds().y-150); break; case "DOWN": this.setLocation(this.getBounds().x,this.getBounds().y+150); break; case "LEFT": this.setLocation(this.getBounds().x-150,this.getBounds().y); break; case "RIGHT": this.setLocation(this.getBounds().x+150,this.getBounds().y);

相关主题
文本预览
相关文档 最新文档