用键盘"<--"和"-->"方向键控制黑板的左右移动,从而实现接住小球使小球反弹回去

效果图显示

当掉下去时显示“游戏结束”

代码实现

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class PinBall {//创建窗口对象private Frame frame = new Frame("弹球小游戏");//窗口宽度private final int WIDTH = 300;//窗口高度private final int HEIGHT = 400;//板子的宽度和高度private final int RACKET_WIDTH = 60;private final int RACKET_HEIGHT = 20;//记录板子的坐标private int racketX = 120;//板子只能水平移动,不能垂直移动private final int racketY = 340;//小球的大小,即圆的直径长度private final int BALL_SIZE = 16;//记录小球的坐标private int ballX = 120;private int ballY = 20;//记录小球在x和y轴方向上分别移动的速度private int speedX = 5;private int speedY = 10;//标识游戏是否结束,true为结束private boolean isOver = false;//声明定时器private Timer timer;//自定义类,继承canvas,充当画板private class MyCanvas extends Canvas{@Overridepublic void paint(Graphics g) {//绘制内容if(isOver){//游戏结束g.setColor(Color.blue);g.setFont(new Font("Times",Font.BOLD,30));g.drawString("游戏结束!",50,200);}else{//游戏中//绘制小球g.setColor(Color.RED);g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);//绘制板子g.setColor(Color.blue);g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);}}}//创建绘画区域MyCanvas drawArea = new MyCanvas();public void init(){//完成球拍坐标的变化KeyListener listener = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {//获取当前按下的键int keyCode = e.getKeyCode();if(keyCode == KeyEvent.VK_LEFT){//向左移动的左箭头if(racketX > 0){//不在左边时racketX -= 20;}}if(keyCode == KeyEvent.VK_RIGHT){//向右移动的右箭头if(racketX < (WIDTH - RACKET_WIDTH)){//桌面宽度减去球拍宽度racketX += 20;}}}};//给frame窗口和drawArea绘画区域注册监听器frame.addKeyListener(listener);drawArea.addKeyListener(listener);//小球坐标的控制ActionListener task = new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//更新小球坐标,重绘画面//根据边界范围修正正反速度//当小球碰到左右边界时修改小球的运动方向if(ballX <= 0 || ballX >= (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)){if(ballY == HEIGHT){//当小球掉到最底部位置时才让其游戏结束停止运行//当前小球超出球拍水平线并且超出球拍宽度的范围,游戏结束timer.stop();//停止计时器System.out.println("游戏已结束运行!");//修改游戏标记为结束isOver = true;//重绘画面drawArea.repaint();}}//更新小球的坐标ballX += speedX;ballY  += speedY;//重绘界面drawArea.repaint();}};//每隔100毫秒执行task监听器刷新绘图界面timer = new Timer(100,task);timer.start();//开始执行//设置画板的大小drawArea.setSize(WIDTH,HEIGHT);frame.add(drawArea);frame.setLocation(700,250);//窗口位置居中显示frame.pack();//最佳大小frame.setVisible(true);//窗口显示//单击右上角的X结束运行frame.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {System.out.println("游戏已结束运行!");System.exit(0);}});}public static void main(String[] args) {new PinBall().init();}
}

弹球小游戏(Java)相关推荐

  1. 弹球小游戏java代码_java实现简单的弹球游戏

    弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint ...

  2. 弹球小游戏java代码_android 发射弹球小游戏 附完整源码下载

    [实例简介]android 弹球游戏制作 [实例截图]  [核心代码] package wyf.ytl; //声明包语句 public class BallGoThread extends Threa ...

  3. java小游戏实训目的_Java弹球小游戏实验报告.doc

    Java弹球小游戏实验报告 滨江学院 Java程序设计实验报告 题 目 弹球小游戏 姓 名 许浩 学 号 20112346064 学 院 滨江学院 专 业 网络工程 年 级 2011级 指导教师 张舒 ...

  4. 弹弹球小游戏(Java)

    游戏规则:利用键盘上的->或者<-控制方向,用球拍接住小球,否则游戏结束! 该代码主要利用了GUI的绘图,用Timer保证球拍和小球位置的更新,用适配器KeyAdapter获取用户的指令, ...

  5. 弹球小游戏(Java实现)

    详细代码(GBK格式编码) package com.draw;import javax.swing.Timer; import java.awt.Canvas; import java.awt.Col ...

  6. 用Java写一个弹球小游戏

    目录 一.前言 二.弹球小游戏 (1)分析游戏 (2)游戏代码 一.前言 想做出这个游戏,最好是已经学习过了AWT或者Swing编程,知道了图形界面的知识,也知道绘图.这个游戏可以帮你更好的打牢基础. ...

  7. 用Processing编写弹球小游戏

    Processing的编码逻辑和Java很像,我在学习Java之前拿Processing练习过一段时间,在这篇文章中我用processin制作了一个弹球小游戏.有两名玩家,player1和player ...

  8. 大一下期末javaGUI课设之swing+MYSQL实现“弹珠传说”弹球小游戏

    目录 一.游戏概述 二.需求分析 三.运行环境 四.详细设计 1.游戏初始化界面 2.单人闯关模式的设计 3.双人合作模式 4.数据库连接与操作 5.数据库连接,排行榜 五.总结 说明 该课设一共分成 ...

  9. 弹球小游戏附全源代码

    GUI实现弹球小游戏 先看一下游戏效果图. 一个简单的Demo.也比较简单,新手试着做一做完善改进. 源代码 import Com.Style.FontStyle; import javax.swin ...

最新文章

  1. 两台服务器实现会话共享
  2. 前端学习(2148):webpack-less图片文件的转化
  3. 学习笔记4-C语言-开关、循环、跳转
  4. PLSQL 日期格式修改
  5. php生成excel范例,支持任意行列
  6. 以V神为灵感创作的加密艺术NFT“EthBoy”以260ETH高价售出
  7. Svn服务器之必须提交更改日志篇
  8. java 关闭进程_java在进程启动和关闭.exe程序
  9. 【SUSE Linux kernel版本升级】SUSE Linux Enterprise Server 12 SP5
  10. 常用IP扫描工具整理一下
  11. 通过nali命令统计访问的IP输入地理区域等作用
  12. 全面了解#中国加密艺术圈、元宇宙和就业
  13. bzoj4448(LCT)
  14. 萌言萌语|测试工作日报及总结
  15. zookeeper基础知识以及常用命令
  16. 阿里云全球交付中心正式成立,打造一流的全球服务能力
  17. Linux下利用ssh远程文件传输 传输命令 scp
  18. Android-vold源码分析之连接电脑OTG(11)
  19. 思维导图FreeMind
  20. 中国移动网上商城有多坑?

热门文章

  1. 进制转化器 python3.10
  2. 不使用数学函数开方运算的情况下,求解开方运算
  3. python2 ‘ascii‘ codec can‘t encode / decode 错误
  4. python购物车结算_python购物车
  5. 【搞笑视频】胡戈恶搞《血战到底》--斗地主-胡戈放弃恶搞制作《血战到底》MV曝光......绝对要支持呀!!!
  6. 菜鸟学习----前端vue.js学习01
  7. Qt4.8.6与Qt5.4.0的安装详解
  8. 020.1.1 collections集合工具类
  9. 浅谈棋盘覆盖问题(算法思想及伪代码)
  10. Iowait的成因、对系统影响及对策