1200分跪求JAVA数字拼读游戏源代码!
导入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);
}
}
}