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

1:

导入Java . io . io exception;

导入javax . sound . sampled . lineunavailableexception;

import javax . sound . sampled . unsupportdaudiofileexception;

//一个基于华容道原理的拼图。使用光构图的应用。

导入Java . awt . borderlayout;

导入Java . awt . button;

导入Java . awt . choice;

导入Java . awt . color;

导入Java . awt . container;

导入Java . awt . event . action event;

导入Java . awt . event . action listener;

导入javax . swing . icon;

导入javax . swing . image icon;

导入javax . swing . jframe;

导入javax . swing . jlabel;

导入javax . swing . joptionpane;

导入javax . swing . jpanel;

公共类MyMainFrame扩展JFrame实现ActionListener {

/**

*

*/

private static final long serialVersionUID = 1L;

MyCanvas我的画布;

JPanel panelNorth,panelPreview

按钮开始、预览、设置;

集装箱集装箱;

Public MyMainFrame() {//初始化

container = this . getcontentpane();

Start =新建按钮(“开始”);

start . addactionlistener(this);

预览=新建按钮(“预览”);

preview . addactionlistener(this);

Set =新建按钮(“设置”);

set . addactionlistener(this);

panel preview = new JPanel();

panel preview . set layout(null);

icon icon = new image icon(" images/pic _ "+my canvas . pictureid+"。jpg”);

JLabel label = new JLabel(icon);

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

panelPreview.add(标签);

panel north = new JPanel();

panel north . set background(color . yellow);

panel north . add(start);

panelNorth.add(预览);

panel north . add(set);

my canvas = new my canvas();

container.add(myCanvas,BorderLayout。中心);

container.add(panelNorth,BorderLayout。北);

This.setTitle("成型益智游戏-1212 ");

this.setLocation(300,200);

this.setSize(408,465);

this . setresizable(false);

this . set visible(true);

this . setdefaultcloseoperation(3);

}//初始化构造函数的结尾

public void action performed(action event e){

Button Button =(Button)e . getsource();

if(button==start){

我的画布。start();

}else if(button==preview){

if(button . get label()= = " preview "){

container . remove(my canvas);

container . add(panel preview);

panel preview . update ui();

container . repaint();

button . set label(" return ");

}否则{

container.remove(面板预览);

container . add(my canvas);

container . repaint();

button . set label(" preview ");

}

}else if(button==set){

Choice pic = new Choice();

//pic . add(" QQ ");

Pic.add("美颜");

Int I = Joption窗格。ShowConfirmDiarog (this,pic,“选择图片”,JOptionPane。确定_取消_选项);

//使用选择对话框选择图片。

if(i==JOptionPane。是_选项){

my canvas . pictureid = pic . getselectedindex()+5;

my canvas . reloadpictrue();

icon icon = new image icon(" images/pic _ "+my canvas . pictureid+"。jpg”);

JLabel label = new JLabel(icon);

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

panel preview . remove all();

panelPreview.add(标签);

panel preview . repaint();

}

}

}

公共静态void main(String[] args)引发UnsupportedAudioFileException、LineUnavailableException、IOException

{

new my mainframe();

}//main的结尾

}

2:

导入Java . awt . rectangle;

导入Java . awt . event . mouse event;

导入Java . awt . event . mouse listener;

导入javax . swing . icon;

导入javax . swing . image icon;

导入javax . swing . joptionpane;

导入javax . swing . jpanel;

公共类MyCanvas扩展JPanel实现MouseListener

{

/**

*

*/

private static final long serialVersionUID = 1L;

boolean hasAddActionListener = false;//设置网格的动作监听器的标志位;如果为真,则动作事件已被添加。

cell cell[];//定义网格

矩形单元格null;//定义空网格区域为矩形类。

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

公共MyCanvas() {

this . set layout(null);

this.setSize(400,400);

cellNull =新矩形(300,300,100,100);//空网格区域在第三行,每隔三列。

单元格=新单元格[16];

图标图标;

for(int I = 0;我& lt4;i++) {

for(int j = 0;j & lt4;j++){

icon = new image icon(" images/pic _ "+pictureID+" _ "+(I * 4+j+1)+"。jpg”);

单元格[I * 4+j]=新单元格(图标);

单元格[i*4+j]。setLocation(j*100,I * 100);

this.add(单元格[I * 4+j]);

}

}

this.remove(单元格[15]);//去掉最后一个多余的方块。

}//放置9张小图,转置最后一张。

public void reload picture(){//拼图游戏选择其他图形时,需要重新加载新的图像。

图标图标;

for(int I = 0;我& lt4;i++) {

for(int j = 0;j & lt4;j++){

icon = new image icon(" images/pic _ "+pictureID+" _ "+(I * 4+j+1)+"。jpg”);

单元格[i*4+j]。setIcon(图标);

}

}

}

Public boolean isFinish(){//判断拼接是否成功。

for(int I = 0;我& lt15;i++)

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

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

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

返回false

}//的结尾

返回true

}

Public void Start(){//重新排列方块,打乱顺序。

while(单元格[0].getBounds()。x & lt=100。& amp单元格[0]。getBounds()。y & lt=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;j & lt15;j++){

if((单元格[j].getBounds()。x = = x)& amp;& amp(单元格[j]。getBounds()。y==y)){//依次寻找左边的按钮。

单元格[j]。move("右",100);

cellNull.setLocation(x,y);

打破;//找到后跳出for循环。

}

}

}

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

x+= 100;

if(test(x,y)){

for(int j = 0;j & lt15;j++){

if((单元格[j].getBounds()。x = = x)& amp;& amp(单元格[j]。getBounds()。y==y)){

单元格[j]。move("左",100);

cellNull.setLocation(x,y);

打破;

}

}

}

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

y-= 100;

if(test(x,y)){

for(int j = 0;j & lt15;j++){

if((单元格[j].getBounds()。x = = x)& amp;& amp(单元格[j]。getBounds()。y==y)){

单元格[j]。move("DOWN ",100);

cellNull.setLocation(x,y);

打破;

}

}

}

}else{//DOWN

y+= 100;

if(test(x,y)){

for(int j = 0;j & lt15;j++){

if((单元格[j].getBounds()。x = = x)& amp;& amp(单元格[j]。getBounds()。y==y)){

单元格[j]。move("UP ",100);

cellNull.setLocation(x,y);

打破;

}

}

}

}

}

如果(!HasAddActionListener)//如果尚未添加动作事件,则添加一个动作事件。

for(int I = 0;我& lt15;I++)//在第一个方块中添加一个动作事件,这样就可以通过单击按钮来移动它。

单元格[i]。addmouse listener(this);

hasAddActionListener = true

}

私有布尔测试(int x,int y){

如果((x & gt= 0 & amp& ampx & lt= 200)| |(y & gt;= 0 & amp& ampy & lt=200))

返回true

其他

返回false

}

public void mouse clicked(mouse event e){ }

public void mouse enter(mouse event e){ }

public void mouse exited(mouse event e){ }

public void mouse released(mouse event e){ }

public void mouse pressed(mouse event 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(x 1 = = x2 & amp;& ampY1-y2==100)//满足条件则交换。

button.move("UP ",100);

else if(x 1 = = x2 & amp;& ampy1-y2==-100)

button.move("DOWN ",100);

else if(x 1-x2 = = 100 & amp;y1==y2)

button.move("LEFT ",100);

else if(x 1-x2 = =-100 & amp;& ampy1==y2)

button.move("右",100);

其他

返回;//如果不满意,什么都不做。

cellNull.setLocation(x1,y 1);

this . repaint();

If(this.isFinish()){//来判断是否完成。

Joptionpane。显示消息对话框(这个,“景凤恭喜你完成拼图,加油!想更上一层楼吗?”);

for(int I = 0;我& lt15;i++)

单元格[i]。remove mouse listener(this);//如果完成,取消鼠标事件,鼠标点击框不再有效。

hasAddActionListener = false

}

}

}

3:

导入javax . swing . icon;

导入javax . swing . jbutton;

公共类单元格扩展JButton {

/**

*

*/

private static final long serialVersionUID = 1L;

Cell(Icon ICON){//其实就是图标。

超级(图标);

this.setSize(100,100);

}

Public void move (string direction,int sleep){//方块的移动。

if(direction=="UP"){

this . set location(this . get bounds()。x,this.getBounds()。y-100);

}else if(direction=="DOWN"){

this . set location(this . get bounds()。x,this.getBounds()。y+100);

}else if(direction=="LEFT"){

this . set location(this . get bounds()。x-100,this.getBounds()。y);

}否则{

this . set location(this . get bounds()。x+100,this.getBounds()。y);

}

}

}