弹球游戏实现原理:

隔一定时间(小于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
相关文章:
如何选购建站域名与空间?自助平台全解析
如何使用Golang安装API文档生成工具_快速生成接口文档
如何在阿里云通过域名搭建网站?
香港服务器部署网站为何提示未备案?
建站之星免费版是否永久可用?
建站之家VIP精选网站模板与SEO优化教程整合指南
javascript中的try catch异常捕获机制用法分析
建站之星如何配置系统实现高效建站?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何快速搭建高效香港服务器网站?
建站之星后台管理:高效配置与模板优化提升用户体验
官网建站费用明细查询_企业建站套餐价格及收费标准指南
如何配置FTP站点权限与安全设置?
建站OpenVZ教程与优化策略:配置指南与性能提升
如何通过建站之星自助学习解决操作问题?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
网站制作企业,网站的banner和导航栏是指什么?
如何选择PHP开源工具快速搭建网站?
建站之星会员如何解锁更多建站功能?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何获取PHP WAP自助建站系统源码?
如何快速辨别茅台真假?关键步骤解析
建站主机如何安装配置?新手必看操作指南
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
定制建站如何定义?其核心优势是什么?
南京网站制作费用,南京远驱官方网站?
如何选择可靠的免备案建站服务器?
网站制作公司排行榜,抖音怎样做个人官方网站
定制建站价位费用解析与套餐推荐全攻略
太平洋网站制作公司,网络用语太平洋是什么意思?
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
简单实现Android验证码
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
制作表格网站有哪些,线上表格怎么弄?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何配置IIS站点权限与局域网访问?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
建站之星伪静态规则如何正确配置?
广东企业建站网站优化与SEO营销核心策略指南
网站制作员失业,怎样查看自己网站的注册者?
如何正确下载安装西数主机建站助手?
如何做网站制作流程,*游戏网站怎么搭建?
如何通过多用户协作模板快速搭建高效企业网站?
兔展官网 在线制作,怎样制作微信请帖?
建设网站制作价格,怎样建立自己的公司网站?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何用景安虚拟主机手机版绑定域名建站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
*请认真填写需求信息,我们会在24小时内与您取得联系。