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;
}
}
}
JAVA期中作业——弹球游戏 +砖块
最新推荐文章于 2024-08-05 22:01:02 发布