Java面向对象设计利用GUI技术开发小游戏程序。

/*?原图分为16块。第一块是什么?空白区

*?我是这么想的:

*?因为无法将画面分成15块,所以放在16块的区域内(至少很难实现)。

*?所以把原图的一部分处理成白色,比较好处理。

*/

进口?Java . awt . graphics;

进口?Java . awt . gridlayout;

进口?Java . awt . image;

进口?Java . awt . media tracker;

进口?Java . awt . event . mouse event;

进口?Java . awt . event . mouse listener;

进口?Java . awt . image . buffered image;

进口?Java . util . hashset;

进口?Java . util . iterator;

进口?Java . util . random;

进口?Java . util . set;

进口?javax . print . attribute . standard . media;

进口?javax . swing . abstract button;

进口?javax . swing . icon;

进口?javax . swing . image icon;

进口?javax . swing . jbutton;

进口?javax . swing . jframe;

公共?班级?品途?延伸?JFrame?器物?鼠标监听器{

int?currx,curry,cx,cy;

形象?img,whiteimg

图标?img 1;

图标?currIcon

BufferedImage?bimg,白色;

BufferedImage[][]?subimg

int?宽度、高度;

JButton[][]?JB;

公共?Pintu(){

this.setLayout(新?GridLayout(4,4));

img=this.getToolkit()。getImage(" E:\ \ 1 . jpg ");

whiteimg=this.getToolkit()。getImage(" E:\ \ 2 . jpg ");

MediaTracker?我=新?MediaTracker(这个);

me.addImage(img,?0);

试试?{

me . waitforall(0);

}?接住?(中断异常?e)?{

//?托多?自动生成?接住?块

e . printstacktrace();

}

width = img . getwidth(this);

height = img . get height(this);

bimg=new?BufferedImage(宽度,高度,BufferedImage。TYPE _ INT _ ARGB);

图形?BG = bimg . get graphics();

bg.drawImage(img,0,0,this);

subimg=new?buffered image[4][4];

int?一个[]?=?新的?int[4];?

为了什么?(int?我?=?0;?我?& lt?a .长度;?i++)?{?

甲[我]?=?(int)?(Math.random()?*?4)?;?

为了什么?(int?k?=?0;?k?& lt?我;?k++)?{?

如果?(甲[我]?==?a[k])?{?

I-;?

继续;?

}?

}?

}?

for(int?x = 0;x & lt4;x++){

for(int?y = 0;y & lt4;y++)

subimg[a[x]][a[y]]= bimg . getsubimage(width * x/4,?身高*y/4,?宽度/4,?身高/4);

}

currx = a[0];库里= a[0];

white = subimg[currx][curry];

jb =新?JButton[4][4];

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

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

jb[i][j]=new?JButton();

jb[i][j]。addmouse listener((mouse listener)?这个);

this . add(JB[I][j]);

jb[i][j]。setIcon(新?image icon(subimg[I][j]);

}

}

setSize(img.getWidth(this),img . getheight(this));

set visible(true);

setDefaultCloseOperation(EXIT _ ON _ CLOSE);

}

/*公共?作废?油漆(图形?g){

g.drawImage(subimg[0],0,0,this);

}*/

公共?静电?作废?main(String[]?args)?{

新的?pintu();?

}

公共?作废?mouseClicked(MouseEvent?e)?{

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

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

if((abstract button)e . getsource())= = JB[I][j]){ CX = I;cy = j;}

if((CX = = currx)& amp;& amp(((cy-curry)= = 1)| |((curry-cy)= = 1)))|((cy = = curry)& amp;& amp((((CX-currx)= = 1)| |((currx-CX)= = 1))))

{

system . out . println("+CX+")?+cy);

currIcon=jb[cx][cy]。getIcon();

jb[cx][cy]。setIcon(新?ImageIcon(白色));

jb[currx][curry]。setIcon(currIcon);

currx = cx库里= cy

}

}

@覆盖

公共?作废?mouse enter(mouse event?e)?{

//?托多?自动生成?方法?烟蒂

}

@覆盖

公共?作废?mouseExited(MouseEvent?e)?{

//?托多?自动生成?方法?烟蒂

}

@覆盖

公共?作废?mousePressed(MouseEvent?e)?{

//?托多?自动生成?方法?烟蒂

}

@覆盖

公共?作废?mouseReleased(MouseEvent?e)?{

//?托多?自动生成?方法?烟蒂

}

}

那是你说的。。。。效果图如下: