java课程设计(第三版)魔板游戏源代码(可实现英雄榜功能)

有两种玩法(数字和图片)、可选择初级和高级模式、可查看英雄榜。

 

1. Block.java

import javax.swing.*;

import java.awt.*;

public class Block extends JTextField{

   Point point;

   Object object;

   Block(){

      setEditable(false);

      setHorizontalAlignment(JTextField.CENTER);

      setFont(new Font("Arial",Font.BOLD,16));

      setForeground(Color.blue);

   }

   public void setAtPoint(Point p){

      point=p;

   }

   public Point getAtPoint(){

      return point;

   }

   public void setObject(Object object){

      this.object=object;

      if(object instanceof Integer){

         Integer number=(Integer)object;

         setText(""+number.intValue());

      }

      else if(object instanceof Image){

         repaint();

      }

   }

   public Object getObject(){

      return object;

   }

   public void paintComponent(Graphics g){

      super.paintComponent(g); 

      int w=getBounds().width;

      int h=getBounds().height;

      try{

           g.drawImage((Image)object,0,0,w,h,this);

      }

      catch(Exception exp){}

   }

}

2. HandleImage.java

import java.awt.*;

import javax.swing.*;

import java.awt.image.*;

public class HandleImage extends JComponent{

    int imageWidth,imageHeight;

    Toolkit tool;

    HandleImage(){

       tool=getToolkit();

    }

    public Image [] getImages(Image image,int rows,int colums){

       Image [] blockImage=new Image[rows*colums];

       try{

            imageWidth=image.getWidth(this);

            imageHeight=image.getHeight(this);

            int w=imageWidth/colums;                                   

            int h=imageHeight/rows;

            int k=0;

            PixelGrabber pg=null; 

            ImageProducer ip=null;                

            for(int i=0;i<rows;i++){

                for(int j=0;j<colums;j++){

                   int pixels[]= new int[w*h];

                   pg=new PixelGrabber(image,j*w,i*h,w,h,pixels,0,w);           

                   pg.grabPixels();                                             

                   ip=new  MemoryImageSource(w,h,pixels,0,w);

                   blockImage[k]=tool.createImage(ip);

                   k++;           

                }

            }

       }

       catch(Exception ee){}

       return blockImage;

    }

}

3. HandleMove.java

import java.awt.event.*;

import java.awt.*;

import javax.swing.*;

import java.io.*;

import java.applet.*;

import java.net.*;

public class HandleMove extends JPanel implements MouseListener,ActionListener { 

    Point [][] point;

    int spendTime=0;

    int grade=1;///

    javax.swing.Timer recordTime;

     File fileOneGrade,fileTwoGrade;

     ///

    File musicFile=new File("hello.wav");//

    URL url;//

    AudioClip clip;

     ///

    JTextField showTime;

    VerifySuccess verify;

    Record record;

    HandleMove(){

     try

     {

             url=musicFile.toURL();

             clip=Applet.newAudioClip(url);

     }

     catch(Exception e)

     {}

        recordTime=new javax.swing.Timer(1000,this);

        showTime=new JTextField(16);

        showTime.setEditable(false);

        showTime.setHorizontalAlignment(JTextField.CENTER);

        showTime.setFont(new Font("楷体_GB2312",Font.BOLD,16));

        JLabel hitMess=new JLabel("用鼠标单击方块",JLabel.CENTER);

        hitMess.setFont(new Font("楷体_GB2312",Font.BOLD,18));     

        add(hitMess);

        add(showTime);

        setBackground(Color.cyan);

        fileOneGrade=new File("初级魔板游戏排行榜.txt");///

        fileTwoGrade=new File("高级魔板游戏排行榜.txt");///

       

    }

    public void setPoint(Point [][] p){

        point=p;

    }

    public void initSpendTime(){

        recordTime.stop();

        spendTime=0;

        showTime.setText(null);

        

       /* File musicFile=new File("hello.wav");

        URI uri=musicFile.toURI();/

        URL url=uri.toURL("E:\chaper6");

        AudioClip clip=Applet.newAudioClip(url);*/

       

    }

    public void setVerifySuccess(VerifySuccess verify){

        this.verify=verify;

    }

    public void mousePressed(MouseEvent e){

        recordTime.start();

        clip.play();

        Block block=null;

        block=(Block)e.getSource();

        int w=block.getBounds().width;

        int h=block.getBounds().height;

        int startI=-1,startJ=-1,endI=-1,endJ=-1;

        Point startPoint=block.getAtPoint();

        Point endPoint=null;

        for(int i=0;i<point.length;i++){

           for(int j=0;j<point[0].length;j++)    

             if(point[i][j].equals(startPoint)){

                  startI=i;

                  startJ=j;

                  break;

             }

        }

        for(int i=0;i<point.length;i++){

           for(int j=0;j<point[0].length;j++)    

             if(point[i][j].isHaveBlock()==false){

                  endI=i;

                  endJ=j;

                  endPoint=point[i][j];

                  break;

             }

        }

        boolean moveCondition1=Math.abs(endI-startI)==1&&endJ==startJ;

        boolean moveCondition2=Math.abs(endJ-startJ)==1&&endI==startI;

        if(moveCondition1||moveCondition2){

           block.setLocation(endPoint.getX(),endPoint.getY());

           block.setAtPoint(endPoint); 

           endPoint.setBlock(block);

           endPoint.setHaveBlock(true);

           startPoint.setHaveBlock(false);

        }       

    }

    public void actionPerformed(ActionEvent e){

          spendTime++;

          showTime.setText("您的用时:"+spendTime+"秒");

    }

    public void mouseReleased(MouseEvent e){

          if(verify.isSuccess()){

              recordTime.stop();

              record=new Record();

              switch(grade){

                  case 1:record.setGradeFile(fileOneGrade);

                         break;

                  case 2:record.setGradeFile(fileTwoGrade);

                         break;

             }

              record.setTime(spendTime);

              record.setVisible(true);

              JOptionPane.showMessageDialog(this,"您成功了!","消息框",

                                     JOptionPane.INFORMATION_MESSAGE );

              /*record.setTime(spendTime);

              record.setGradeFile(gradeFile);

              record.setVisible(true);//记录英雄榜*/

          }

    }

    public void mouseEntered(MouseEvent e){}

    public void mouseExited(MouseEvent e){}

    public void mouseClicked(MouseEvent e){

    /* record.setTime(spendTime);

        record.setGradeFile(gradeFile);

        record.setVisible(true);//记录英雄榜*/

     }

}

4. People.java

import java.io.*;

public class People implements Serializable,Comparable{

   String name=null;

   int time=0;                         

   public People(String name,int t){

       this.name=name;

       time=t;

   }

   public int getTime(){

       return time;

   }

   public String getName(){

       return name;

   }

   public int compareTo(Object b){

       People p=(People)b;

       if((this.time-p.time)==0)

         return 1;

       else

         return (this.time-p.time);

   }

}

5. Point.java

public class Point{

    int x,y;

    boolean haveBlock;

    Block  block=null;                  

    public Point(int x,int y){

       this.x=x;

       this.y=y;

    }

    public boolean isHaveBlock(){

       return haveBlock;

    }

    public void setHaveBlock(boolean boo){

       haveBlock=boo;

    }

    public int getX(){

       return x;

    }

    public int getY(){

       return y;

    }

    public boolean equals(Point p){

       if(p.getX()==this.getX()&&p.getY()==this.getY())

           return true;

          

       else

           return false;

    }

    public void setBlock(Block block){

       this.block=block; 

    }

    public Block getBlock(){

       return block;

    }

}

6. PuzzleGame.java

关注“触动青年”公众号,在对话框中搜索“魔板游戏”,即可获得相关代码链接。

7. PuzzlePad.java

import javax.swing.*;

import java.io.*;

import java.util.*;

import java.awt.*;

public class PuzzlePad extends JPanel{

     Point [][] point;

     Block [][] block;

     int distance=100,grade=1,m=3,n=3;

     HandleMove handleMove;

     HandleImage handleImage;

     VerifySuccess verifySuccess;

     Image image;

     boolean isDigitPlay;

     //Record record;

     public PuzzlePad(){

         setBackground(Color.gray);

         setLayout(null);

         handleMove=new HandleMove();

         handleMove.initSpendTime();

         handleImage=new HandleImage();

         verifySuccess=new VerifySuccess();

        // record=new Record();

         handleMove.setVerifySuccess(verifySuccess);

     }

     public HandleMove getHandleMove(){

        return handleMove;

     }

     public void setImage(Image image){

        this.image=image;

     }

     public void setGrade(int grade){

         this.grade=grade;

         handleMove.grade=grade;

         if(grade==1){

            m=3;

            n=3;

         }

         else if(grade==2){

            m=4;

            n=4;

         }

     }

     public int getGrade(){

         return grade;

     }

     private void needInit(){

         handleMove.initSpendTime();

         removeAll();

         point=new Point[m][n];

         block=new Block[m][n];

         int Hspace=distance,Vspace=distance;

         for(int i=0;i<m;i++){

            for(int j=0;j<n;j++){

               point[i][j]=new Point(Hspace,Vspace);

               Hspace=Hspace+distance;

            }

            Hspace=distance;

            Vspace=Vspace+distance;

         }

         handleMove.setPoint(point);

         verifySuccess.setPoint(point);

         handleMove.setVerifySuccess(verifySuccess);

         int k=0;

         for(int i=0;i<m;i++){

             if(i<m-1)

                for(int j=0;j<n;j++){

                   block[i][j]=new Block();

                   block[i][j].addMouseListener(handleMove);

                   k++;

                }

             else

               for(int j=0;j<n-1;j++){

                   block[i][j]=new Block();

                   block[i][j].addMouseListener(handleMove);

                   k++;    

                }

         }

         for(int i=0;i<m;i++){

             if(i<m-1)

               for(int j=0;j<n;j++){

                  add(block[i][j]);

                  block[i][j].setSize(distance,distance);

                  block[i][j].setLocation(point[i][j].getX(),point[i][j].getY());

                  block[i][j].setAtPoint(point[i][j]);

                  point[i][j].setBlock(block[i][j]);

                  point[i][j].setHaveBlock(true);

               }

             else

               for(int j=0;j<n-1;j++){

                  add(block[i][j]);

                  block[i][j].setSize(distance,distance);

                  block[i][j].setLocation(point[i][j].getX(),point[i][j].getY());

                  block[i][j].setAtPoint(point[i][j]);

                  point[i][j].setBlock(block[i][j]);

                  point[i][j].setHaveBlock(true);

               }

         }

     }

     public void setIsDigitPlay(){

         needInit();

         isDigitPlay=true;

         ArrayList<Integer> numberList=new ArrayList<Integer>();

         for(int k=0;k<m*n-1;k++){

            numberList.add(k+1);

         }

         Object []object=numberList.toArray();

         verifySuccess.setObject(object);

         Collections.shuffle(numberList); //随机排列数字

         int k=0;

         for(int i=0;i<m;i++){

             if(i<m-1)

                for(int j=0;j<n;j++){

                    block[i][j].setObject(numberList.get(k));

                    k++;

                }

             else

               for(int j=0;j<n-1;j++){

                   block[i][j].setObject(numberList.get(k));

                   k++;    

                }

         }

         repaint();

    }

    public void setIsImagePlay(){

         needInit();

         isDigitPlay=false;

         ArrayList<Image> imageList=new ArrayList<Image>();

         Image [] blockImage=handleImage.getImages(image,m,n);

         for(int k=0;k<blockImage.length-1;k++){

            imageList.add(blockImage[k]);

         }

         Object []object=imageList.toArray();

         verifySuccess.setObject(object);

         Collections.shuffle(imageList); //随机排列图像

         int k=0;

         for(int i=0;i<m;i++){

             if(i<m-1)

                for(int j=0;j<n;j++){

                    block[i][j].setObject(imageList.get(k));

                    block[i][j].repaint();

                    block[i][j].setBorder(null);

                    k++;

                }

             else

               for(int j=0;j<n-1;j++){

                   block[i][j].setObject(imageList.get(k));

                   block[i][j].repaint();

                   block[i][j].setBorder(null);

                   k++;    

                }

         }

         repaint(); 

    }

   public void paintComponent(Graphics g){

      super.paintComponent(g);

      if(isDigitPlay==false) 

        try{

             g.drawImage(image,20+distance*(m+1),point[0][0].getY(),

                       distance*m,distance*n,this);

        }

        catch(Exception exp){}

   }

}

8. Record.java

import java.io.*;

import java.util.*;

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class Record extends JDialog implements ActionListener{

   int time=0;

   JTextField yourName;

   JLabel label=null;

   JButton enter,cancel;

   File gradeFile=null;

   public Record(){

      setBounds(100,50,550,380);

      setResizable(false);

      setModal(true);

      setVisible(false);

      enter=new JButton("确定");

      cancel=new JButton("取消");

      yourName=new JTextField(8);

      yourName.setText("匿名");

      enter.addActionListener(this);

      cancel.addActionListener(this);

      setLayout(new GridLayout(2,1));

      label=new JLabel();

      add(label);

      JPanel p=new JPanel();

      p.add(yourName);

      p.add(enter);

      p.add(cancel);

      add(p);

  }

  public void setGradeFile(File f){

     gradeFile=f;

     setTitle("保存成绩到"+gradeFile.getName());

     label.setText("保存成绩到"+gradeFile.getName());

     validate();

  }

  public void setTime(int time){

     this.time=time;

  }

  public void actionPerformed(ActionEvent e){

     if(e.getSource()==enter){

       LinkedList<People> list=new LinkedList<People>();

       try{

            RandomAccessFile out=new RandomAccessFile(gradeFile,"rw");

            out.seek(out.length());

            out.writeUTF(yourName.getText());

            out.writeInt(time);

            out.close();

       }

       catch(Exception event) {

        System.out.println("error");///

        }

       setVisible(false);

     }

     if(e.getSource()==cancel){

       setVisible(false);

     } 

  }

}

9. ShowRecordDialog.Java

关注“触动青年”公众号,在对话框中搜索“魔板游戏”,即可获得相关代码链接。

10. VerifySuccess.java

public class VerifySuccess{

   Point [][] point;

   Object [] object;

  public void setPoint(Point [][] point){

       this.point=point;

   }

   public void setObject(Object [] object){

       this.object=object;

   }

    public boolean isSuccess(){

       boolean boo=true;

       int k=0;

       for(int i=0;i<point.length;i++){

         if(i<point.length-1){

           for(int j=0;j<point[i].length;j++){

               if(!(point[i][j].getBlock().getObject()==object[k])){

                  boo=false;

                  break;

               }

               k++;

           }

         }

         else{

           for(int j=0;j<point[i].length-1;j++){

               if(!(point[i][j].getBlock().getObject()==object[k])){

                  boo=false;

                  break;

               }

               k++;

           } 

         } 

       }

       return boo;

   

       }

}

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值