java实现简单的弹球游戏

发布时间 - 2026-01-11 02:42:19    点击率:

弹球游戏实现原理:

  隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint()方法来实现。这里我们用了键盘监听事件、Timer类等。

游戏说明:

  该弹球游戏中的小球会随着时间增加速度且速度最多是横向速度和垂直速度为10。当小球的y坐标(垂直坐标)大于球拍的y坐标(垂直坐标)即判断游戏结束。控制台显示的是小球的x方向的速度和y方向的速度。

import java.awt.*;
import java.util.Random;
import javax.swing.Timer;
import java.awt.event.*; 
public class PinBall 
{
 private Frame f=new Frame("弹球游戏");
 Random rand=new Random();
 //桌面的宽度以及高度
 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 int racketX=rand.nextInt(24)*10;
 private int racketY=300;
 //小球的大小、运行速度、坐标
 private final int BALL_SIZE=16;
 private int ySpeed=1;
 private double xyRate=1;
 private int xSpeed=(int)(xyRate*ySpeed);
 private int ballX=rand.nextInt(284);
 private int ballY=1;
 //创建画布
 private MyCanvas tableArea=new MyCanvas();
 //定义时间类
 Timer timer;
 //游戏是否结束的旗标
 private boolean isLose=false;
 //设置游戏等级
 private int time_times=1;
 public void init(){
  tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
  f.add(tableArea);
  //定义键盘监听器
  KeyAdapter keyProcessor=new KeyAdapter()
  {
   public void keyPressed(KeyEvent ke){
    if(ke.getKeyCode()==KeyEvent.VK_LEFT){
     if(racketX>0)
      racketX-=10;
    }
    if(ke.getKeyCode()==KeyEvent.VK_RIGHT){
     if(racketX<TABLE_WIDTH-RACKET_WIDTH)
      racketX+=10;
    }
   }

  };
  f.addKeyListener(keyProcessor);
  //tableArea.addKeyListener(keyProcessor);
  ActionListener taskPerformer=evt->
  {
   //小球碰到左边框或右边框
   if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){
    xSpeed=-xSpeed;
   }
   if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH-BALL_SIZE)){
    timer.stop();
    isLose=true;
    tableArea.repaint();
   }else if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<=racketX+RACKET_WIDTH)){
    ySpeed=-ySpeed;
   }
   ballY+=ySpeed;
   ballX+=xSpeed;
   tableArea.repaint();
   if((xSpeed<10&&xSpeed>-10)&&(ySpeed<10&&ySpeed>-10)){
    time_times++;
   }
   if(time_times==10){
    if(xSpeed>0){
     xSpeed++;
    }else{
     xSpeed--;
    }
    if(ySpeed>0){
     ySpeed++;
    }else{
     ySpeed--;
    }
    time_times-=10;
    System.out.println(xSpeed+" "+ySpeed);
   }
  };
  timer=new Timer(100,taskPerformer);
  timer.start();
  f.pack();
  f.setVisible(true);
 }
 class MyCanvas extends Canvas
 {
  public void paint(Graphics g){
   if(isLose){
    g.setColor(new Color(255,0,0));
    g.setFont(new Font("Times",Font.BOLD,30));
    g.drawString("游戏结束",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,racketY,RACKET_WIDTH,RACKET_HEIGHT);
   }
  }
 }
 public static void main(String[] args) 
 {
  new PinBall().init();
 }
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # 弹球游戏  # Java实现简单的弹球游戏  # Java实力弹弹球实现代码  # 解析Java中的定时器及使用定时器制作弹弹球游戏的示例  # Java基于swing实现的弹球游戏代码  # java实现弹球小游戏  # 的是  # 子类  # 重写  # 旗标  # 是一个  # 最多  # 用了  # 只需要  # 都得  # 来实现  # 大家多多  # 运行速度  # 游戏等级  # 游戏中  # 抽象类  # racketX  # nextInt  # RACKET_WIDTH  # TABLE_HEIGHT  # RACKET_HEIGHT 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: ,在苏州找工作,上哪个网站比较好?  如何在宝塔面板创建新站点?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  JS弹性运动实现方法分析  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  php 三元运算符实例详细介绍  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何在阿里云域名上完成建站全流程?  做企业网站制作流程,企业网站制作基本流程有哪些?  jQuery 常见小例汇总  如何在阿里云购买域名并搭建网站?  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  详解Android图表 MPAndroidChart折线图  javascript中的try catch异常捕获机制用法分析  如何快速生成高效建站系统源代码?  JS中对数组元素进行增删改移的方法总结  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  如何在Windows虚拟主机上快速搭建网站?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  Laravel集合Collection怎么用_Laravel集合常用函数详解  如何在新浪SAE免费搭建个人博客?  如何在腾讯云免费申请建站?  Python文件操作最佳实践_稳定性说明【指导】  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  如何在IIS管理器中快速创建并配置网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  ,南京靠谱的征婚网站?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何在云主机上快速搭建网站?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  香港服务器租用每月最低只需15元?  Windows Hello人脸识别突然无法使用  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  如何选择可靠的免备案建站服务器?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  如何快速使用云服务器搭建个人网站?  如何选择PHP开源工具快速搭建网站?  网站建设保证美观性,需要考虑的几点问题!  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  太平洋网站制作公司,网络用语太平洋是什么意思?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】