一个Java拼图游戏

import java.awt.*; import java.applet.*; import java.awt.event.*; public class PPuzzle extends Applet{ Image imgPuzzle,buff; Point fifteen=new Point(3,3); int[][] map={{0,4,8,12},{1,5,9,3},{2,6,10,14},{3,7,11,15}}; int sx,sy; Canvas screen; Graphics gs,gb; boolean running=false; Button bStart=new Button("新游戏"); Button bSee=new Button("显示正确的图像"); public void init(){ prepareImage(); //准备图像 sx=imgPuzzle.getWidth(this)/4; sy=imgPuzzle.getHeight(this)/4; setBackground(Color.blue); initScreen(); //初始化画面 initButtons(); //初始化按钮 add(screen); //向Applet添加组件 add(bStart); add(bSee); } void prepareImage(){ //准备图像的方法 imgPuzzle=getImage(getCodeBase(),"C/87.jpeg"); MediaTracker mt=new MediaTracker(this); mt.addImage(imgPuzzle, 0); //等待至图像全部加载完毕 try{ mt.waitForAll(); }catch(Exception e){} //创建buffer并获取其Graphics对象 buff=createImage(imgPuzzle.getWidth(this),imgPuzzle.getHeight(this)); gb=buff.getGraphics(); } void initMap(){ //初始化map java.util.Random rnd=new java.util.Random(); int temp,x1,y1,x2,y2; for(int i=0;i<100;i++){ x1=rnd.nextInt(4); x2=rnd.nextInt(4); y1=rnd.nextInt(4); y2=rnd.nextInt(4); temp=map[x1][y1]; map[x1][y1]=map[x2][y2]; map[x2][y2]=temp; } outer:for(int j=0;j<4;j++) for(int i=0;i<4;i++) if(map[i][j]==15){ fifteen.setLocation(i,j); break outer; } } void initScreen(){ //初始化画面 screen=new Canvas(){ //创建screen对象 public void paint(Graphics g){ //覆盖paint()方法 if(gs==null)gs=getGraphics();//获取screen的Graphics对象 if(running) drawScreen(); else //若游戏未开始,则显示整幅图像 g.drawImage(imgPuzzle,0,0,this); } }; //设定screen的大小 screen.setSize(imgPuzzle.getWidth(this),imgPuzzle.getHeight(this)); screen.addMouseListener(new MouseAdapter(){ //处理鼠标事件 public void mousePressed(MouseEvent me){ if(!running) return; int x=me.getX()/sx,y=me.getY()/sy; int fx=(int)fifteen.getX(),fy=(int)fifteen.getY(); if(Math.abs(fx-x)+Math.abs(fy-y)>=2)return; if (map[x][y]==15)return; map[fx][fy]=map[x][y]; map[x][y]=15; fifteen.setLocation(x,y); drawScreen(); } }); } void initButtons(){ //初始化按钮 //“新游戏”按钮事件的处理 bStart.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ initMap(); //初始化mpa drawScreen(); //绘制画面 running=true; //代表游戏正在进行中 bSee.setLabel("显示正确的图像"); //改变bSee按钮的标题 } }); //“显示正确图像”按钮事件处理 bSee.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ //bSee按钮标题为“继续游戏” if(bSee.getLabel().equals("继续游戏")){ drawScreen(); //绘制画面 // bSee.setLabel("显示正确图像"); //标题更改为“显示正确图像” } else{ //bSee的标题为“显示正确图像” gs.drawImage(imgPuzzle,0,0,screen); //显示整幅图像 bSee.setLabel("继续游戏"); } } }); } void drawScreen(){ //绘制画面的方法 gb.clearRect(0, 0, sx*4, sy*4); //清空buffer //将制定位置的图像块绘制至buffer中 int i; for(int j=0;j<4;j++) for(i=0;i<4;i++) if(map[i][j]!=15)drawSegment(map[i][j],i,j); //向Screen绘制buffer中的图像 gs.drawImage(buff, 0, 0, screen); } void drawSegment(int seg, int x, int y){ int dx=seg%4*sx,dy=seg/4*sy; gb.drawImage(imgPuzzle,x*sx,y*sy,x*sx+sx-1,y*sy+sy-1,dx,dy,dx+sx-1,dy+sy-1,screen); } 

注意:“C/87.jpeg”处是拼图的原图像位置,请根据自己的图片位置确定

你可能感兴趣的:(一个Java拼图游戏)