1:
创新互联致力于互联网品牌建设与网络营销,包括网站设计、成都做网站、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联核心团队10多年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。
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);
}
}
}
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;
//以上均引用不同的package内的类
public class MyMainFrame extends JFrame implements ActionListener {//MyMainFrame类extends “JFrame”类实现 ActionListener的方法
MyCanvas myCanvas; //初始化对象MyCanvas类
JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板
Button start,preview,set;//定义开始,预览,设定按钮
Container container;//容器,得到内容面板
public MyMainFrame() {//初使化
container=this.getContentPane(); //得到当前对象的ContentPane,并且把它赋给container
start=new Button("开始");//创建并初始新的Button(按钮)对象,赋给start
start.addActionListener(this); //在这个按钮对象中添加监听器,范围是当前对象
preview=new Button("预览");//同上,创建新的Button对象。。。。。
preview.addActionListener(this);//同上。。。。。
set = new Button("设置"); //同上。。。。。(感觉代码都差不多吧?呵呵)
set.addActionListener(this);//同上
panelPreview=new JPanel(); 创建新的JPanel(面板)对象
panelPreview.setLayout(null); //设置面板对象的布局为空
Icon icon=new ImageIcon("pic/pic_"+MyCanvas.pictureID+".jpg"); //创建并初始新的图标对象。图标的图片路径是pic目录下的pic与通过MyCanvas.pictureId取得字符串再与.jpg合并后的名称。例如(pic/pic_1234.jsp)
JLabel label=new JLabel(icon); //定义新的JLable(java标签),并初始
label.setBounds(0,0,300,300); //设置标签的范围(长x轴,宽y轴,长多,宽多少)
panelPreview.add(label); //面板对象中添加label这个对象
panelNorth=new JPanel(); //定义新的JPanel
panelNorth.setBackground(Color.red); //设置JPanel的背景色
panelNorth.add(start); //Jpanel加入按钮
panelNorth.add(preview); //同上
panelNorth.add(set); //同上
myCanvas=new MyCanvas(); //实例化MyCanvas
container.add(myCanvas,BorderLayout.CENTER);//在容器(前边定义好了这个对象)中添加myCanvas,设置它的布局为居中
container.add(panelNorth,BorderLayout.NORTH);//添加Jpanel,布局为北(也就是上)
this.setTitle("拼图小游戏-"); //设置这个对象的题目叫。。。。。
this.setLocation(300,200); //设置它的初始位置
this.setSize(308,365); //设置大小
this.setResizable(false); //设置是否可以改变窗口的大小(否)
this.setVisible(true); //是否可以显示(是)
this.setDefaultCloseOperation(3); //(swt和swing本人用的少)这个好像是按钮的初始样式是哪种吧。自己改下
}
public static void main(String[] args) {//类进口,也就是主程序的进口
// TODO 自动生成方法存根
new MyMainFrame(); //实例化主框架
}
public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理
// TODO 自动生成方法存根
Button button=(Button)arg0.getSource(); //取得通过监听得到的动作时间对象的源(getSource具体得到的是啥,我也不太清楚)
if(button==start){ //判断。如果监听到的是按start按钮
myCanvas.Start(); //启动myCanvas
}else if(button==preview){ //如果是preview按钮
if(button.getLabel()=="预览"){ //如果按钮的标签是"预览"
container.remove(myCanvas); //容器销毁myCanvas
container.add(panelPreview); //然后容器添加panelPreview对象
panelPreview.updateUI(); //panelPreview对象的upDateUI方法
container.repaint(); //调用容器重新画图的命令
button.setLabel("返回"); //标签设置成"返回"
}else{ //如果以上两个if都不是,执行下边的语句
container.remove(panelPreview); //cantainer销毁p....这个对象
container.add(myCanvas); //添加m...这个对象
container.repaint(); //容器重新画图
button.setLabel("预览"); //设置标签名称为"预览"
}
}else if(button==set){//修改所选图片 //如果间听到的是按set这个键的时候
Choice pic = new Choice(); //Choice实例化对象(这个是啥类,我也不知道,名字上看是选择?)
pic.add("小猫"); //添加小猫
pic.add("小猪"); //添加小猪
pic.add("云"); //添加云
pic.add("QQ"); //添加qq
pic.add("卡通"); //添加卡通
pic.add("花"); //花
int i=JOptionPane.showConfirmDialog(this, pic, "选择图片", JOptionPane.OK_CANCEL_OPTION);//定义一个int类型的对象i,赋值成后边的那些
if(i==JOptionPane.YES_OPTION){ //如果对象i与JOptionPane对象的YES...相等,则执行下列代码
MyCanvas.pictureID=pic.getSelectedIndex()+1; //MyC....这个类的pic...这个属性等于pic.get......这个方法的结果+1
myCanvas.reLoadPictrue(); //myCanvas对象重新读取图片
Icon icon=new ImageIcon("pic/pic_"+MyCanvas.pictureID+".jpg"); //定义新的图标对象
JLabel label=new JLabel(icon); //初始新的标签(标签中加入图标)
label.setBounds(0,0,300,300); //标签设置范围
panelPreview.removeAll(); //调用pane....对象的remo...方法
panelPreview.add(label); //对象pan...调用add方法
panelPreview.repaint(); //调用。。。。对象重新画的方法
}
}
}
}
------------------------
不太熟悉java的swt和swing,自己改下吧
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);
}
}
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款