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; } } }