弹球游戏

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.Timer;

public class BallGame {
//创建窗口对象
	Frame frame = new Frame();
//设置窗口的大小
	private final int framewidth = 300;
	private final int frameheight = 400;
//设置小球的位置
	private int ballX = 200;
	private int ballY = 100;
//设置球拍的位置
	private int batX = 20;
	private final int batY = 340;
//设置小球的大小
	private final int ballsize = 10;
//设置球拍的大小
	private final int batwidth = 60;
	private final int batheight = 20;
//设置小球的速度
	private int speedX = 5;
	private int speedY = 10;
	private Timer timer;
	/*
	 * //设置球拍的速度 private final int speedbat = 8;
	 */
//游戏是否结束
	boolean isOver = false;
//创建画布
	private class MyCanvas extends Canvas {
		public void paint(Graphics g) {
			if(isOver == false) {
			//绘制小球
			g.setColor(Color.RED);
			g.fillOval(ballX, ballY,ballsize , ballsize);
			//绘制球拍
			g.setColor(Color.PINK);
			g.fillRect(batX, batY, batwidth, batheight);
			}else {
				g.setColor(Color.BLACK);
				g.setFont(new Font("宋体",Font.BOLD,30));
				g.drawString("游戏结束了!!", 80, 180);
			}
		}
	}
	MyCanvas drawArea = new MyCanvas();
//左右键注册监听
	public void init() {
		drawArea.setPreferredSize(new Dimension(framewidth,frameheight));
		frame.add(drawArea);
		KeyAdapter listener = new KeyAdapter() { 
			//注意注意:keyPressed中k是小写
			 public void keyPressed(KeyEvent e){  
				 if(e.getKeyCode() == KeyEvent.VK_LEFT) { 
					 if(batX >0) 
		             batX -= 10; 
		             }  
				 if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
		        if(batX<framewidth-batwidth) 
		        	batX += 10; 
		        	} } };
		 
		frame.addKeyListener(listener);
		drawArea.addKeyListener(listener);
		//小球坐标的控制
		ActionListener actionlistener = new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				if(ballX<=0||ballX>=(framewidth-ballsize)) {
					speedX = -speedX;
				}
				if(ballY<=0||ballY >batY - ballsize&&ballX>batX&&ballX<batX+batwidth) {
					speedY = -speedY;
				}
				if(ballY>batY - ballsize&&(ballX<batX||ballX>batX+batwidth)) {
					timer.stop();
					isOver = true;
					drawArea.repaint();
				}
				ballX = ballX + speedX;
				ballY = ballY + speedY;
				drawArea.repaint();
			}
			};
		    timer = new Timer(100,actionlistener);
			timer.start();
		    frame.pack();
		    frame.setVisible(true);
		    frame.addWindowListener(new WindowAdapter()
			{
				public void windowClosing(WindowEvent e)
				{
					System.exit(0);
				}
			});
	}
	public static void main(String[] args) {
		new BallGame().init();
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值