java 弹球游戏

ball.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class ball extends JFrame {
	MyPanel mp;
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        set se=new set();
	}
	public ball(int n){

		mp=new MyPanel(n);
		mp.addMouseListener(mp);
		mp.addMouseMotionListener(mp);
		this.add(mp);
		this.setTitle("是男人就坚持100s");
		this.setLocation(200, 100);
		this.setSize(700, 610);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setResizable(false);
		this.setVisible(true);
	}

}
class MyPanel extends JPanel implements MouseListener,MouseMotionListener{
    boolean touch=false;
	int x=100,y=100;
	String string="坚持时间:0.0";
	double time=0.0;
	int n;
	/**
	 * 创建一个自己的画板
	 */
    //创建敌方小球
    Vector<enemy> ee=new Vector<>();
     public MyPanel(int m){
    	 n=m;
    	 for (int i = 0; i <n; i++) {
			ee.add(new enemy());
		}
     }
	 public void paint(Graphics g) {
			for (int i = 0; i < ee.size(); i++) {
				enemy et1=ee.get(i);
				if (((x-15)-(et1.getX()-et1.getR()/2))*((x-15)-(et1.getX()-et1.getR()/2))+((y-15)-(et1.getY()-et1.getR()/2))*((y-15)-(et1.getY()-et1.getR()/2))<=(et1.getR()/2+15)*(et1.getR()/2+15)) {
				     touch=true;
				}

			}
		 super.paint(g);
		 super.setBackground(Color.BLACK);
		
		for (int i = 0; i < ee.size(); i++) {
			enemy etEnemy=ee.get(i);
			etEnemy.run();
			g.setColor(etEnemy.getColor());
			g.fillOval(etEnemy.getX(), etEnemy.getY(), etEnemy.getR(), etEnemy.getR());
		}
		g.setColor(Color.yellow);
    	g.fillRect(x, y, 30, 30);
    	g.drawString(string, 150, 10);
    	if (!touch) {
			repaint();
			time+=0.004;
			string="坚持时间:"+time;
		}
    	else {
    		g.setFont(new Font("宋体",Font.BOLD,20));
    		g.drawString("游戏结束,坚持时间:"+time, 150, 150);
    		time=0;
    		string="坚持时间:0.0";
    		
		}
    	
   }

	@Override
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		touch=false;
		repaint();
		
	}

	@Override
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stu
		x=e.getX();
		y=e.getY();
		if(x>=660||x<=1||y>=550||y<=1){
			touch=true;
		 }
		for (int i = 0; i < ee.size(); i++) {
			enemy et1=ee.get(i);
			if (((x-10)-(et1.getX()-et1.getR()/2))*((x-10)-(et1.getX()-et1.getR()/2))+((y-10)-(et1.getY()-et1.getR()/2))*((y-10)-(et1.getY()-et1.getR()/2))<(et1.getR()/2+10)*(et1.getR()/2+10)) {
			    
			     touch=true;
			}

		}
	}

	
}
class set extends JFrame{
    int count;
    JPanel jp,jp1;
	JLabel jl;
	JTextField jtf;
	JButton jb;
	set(){
		jp=new JPanel();
		jp1=new JPanel();
		jl=new JLabel("小球个数:");
		jtf=new JTextField(10);
		jb=new JButton("确定");
		jb.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				count=(int)Integer.valueOf(jtf.getText());
				setVisible(false);
				ball b=new ball(count);
			}
		});

		jp.add(jl);
		jp.add(jtf);
		jp1.add(jb);
	
		this.add(jp);
		this.add(jp1);
		
		this.setTitle("设定小球个数");
		this.setLayout(new GridLayout(2, 1));
		this.setLocation(400, 200);
		this.setSize(153,145);
		this.setResizable(false);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.setVisible(true);
	}
}


enemy.java

import java.awt.Color;

public class enemy implements Runnable{

   int x,y;
   private Color color;//小球颜色
   private int R=34;//小球半径
   private int xSpeed;//小球x轴速度
   private int ySpeed;//小球y轴速度
   int a,b,c;
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			Thread.sleep(3);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		x=getX()+xSpeed;
		y=getY()+ySpeed;
		if ((getX()+R)>690||getX()<0) {
			xSpeed=-xSpeed;
		}
		if (getY()<0||(getY()+R)>580) {
			ySpeed=-ySpeed;
		}
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
	public Color getColor() {
		return color;
	}
	public void setColor(Color color) {
		this.color = color;
	}
	public int getR() {
		return R;
	}
	public void setR(int r) {
		R = r;
	}
	public int getxSpeed() {
		return xSpeed;
	}
	public void setxSpeed(int xSpeed) {
		this.xSpeed = xSpeed;
	}
	public int getySpeed() {
		return ySpeed;
	}
	public void setySpeed(int ySpeed) {
		this.ySpeed = ySpeed;
	}
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
	public int getC() {
		return c;
	}
	public void setC(int c) {
		this.c = c;
	}

	public enemy(){
		//rgb随机颜色的设置
		a=(int)(Math.random()*255);
		b=(int)(Math.random()*255);
		c=(int)(Math.random()*255);

	    //随机x y速度
	    xSpeed=(int)(Math.random()*8+3);
	    ySpeed=(int)(Math.random()*8+3);
	    color=new Color(a, b, c);
	    //随机坐标
	    x=(int)(Math.random()*600+1);
	    y=(int)(Math.random()*500+1);
	}
	
}


package org.crazyit.ball; import java.awt.Image; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; /** * 小球对象 * * @author yangenxiong yangenxiong2009@gmail.com * @author Kelvin Mak kelvin.mak125@gmail.com * @version 1.0 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br>Copyright (C), 2009-2010, yangenxiong * <br>This program is protected by copyright laws. */ public class Ball extends BallComponent { // 定义球的竖向速度 private int speedY = 10; // 定义弹球的横向速度 private int speedX = 8; // 定义是否在运动 private boolean started = false; // 定义是否结束运动 private boolean stop = false; /** * m 有参数构造器 * * @param panelWidth * int 画板宽度 * @param panelHeight * int 画板高度 * @param offset * int 位移 * @param path * String 图片路径 */ public Ball(int panelWidth, int panelHeight, int offset, String path) throws IOException { // 调用父构造器 super(panelWidth, panelHeight, path); // 设置y坐标 this.setY(panelHeight - super.getImage().getHeight(null) - offset); } /** * 设置横向速度 * * @param speed * int 速度 * @return void */ public void setSpeedX(int speed) { this.speedX = speed; } /** * 设置竖向速度 * * @param speed * int 速度 * @return void */ public void setSpeedY(int speed) { this.speedY = speed; } /** * 设置是否在运动 * * @param b * boolean * @return void */ public void setStarted(boolean b) { this.started = b; } /** * 设置是否结束运动 * * @param b * boolean * @return void */ public void setStop(boolean b) { this.stop = b; } /** * 返回横向速度 * * @return int 速度 */ public int getSpeedX() { return this.speedX; } /** * 返回竖向速度 * * @return int 速度 */ public int getSpeedY() { return this.speedY; } /** * 是否在运动 * * @return boolean 是否在运动 */ public boolean isStarted() { return this.started; } /** * 是否已经结束运动 * * @return boolean 是否已经结束运动 */ public boolean isStop() { return this.stop; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值