拼图软件java源代码 拼图代码总结

1200分跪求JAVA数字拼图游戏源代码!

1:

10年的怀远网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整怀远建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“怀远网站设计”,“怀远网站推广”以来,每个客户项目都认真落实执行。

import java.io.IOException;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.UnsupportedAudioFileException;

// 华容道原理的拼图游戏。 利用轻组建的套用。

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;

public class MyMainFrame extends JFrame implements ActionListener {

/**

*

*/

private static final long serialVersionUID = 1L;

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("预览");

preview.addActionListener(this);

set = new Button("设置");

set.addActionListener(this);

panelPreview=new JPanel();

panelPreview.setLayout(null);

Icon icon=new ImageIcon ("images/pic_"+MyCanvas.pictureID+".jpg");

JLabel label=new JLabel(icon);

label.setBounds(0,0,400,400);

panelPreview.add(label);

panelNorth=new JPanel();

panelNorth.setBackground(Color.yellow);

panelNorth.add(start);

panelNorth.add(preview);

panelNorth.add(set);

myCanvas=new MyCanvas();

container.add(myCanvas,BorderLayout.CENTER);

container.add(panelNorth,BorderLayout.NORTH);

this.setTitle("成型拼图小游戏-1212");

this.setLocation(300,200);

this.setSize(408,465);

this.setResizable(false);

this.setVisible(true);

this.setDefaultCloseOperation(3);

} //end of 初始化 构造函数

public void actionPerformed(ActionEvent e) {

Button button=(Button)e.getSource();

if(button==start){

myCanvas.Start();

}else if(button==preview){

if(button.getLabel()=="预览"){

container.remove(myCanvas);

container.add(panelPreview);

panelPreview.updateUI();

container.repaint();

button.setLabel("返回");

}else{

container.remove(panelPreview);

container.add(myCanvas);

container.repaint();

button.setLabel("预览");

}

}else if(button==set){

Choice pic = new Choice();

//pic.add("QQ");

pic.add("美女");

int i=JOptionPane.showConfirmDialog(this,pic,"选择图片", JOptionPane.OK_CANCEL_OPTION);

//使用选择对话框来进行选择图片。

if(i==JOptionPane.YES_OPTION){

MyCanvas.pictureID=pic.getSelectedIndex()+5;

myCanvas.reLoadPictrue();

Icon icon=new ImageIcon("images/pic_"+MyCanvas.pictureID+".jpg");

JLabel label=new JLabel(icon);

label.setBounds(0,0,400,400);

panelPreview.removeAll();

panelPreview.add(label);

panelPreview.repaint();

}

}

}

public static void main(String[] args) throws UnsupportedAudioFileException, LineUnavailableException, IOException

{

new MyMainFrame();

} //end of main

}

2:

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;

public class MyCanvas extends JPanel implements MouseListener

{

/**

*

*/

private static final long serialVersionUID = 1L;

boolean hasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件

Cell cell[];//定义方格

Rectangle cellNull;//定义空方格区域 是一个矩形类

public static int pictureID=4;// 当前选择的图片代号

public MyCanvas() {

this.setLayout(null);

this.setSize(400,400);

cellNull=new Rectangle(300,300,100,100);//空方格区域在第三行每三列

cell=new Cell[16];

Icon icon;

for (int i = 0; i 4; i++) {

for(int j=0;j4;j++){

icon=new ImageIcon("images/pic_"+pictureID+"_"+(i*4+j+1)+".jpg");

cell[i*4+j]=new Cell(icon);

cell[i*4+j].setLocation(j*100,i*100);

this.add(cell[i*4+j]);

}

}

this.remove(cell[15]);//移除最后一个多余的方格

} //放置9张小图片并且移调最后一张

public void reLoadPictrue(){//当选择其它图形进行拼图时,需重新加载新图片

Icon icon;

for (int i = 0; i 4; i++) {

for(int j=0;j4;j++){

icon=new ImageIcon("images/pic_"+pictureID+"_"+(i*4+j+1)+".jpg");

cell[i*4+j].setIcon(icon);

}

}

}

public boolean isFinish(){//判断是否拼合成功

for(int i=0;i15;i++)

{ int x=cell[i].getBounds().x;

int y=cell[i].getBounds().y;

if(y/100*4+x/100!=i)

return false;

} //end of for

return true;

}

public void Start(){//对方格进行重新排列,打乱顺序

while(cell[0].getBounds().x=100cell[0].getBounds().y=100){//当第一个方格距左上角较近时

int x=cellNull.getBounds().x;

int y=cellNull.getBounds().y;

int direction=(int)(Math.random()*4);//产生0-4,对应空方格的上下左右移动

if(direction==0){//空方格左移动,与左侧方格互换位置,左侧方格右移动

x-=100;

if(test(x,y)){

for(int j=0;j15;j++){

if((cell[j].getBounds().x==x)(cell[j].getBounds().y==y)){//依次寻找左侧的按钮

cell[j].move("RIGHT",100);

cellNull.setLocation(x,y);

break;//找到后跳出for循环

}

}

}

}else if(direction==1){//RIGHT

x+=100;

if(test(x,y)){

for(int j=0;j15;j++){

if((cell[j].getBounds().x==x)(cell[j].getBounds().y==y)){

cell[j].move("LEFT",100);

cellNull.setLocation(x,y);

break;

}

}

}

}else if(direction==2){//UP

y-=100;

if(test(x,y)){

for(int j=0;j15;j++){

if((cell[j].getBounds().x==x)(cell[j].getBounds().y==y)){

cell[j].move("DOWN",100);

cellNull.setLocation(x,y);

break;

}

}

}

}else{//DOWN

y+=100;

if(test(x,y)){

for(int j=0;j15;j++){

if((cell[j].getBounds().x==x)(cell[j].getBounds().y==y)){

cell[j].move("UP",100);

cellNull.setLocation(x,y);

break;

}

}

}

}

}

if(!hasAddActionListener)//如果尚未添加动作事件,则添加

for(int i=0;i15;i++)//为第个方格添加动作事件,这样单击按钮就能移动了

cell[i].addMouseListener(this);

hasAddActionListener=true;

}

private boolean test(int x,int y){

if((x=0x=200)||(y=0y=200))

return true;

else

return false;

}

public void mouseClicked(MouseEvent e) { }

public void mouseEntered(MouseEvent e) { }

public void mouseExited(MouseEvent e) { }

public void mouseReleased(MouseEvent e) { }

public void mousePressed(MouseEvent e) {

//方格的鼠标事件,因为用到了MyCanvas中的一些方法,因此没有在Cell类中处理鼠标事件

Cell button=(Cell)e.getSource();

int x1=button.getBounds().x;//得到所单击方格的坐标

int y1=button.getBounds().y;

int x2=cellNull.getBounds().x;//得到空方格的坐标

int y2=cellNull.getBounds().y;

if(x1==x2y1-y2==100)//进行比较,如果满足条件则进行交换

button.move("UP",100);

else if(x1==x2y1-y2==-100)

button.move("DOWN",100);

else if(x1-x2==100y1==y2)

button.move("LEFT",100);

else if(x1-x2==-100y1==y2)

button.move("RIGHT",100);

else

return;//不满足就不进行任何处理

cellNull.setLocation(x1,y1);

this.repaint();

if(this.isFinish()){//进行是否完成的判断

JOptionPane.showMessageDialog(this,"景锋恭喜你完成拼图,加油!想继续下一关么?");

for(int i=0;i15;i++)

cell[i].removeMouseListener(this);//如果已完成,撤消鼠标事件,鼠标单击方格不在起作用

hasAddActionListener=false;

}

}

}

3:

import javax.swing.Icon;

import javax.swing.JButton;

public class Cell extends JButton {

/**

*

*/

private static final long serialVersionUID = 1L;

Cell(Icon icon){//实际为ICON

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,this.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);

}

}

}

急求用JAVA编写的图形化界面拼图小游戏代码!

个人见解,总体需要两个二维数组(一个存储正确图片排列 Array1 String[][],一个随机生成图片排列Array2 String[][]),一个一维数组来存储图片的名称Array3 String[],。

(1)如何实现图片移动

使用带图片的按钮(button =new button(getImage(Array[2][4]))),然后通过单击事件来更改按钮的图片来源。 把被点击的按钮的图片路径更新到空白按钮,并且把被点击的按钮图片更新的成空白。其实就是变换两个的二维数组成员的值。更新Array2中的值,然后重绘按钮

如 Array[2][3]=“3.image”

Array[2][4]=“”

图片3.image右移

Array[2][3]=“”

Array[2][4]=“3.image”

(2)如何判断被单击的网格与空白的网格是否相邻

后台使用一个二维数组Array2来做映射。通过二维数组的下标来判断,如Array[2][3]可以知道Array[2][4]是它右边的那个。

(3)如何实现图片的随机摆放

比如有9个图片,你可以命名1-9,然后初始化一个长度为9的一维String 数组Array3来存储图片的名称,

使用随机函数给二维数组Array2赋值,如Array2[2][3]=Array3[random()],这里要判断这个图片是否已被使用过,可以通过遍历Array2来确定当前Array3这个值是否已经在Array2中了

最后通过Array1 和Array2来比较,用户的拼图是否正确。

语言组织能力有限。讲不太清楚。

求一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++) {

if (r == i l == j) {// 空白按键设置为9,不显示

buttons[i][j] = new JButton("9");

container.add(buttons[i][j]);

buttons[i][j].setVisible(false);

} else {

buttons[i][j] = new JButton("" + is[temp++]);// 将数组数组的值作为显示的8个按键的名字

container.add(buttons[i][j]);

}

buttons[i][j].addActionListener(this);// 注册监听事件

}

}

setSize(300, 300);// 设置显示容器区域大小

setVisible(true);

}

public void actionPerformed(ActionEvent event) {// 事件处理,由于计算量小该处将所有按键单独分析

JButton b = (JButton) event.getSource();

if (b == buttons[0][0]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[0][0].getText());

buttons[0][1].setVisible(true);

buttons[0][0].setText("9");

buttons[0][0].setVisible(false);

count++;

} else if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[0][0].getText());

buttons[1][0].setVisible(true);

buttons[0][0].setText("9");

buttons[0][0].setVisible(false);

count++;

}

}

else if (b == buttons[0][1]) {

if (buttons[0][0].getText().equals("9")) {

buttons[0][0].setText("" + buttons[0][1].getText());

buttons[0][0].setVisible(true);

buttons[0][1].setText("9");

buttons[0][1].setVisible(false);

count++;

} else if (buttons[0][2].getText().equals("9")) {

buttons[0][2].setText("" + buttons[0][1].getText());

buttons[0][2].setVisible(true);

buttons[0][1].setText("9");

buttons[0][1].setVisible(false);

count++;

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[0][1].getText());

buttons[1][1].setVisible(true);

buttons[0][1].setText("9");

buttons[0][1].setVisible(false);

count++;

}

} else if (b == buttons[0][2]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[0][2].getText());

buttons[0][1].setVisible(true);

buttons[0][2].setText("9");

buttons[0][2].setVisible(false);

count++;

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[0][2].getText());

buttons[1][2].setVisible(true);

buttons[0][2].setText("9");

buttons[0][2].setVisible(false);

count++;

}

} else if (b == buttons[1][0]) {

if (buttons[0][0].getText().equals("9")) {

buttons[0][0].setText("" + buttons[1][0].getText());

buttons[0][0].setVisible(true);

buttons[1][0].setText("9");

buttons[1][0].setVisible(false);

count++;

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[1][0].getText());

buttons[1][1].setVisible(true);

buttons[1][0].setText("9");

buttons[1][0].setVisible(false);

count++;

} else if (buttons[2][0].getText().equals("9")) {

buttons[2][0].setText("" + buttons[1][0].getText());

buttons[2][0].setVisible(true);

buttons[1][0].setText("9");

buttons[1][0].setVisible(false);

count++;

}

} else if (b == buttons[1][1]) {

if (buttons[0][1].getText().equals("9")) {

buttons[0][1].setText("" + buttons[1][1].getText());

buttons[0][1].setVisible(true);

buttons[1][1].setText("9");

buttons[1][1].setVisible(false);

count++;

} else if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[1][1].getText());

buttons[1][0].setVisible(true);

buttons[1][1].setText("9");

buttons[1][1].setVisible(false);

count++;

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[1][1].getText());

buttons[1][2].setVisible(true);

buttons[1][1].setText("9");

buttons[1][1].setVisible(false);

count++;

} else if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[1][1].getText());

buttons[2][1].setVisible(true);

buttons[1][1].setText("9");

buttons[1][1].setVisible(false);

count++;

}

} else if (b == buttons[1][2]) {

if (buttons[0][2].getText().equals("9")) {

buttons[0][2].setText("" + buttons[1][2].getText());

buttons[0][2].setVisible(true);

buttons[1][2].setText("9");

buttons[1][2].setVisible(false);

count++;

} else if (buttons[2][2].getText().equals("9")) {

buttons[2][2].setText("" + buttons[1][2].getText());

buttons[2][2].setVisible(true);

buttons[1][2].setText("9");

buttons[1][2].setVisible(false);

count++;

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[1][2].getText());

buttons[1][1].setVisible(true);

buttons[1][2].setText("9");

buttons[1][2].setVisible(false);

count++;

}

} else if (b == buttons[2][0]) {

if (buttons[1][0].getText().equals("9")) {

buttons[1][0].setText("" + buttons[2][0].getText());

buttons[1][0].setVisible(true);

buttons[2][0].setText("9");

buttons[2][0].setVisible(false);

count++;

} else if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[2][0].getText());

buttons[2][1].setVisible(true);

buttons[2][0].setText("9");

buttons[2][0].setVisible(false);

count++;

}

}

else if (b == buttons[2][1]) {

if (buttons[2][0].getText().equals("9")) {

buttons[2][0].setText("" + buttons[2][1].getText());

buttons[2][0].setVisible(true);

buttons[2][1].setText("9");

buttons[2][1].setVisible(false);

count++;

} else if (buttons[2][2].getText().equals("9")) {

buttons[2][2].setText("" + buttons[2][1].getText());

buttons[2][2].setVisible(true);

buttons[2][1].setText("9");

buttons[2][1].setVisible(false);

count++;

} else if (buttons[1][1].getText().equals("9")) {

buttons[1][1].setText("" + buttons[2][1].getText());

buttons[1][1].setVisible(true);

buttons[2][1].setText("9");

buttons[2][1].setVisible(false);

count++;

}

} else if (b == buttons[2][2]) {

if (buttons[2][1].getText().equals("9")) {

buttons[2][1].setText("" + buttons[2][2].getText());

buttons[2][1].setVisible(true);

buttons[2][2].setText("9");

buttons[2][2].setVisible(false);

count++;

} else if (buttons[1][2].getText().equals("9")) {

buttons[1][2].setText("" + buttons[2][2].getText());

buttons[1][2].setVisible(true);

buttons[2][2].setText("9");

buttons[2][2].setVisible(false);

count++;

}

}

if (buttons[0][0].getText().equals("1")// 假如1到8已经排列完成,则执行该语句

buttons[0][1].getText().equals("2")

buttons[0][2].getText().equals("3")

buttons[1][0].getText().equals("4")

buttons[1][1].getText().equals("5")

buttons[1][2].getText().equals("6")

buttons[2][0].getText().equals("7")

buttons[2][1].getText().equals("8")) {

JOptionPane.showMessageDialog(null, "您一共花费了" + count + "步完成了游戏!");// 弹出对话框,显示共移动步数

System.exit(0);// 退出程序

}

}

public static void main(String[] args) {

Games game = new Games();

game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}


本文名称:拼图软件java源代码 拼图代码总结
分享路径:http://scyanting.com/article/dopcoej.html