JAVA期中作业——弹球游戏 +砖块

来源:互联网 发布:手机微店淘宝搬家2016 编辑:程序博客网 时间:2024/05/17 02:40
package pinball;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Pinball {    //Panel    public  int  LENGTH=600;    public  int  WIDTH1=600;    public  int  START_X=100;    public  int  START_Y=100;    //Ball    public int BALL_SIZE=30;     public int ball_x=LENGTH/2;    public int ball_y=WIDTH1/2;     public int speed_x=11;     public int speed_y=7;     public int mouse_x=0;     public int mouse_y=0;     public int board1=WIDTH1/2;    //Brick      public int B_LENGTH=30;     public int B_WIDTH=100;     public int B_LNUMBER=4;     public int B_WNUMBER=5;        MPanel mp = new MPanel();    Timer t1;    brick[][] lev1;      public static void main(String[] args) {        new Pinball().start();        }  public void start(){      MFrame jf=new MFrame();      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);      jf.setVisible(true);  }class MFrame extends JFrame{        MFrame(){     setTitle("弹球游戏 By Lucky");     setSize(LENGTH+16,WIDTH1+30);     setLocation(START_X,START_Y);         add(mp);     t1 = new Timer(50, move);      t1.start();      addMouseMotionListener(mouse);      lev1=new brick[B_LNUMBER][B_WNUMBER];      int b_x_now=LENGTH/2,b_y_now=0;      for(int m=0;m<B_LNUMBER;m++){          b_y_now=0;          b_x_now+=B_LENGTH;          for(int n=0;n<B_WNUMBER;n++){              b_y_now+=B_WIDTH;          lev1[m][n]=new brick(b_x_now,b_y_now);      }      }}   ActionListener move = new ActionListener(){    public void actionPerformed(ActionEvent evt) {        if((((ball_x<=20)||(ball_x>=LENGTH-BALL_SIZE-20))&&(ball_y>=board1-100)&&(ball_y<=board1))){            speed_x=-speed_x;        }        else if((ball_x<=20)||(ball_x>=LENGTH-BALL_SIZE-20)){            t1.stop();        }               else if((ball_y<=15)||(ball_y>=WIDTH1-BALL_SIZE)){            speed_y=-speed_y;        }        for(int m=0;m<B_LNUMBER;m++)          for(int n=0;n<B_WNUMBER;n++){             lev1[m][n].Getin(ball_x, ball_y);             if(lev1[m][n].pattern==1){                  speed_x=-speed_x;                 }             if(lev1[m][n].pattern==2){                  speed_y=-speed_y;                 }                   }               ball_x+=speed_x;        ball_y+=speed_y;        mp.repaint();         } };  MouseMotionListener mouse=new MouseMotionListener(){ public void mouseDragged(MouseEvent e) {            } public void mouseMoved(MouseEvent e) {     mouse_x=e.getX();     mouse_y=e.getY();     board1=mouse_y;     mp.repaint();  }   };           }class MPanel extends JPanel{  public void paint(Graphics g) {  //  super.paint(g);    g.setColor(Color.black);    g.fillRect(0, 0, LENGTH, WIDTH1);    g.setColor(Color.blue);    g.fillRect(0, board1-100, 20, 100);     g.fillRect(LENGTH-20, board1-100, 20, 100);    g.setColor(Color.yellow);    for(int m=0;m<B_LNUMBER;m++){          for(int n=0;n<B_WNUMBER;n++){              if (lev1[m][n].visable==true)            g.fillRect(lev1[m][n].x,lev1[m][n].y, B_LENGTH-5, B_WIDTH-5);       }  }    g.setColor(Color.red);    g.fillOval(ball_x, ball_y, BALL_SIZE, BALL_SIZE);}}class brick{ public   int x=0;//砖左上角(x,y) public   int y=0; int pattern=0;    brick(int b_x,int b_y){        x=b_x;        y=b_y;        }    private Boolean visable=true;    Boolean Setvisable(int m){        if(m==0)         visable=true;        if(m==1)         visable=false;         return visable;    }   void Getin(int p_x,int p_y){//球是否碰到砖 球左上角(p_x,p_y)    if(visable==false)         pattern= 0;     else if((p_x>=x-BALL_SIZE)&&(p_x<=x+B_LENGTH)&&(p_y>=y-BALL_SIZE)&&(p_y<=y+B_LENGTH)){         visable=false;         int m=((BALL_SIZE-x+p_x)<=(x-p_x))?BALL_SIZE-x+p_x:x-p_x;         int n=((BALL_SIZE-y+p_y)<=(y-p_y))?BALL_SIZE-y+p_y:y-p_y;         if(m<=n)             pattern=1 ;         else pattern=2 ;     }     else pattern=0;   }                                  }      }

原创粉丝点击