package GameItem;import javax.swing.Timer;
import java.awt.*;
import java.awt.event.*;public class PinBall {// 创建窗口对象private Frame frame = new Frame("弹球小游戏");// 桌面宽度private final int TABLE_WIDTH = 300;// 桌面高度private final int TABLE_HEIGHT = 400;// 球拍的高度和宽度private final int RACKET_WIDTH = 60;private final int RACKET_HEIGHT = 20;// 小球大小private final int BALL_SIZE = 16;// 定义变量,记录小球的坐标private int ballX = 120;private int ballY = 20;// 定义变量,记录小球在x和y方向上分别移动的速度private int speedY = 10;private int speedX = 5;// 定义变量,定义球拍的坐标private int racketX = 120;private final int racketY = 340;// 定义变量,标识当前游戏是否结束private boolean isOver = false;// 声明一个定时器Timer timer;// 自定义一个类,继承Canvas充当画布private class MyCanvas extends Canvas {public void paint(Graphics g) {// 绘制内容if (isOver) {// 游戏结束g.setColor(Color.red);g.setFont(new Font("Times", Font.BOLD, 30));g.drawString("游戏结束", 100, 100);} else {// 游戏中// 绘制小球g.setColor(Color.red);g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);// 绘制球拍g.setColor(Color.PINK);g.fillRect(racketX, racketY, RACKET_WIDTH, RACKET_HEIGHT);}}}// 创建绘画区域MyCanvas drawArea = new MyCanvas();public void init() {// 组装视图,游戏逻辑的控制// 完成球拍坐标的变化KeyListener listener = new KeyAdapter() {public void keyPressed(KeyEvent e) {// 获取当前按下的键int KeyCode = e.getKeyCode();if (KeyCode == KeyEvent.VK_LEFT) {// <-应该向左移动if (racketX > 0)racketX -= 10;}if (KeyCode == KeyEvent.VK_RIGHT) {// <-应该向右移动if (racketX < (TABLE_WIDTH - RACKET_WIDTH)) {racketX += 10;}}}};// 给Frame和drawArea注册监听frame.addKeyListener(listener);drawArea.addKeyListener(listener);// 小球坐标的控制ActionListener task = new ActionListener() {public void actionPerformed(ActionEvent e) {// 根据边界范围,修正速度if (ballX <= 0 || ballX >= TABLE_WIDTH - BALL_SIZE) {speedX = -speedX;}if (ballY <= 0 || (ballY > racketY - BALL_SIZE && ballX > racketX && ballX < racketX + RACKET_WIDTH)) {speedY = -speedY;}if (ballY > racketY - BALL_SIZE && (ballX < racketX || ballX > racketX + RACKET_WIDTH)) {// 当前小球超出了球拍的范围,游戏结束// 停止定时器timer.stop();// 修改游戏是否结束标记isOver = true;drawArea.repaint();}// 更新小球的坐标,重绘界面ballX += speedX;ballY += speedY;// 重绘界面drawArea.repaint();}};timer = new Timer(50, task);timer.start();// 设置frame最佳大小,并可见drawArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));frame.add(drawArea);frame.pack();frame.setVisible(true);frame.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});}public static void main(String[] args) {new PinBall().init();}
}

基于Java简单的弹珠小游戏相关推荐

  1. Java(awt)实现弹珠小游戏

    package Dzgame;import javax.swing.border.Border; import java.awt.*; import java.awt.event.*; import ...

  2. Html:简单实现弹砖块小游戏

    用html与js实现简单的弹砖块小游戏(初级) 用键盘的左右键控制一个板块让小球反弹,小球反弹到上面,与其相碰的砖块会消失,小球落地会重新开始游戏. 弹砖块小游戏--初级 第一部分body:要注意格式 ...

  3. python弹球游戏实验报告_弹珠小游戏课程设计实验报告

    摘要: 这个小程序是关于弹珠的小游戏, 游戏比较简单, 以小球的速度来区分游戏的难易. 该小程序是用左右键控制游戏的开始和挡板的方向,不让小球落到底端,当然,小球的 速度越快,该游戏的难度也就越大.此 ...

  4. java版哆啦a梦游戏_GitHub - wwz223/adventures-doraemon: 基于java实现的窗口类小游戏哆啦A梦历险记...

    基于java的哆啦a梦历险记 运行方式:打开dn.five.Test包,运行GameBoard.java即可 操作方式:空格代表开始或者暂停,键盘上下左右控制哆啦A梦移动 该项目诞生于一次java学习 ...

  5. 前端技术搭建弹珠小游戏(内附源码)

    The sand accumulates to form a pagoda ✨ 写在前面 ✨ 功能介绍 ✨ 页面搭建 ✨ 样式设置 ✨ 逻辑部分 ✨ 写在前面 上周我们实通过前端基础实现了小人逃脱,当 ...

  6. Python接弹珠小游戏源代码

    接弹珠游戏,弹珠碰到上方及左右两侧的墙壁进行反弹,反弹,可以理解成弹珠的坐标值变成相反数.当弹珠的圆心坐标值到达上方墙壁时,只需要让坐标变成负数,弹珠就可以向相反的方向移动了. import pyga ...

  7. 利用Java简单的实现围棋小游戏

    双方一对一次下棋子,单机棋子可以悔棋,双击棋子可以去掉棋子 代码如下: import java.awt.*; import java.awt.event.*; //创建棋盘的类 class Chess ...

  8. 基于JAVA实现的记忆测试小游戏

    1 需求分析与总体设计 1.1 需求分析 记忆测试系统是通过回忆法测试记忆能力,测试手段分为初级.中级和高级三个级别,使用该系统以达到测试和锻炼记忆能力的目的.同时保存每个用户的不同等级的成绩. 在记 ...

  9. 无聊的时候怎么办?教你用java写一个简单挂机打金币小游戏吧!

    无聊的时候怎么办?教你用java写一个超简单挂机打金币小游戏吧! Java写一个挂机打金币程序 1.Java的面向对象 2.基础打金的分析 3. Robot介绍以及Demo演示 4.挂机打金程序如何去 ...

最新文章

  1. AndroidAnnotations框架简单使用方法
  2. String 类型切割成数组-转int数组-升列排序-拼接字符串、需求 有如下一个字符串 91 27 46 38 50
  3. 双指针 - 长按键入
  4. STL 之map,multimap
  5. python 在线预览文件_用Python PyQt写一个在线预览图片的GUI
  6. NickLee 多層菜單
  7. 总结常见的ES6新语法特性
  8. 《Spring实战》第一章 — Spring之旅
  9. 上海服务器虚拟机系统,服务器虚拟机系统重装系统
  10. BIO | NIO | AIO (Java版)
  11. matlab语言与应用 10 数学问题的非传统解法
  12. modelsim使用第三方编辑器VS code
  13. 嵌入式linux 学习笔记--如何使用udhcpc获取动态IP
  14. SDK数据采集抓取精准主要
  15. 三级联动的数据库(贼多)
  16. 在服务器上部署自己的h5页面用于微信内部浏览器打开
  17. Ceph 分布式存储
  18. 回收站内被删除的照片如何快速恢复?
  19. Java Maven项目文件红叉叉(The compiler compliance specified is 1.6 but a JRE 1.8 is used) java编译报错
  20. echarts y轴四等分

热门文章

  1. 撸啊撸,再次撸HashMap源码,踩坑源码中构造方法!!!每次都有收获
  2. 修改checkbox样式
  3. 通过exif信息校正手机拍摄图片的旋转问题
  4. 横河电机与Power Factors宣布可再生能源资产性能管理平台的经销协议
  5. 【MacOS】使用U盘离线安装macOS Catalina
  6. Redis基础篇 高速缓存技术与Redis的庐山真面目 AUTHOR:LBY
  7. SGU326Perspective(网络流量的最大流量)(经典赛车模型)
  8. SQL Server数据库存储过程——以自定义存储过程为例
  9. 学计算机可以不熬夜吗,我不想熬夜,只想通宵的三个专业,这些通宵加班的专业你知道吗?...
  10. 【操作系统】设某磁盘有200个柱面,编号为0,1,2,...,199,磁头刚从140道移到144道完成了读写。若某时刻有11个磁盘请求分别对如下各道进行读写:56,143,198,49,132,64,