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 ; |
|
ArrayList<Rect>rectList= new ArrayList<Rect>(); |
|
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 ;i<rectList.size();i++) |
{ |
temp =rectList.get(i); |
if (hit(ball.x,ball.y,ball.width,ball.height,temp.x,temp.y,temp.width,temp.height)) |
{ |
|
switch (f) |
{ |
case 1 : |
if (ball.x- 3 <temp.x+temp.width&&ball.x+ 3 >temp.x+temp.width) |
f = 2 ; |
else |
f = 4 ; |
break ; |
case 2 : |
if (ball.x- 3 <temp.x+temp.width&&ball.x+ 3 >temp.x+temp.width) |
f = 3 ; |
else |
f = 1 ; |
break ; |
case 3 : |
if (ball.x- 3 <temp.x+temp.width&&ball.x+ 3 >temp.x+temp.width) |
f = 4 ; |
else |
f = 2 ; |
break ; |
case 4 : |
if (ball.x- 3 <temp.x+temp.width&&ball.x+ 3 >temp.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 ); |
} |
by: 发表于:2017-08-29 16:25:25 顶(0) | 踩(0) 回复
??
回复评论