java AWT 绘图,实现弹球游戏,有实现keylistener,timer功能
来源:互联网 发布:淘宝助理百世快递模板 编辑:程序博客网 时间:2024/06/06 20:43
Timer(int delay, ActionListener listener):每间隔delay毫秒,系统自动触发ActionListener监听器里的事件处理器(actionPerformed()方法)。
package javaAWT;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.util.Random;import javax.swing.Timer;public class PinBall { // 桌面大小 private final int TABLE_WIDTH = 300; private final int TABLE_HEIGHT = 400; // 球拍的垂直位置 private final int RACKEY_Y = 340; // 球拍大小 private final int RACKET_HEIGHT = 20; private final int RACKET_WIDTH = 60; // 球大小 private final int BALL_SIZE = 16; private Frame frame = new Frame("PinBall"); Random random = new Random(); // 小球纵向运行速度 private int ySpeed = 10; // 返回一个-0.5~0.5的比率,用于控制小球 的运行方向 private double xyRate = random.nextDouble() - 0.5; // 小球的横向运行速度 private int xSpeed = (int)(ySpeed * xyRate *2); // 小球的坐标 private int ballX = random.nextInt(200) + 20; private int ballY = random.nextInt(10) + 20; // 球拍的水平位置 private int racketX = random.nextInt(200); private MyCanvas tableArea = new MyCanvas(); Timer timer; // 游戏结束标志 private boolean isLose = false; public void init() { // 设置桌面区域的最佳大小 tableArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT)); frame.add(tableArea); // 定义键盘监听器 KeyAdapter keyProcessor = new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub super.keyPressed(e); // 按下向左,向右键时,球拍左右称动 if (e.getKeyCode() == KeyEvent.VK_LEFT) { if (racketX > 0) racketX -= 10; } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { if (racketX < TABLE_WIDTH - RACKET_WIDTH) racketX += 10; } } }; // 为窗口和tableArea对象分别添加键盘监听器 frame.addKeyListener(keyProcessor); tableArea.addKeyListener(keyProcessor); // 定义每0.1秒执行一次的事件监听器 ActionListener taskPerformer = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub // 如果小球碰到左边框 if (ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE) { xSpeed = -xSpeed; } // 如果小球高度超过球拍的位置 ,且横向不在球拍范围内,游戏结束。 if (ballY >= RACKEY_Y - BALL_SIZE && (ballY < racketX || ballX > racketX + RACKET_WIDTH)) { timer.stop(); isLose = true; tableArea.repaint(); } // 如里小球位于球拍之内,且到达球拍的位置,小球反弹 else if (ballY <= 0 || (ballY >= RACKEY_Y - BALL_SIZE && ballX > racketX && ballX <= racketX + RACKET_WIDTH)) { ySpeed = - ySpeed; } // 小球坐标增加 ballY += ySpeed; ballX += xSpeed; tableArea.repaint(); } }; timer = new Timer(100, taskPerformer); timer.start(); frame.pack(); frame.setVisible(true); } class MyCanvas extends Canvas { @Override public void paint(Graphics g) { // TODO Auto-generated method stub super.paint(g); // 如果游戏已结整 if (isLose) { g.setColor(new Color(255, 0, 0)); g.setFont(new Font("Times", Font.BOLD, 30)); g.drawString("Game Over!", 50, 200); } // 如果游戏未结整 else { // 设置颜色,并绘制小不球 g.setColor(new Color(240, 240, 80)); g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE); // 设置颜色,并绘制球拍 g.setColor(new Color(80, 80, 200)); g.fillRect(racketX, RACKEY_Y, RACKET_HEIGHT, RACKET_HEIGHT); } } } public static void main(String[] args) { new PinBall().init(); }}
阅读全文
0 0
- java AWT 绘图,实现弹球游戏,有实现keylistener,timer功能
- java实现弹球游戏
- Android 实现弹球游戏
- java AWT实现画图功能
- 弹球游戏的编程实现
- 原生JavaScript实现弹球游戏
- KeyListener-实现键盘按钮启动功能
- JAVA-如何实现TIMER功能
- JAVA-如何实现TIMER功能
- JAVA-如何实现TIMER功能
- curses库实现的弹球游戏
- 非html5实现js版弹球游戏
- HTML5与Javascript 实现网页弹球游戏
- java spring实现定时器功能Timer
- java 弹球游戏
- c++ 实现绘图功能
- ReactJS实战之简易弹球游戏的实现
- java awt绘图
- # Pixhawk开发(文档小结)
- 函数声明与函数表达式的区别
- Who's in the Middle(poj2388 排序)
- Pycharm连接GitHub笔记
- Java中的有参无参构造方法与继承的关系
- java AWT 绘图,实现弹球游戏,有实现keylistener,timer功能
- Maven项目的pom.xml常见配置(Eclipse)
- 学习计算机操作系统之-操作系统组成
- Python 筛选(finditer)
- java中锁的优化 -- JVM对synchronized的优化
- 欢迎使用CSDN-markdown编辑器
- 你好,React!
- springMVC中的controller层
- Hibernate-day03 Hibernate注解开发