package cn.edu.hnnu; /** * 1-->矩形框 挡板 * 2-->要求我们鼠标能够控制挡板 * 3-->小球撞上挡板能够反弹 * */ import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.ArrayList; import javax.imageio.ImageIO; import javax.swing.JPanel; /** * 1-->小球与挡板碰撞--banW-5 ---->50 2-->小球与挡板碰撞--speed-1 ----1 * 3-->小球与挡板碰撞-->修改颜色----随机色 * 4-->小球与挡板碰撞-->score+1---画出来--->g.drawString("分数"+score) * 5-->小球没接住-->gameover-->画出来-->线程停止运行() * * @author * */ public class MyBallPanel extends JPanel implements Runnable, MouseListener, KeyListener { static BufferedImage background; static BufferedImage qiu; static BufferedImage ZUOBAN; static BufferedImage YOUBAN; static BufferedImage kaishi; static BufferedImage jieshu1; static BufferedImage jieshu2; boolean startGame = false; ArrayListrectList=new ArrayList(); private void InitRectList() { //初始化 矩形rectList rectList.add( zuoban); rectList.add(youban); rectList.add(new Rect(0,0,1200,40)); rectList.add(new Rect(0,0,75,250)); rectList.add(new Rect(0,550,75,250)); rectList.add(new Rect(1120, 0, 75, 250)); rectList.add(new Rect(1120, 550, 75, 250)); rectList.add(new Rect(0, 760, 1200, 40)); } private void hitBall() { rectList.remove(zuoban); rectList.remove(youban); zuoban= new Rect(zuobanX,zuobanY,20,200); youban=new Rect(youbanX,youbanY,20,200); rectList.add(zuoban); rectList.add(youban); Rect ball = new Rect(ballx,bally,60,60); Rect temp; for(int i = 0;itemp.x+temp.width) f = 2; else f = 4; break; case 2: if(ball.x-3temp.x+temp.width) f = 3; else f = 1; break; case 3: if(ball.x-3temp.x+temp.width) f = 4; else f = 2; break; case 4: if(ball.x-3temp.x+temp.width) f = 1; else f = 3; break; } } } } int ballx = 600; int bally = 400; int f = 1; int speed = 6; // 声明挡板的变量 int zuobanX = 100; int zuobanY = 330; int zuobanW = 15; int zuobanH = 150; int youbanX = 1100; int youbanY = 330; int youbanW = 15; int youbanH = 150; int kaishiY = 0; int jj1 = 0; int jj2 = 0; int jjY = -100; boolean flag = true; Color color = null; int backY; Rect zuoban=new Rect(zuobanX,zuobanY,20,200); Rect youban=new Rect(youbanX,youbanY,20,200); private MyBallPanel Unit; static { try { background = ImageIO.read(MyBallPanel.class.getResource("BG_1.jpg")); qiu = ImageIO.read(MyBallPanel.class.getResource("qiu.png")); YOUBAN = ImageIO.read(MyBallPanel.class.getResource("11.jpg")); ZUOBAN = ImageIO.read(MyBallPanel.class.getResource("222.jpg")); kaishi = ImageIO.read(MyBallPanel.class.getResource("kaishi.jpg")); jieshu1 = ImageIO.read(MyBallPanel.class.getResource("1p win.png")); jieshu2 = ImageIO.read(MyBallPanel.class.getResource("2p win.png")); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } public MyBallPanel(){ this.InitRectList(); this.addMouseListener(this); } public void paint(Graphics g) { super.paint(g); paintBackground(g); paintQiu(g); paintBan(g); paintKaiShi(g); paintJieShu(g); g.setColor(Color.RED); paintWeiZhi(g); // 画 // 是用数组方式存储,以及判断 // 每次运动都需要和每一个砖块进行对比 ,以及砖块四边进行对比 } private void paintWeiZhi(Graphics g) { // TODO 自动生成的方法存根 if(flag==true){ Font f1 = new Font(Font.SANS_SERIF,Font.BOLD,40); g.setFont(f1); g.setColor(Color.WHITE); g.drawString(" 1P", 80, 80); g.drawString(" 2P",1060, 80); } } private void paintJieShu(Graphics g) { // TODO 自动生成的方法存根 if(flag==false){ if(jj1==1) g.drawImage(jieshu1, 0,jjY, 1200, 1000, null); else g.drawImage(jieshu2, 0,jjY, 1200, 1000, null); } } private void paintKaiShi(Graphics g) { // TODO 自动生成的方法存根 g.drawImage(kaishi, 0,kaishiY, 1200, 800, null); } public boolean hit(int x1,int y1, int x2, int y2, int w2, int h2) { if(x1>=x2&&x1<=x2+w2&&y1>=y2&&y1<=y2+h2) return true; return false; } public boolean hit(int x1,int y1,int w1,int h1,int x2,int y2,int w2,int h2 ) { if(x1>=x2&&x1>=x2+w2) { return false; }else if(x1<=x2&&x1+w1<=x2) { return false; }else if(y1>=y2&&y1>=y2+h2) { return false; }else if(y1<=y2&&y1+h1<=y2) { return false; } return true; } private void paintBan(Graphics g) { // TODO 自动生成的方法存根 g.drawImage(ZUOBAN, zuobanX, zuobanY,zuobanW,zuobanH,null); g.drawImage(YOUBAN, youbanX, youbanY,youbanW,zuobanH,null); } private void paintQiu(Graphics g) { // TODO 自动生成的方法存根 g.drawImage(qiu, ballx, bally, 60, 60, null); } private void paintBackground(Graphics g) { // TODO 自动生成的方法存根 g.drawImage(background, 0, 0, 1200, 800, null); }