Java实现简单的弹球游戏
更新时间:2020年12月31日 09:00:36 作者:程序猿啊哈
这篇文章主要为大家详细介绍了Java实现简单的弹球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了Java实现简单的弹球游戏的具体代码,供大家参考,具体内容如下
该程序主要是用于对java图形化界面编程进行联系,程序实现全部采用的是AWT包下的类。
程序仅做参考,供学习使用。
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.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.Timer; public class PinBallGame { //创建窗口对象 private Frame frame = new Frame("弹球游戏"); //桌面宽度 private final int TABLE_WTDTH = 300; //桌面高度 private final int TABLE_HEIGHT = 400; //球拍的高度和宽度 private final int RACKET_WIDTH = 60; private final int RACKET_HETGHT = 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; //声明一个定时器 private Timer timer; //自定义一个类,继承Canvas,充当画布 @SuppressWarnings("serial") private class MyCanvas extends Canvas{ @Override public void paint(Graphics g) { //TODO 在这里绘制内容 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.PINK); g.fillRect(racketX, racketY, RACKET_WIDTH, RACKET_HETGHT); } } } //创建绘画区域 MyCanvas drawArea = new MyCanvas(); public void init() { //组装视图,游戏逻辑的控制 //完成球拍坐标的变化 KeyListener listener = new KeyAdapter() { @Override 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_WTDTH - RACKET_WIDTH)) { racketX += 10; } } } }; //给Frame和drawArea注测监听器 frame.addKeyListener(listener); drawArea.addKeyListener(listener); //小球坐标的控制 ActionListener task = new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { //根据边界范围,修正速度 if (ballX<=0 || ballX>=(TABLE_WTDTH-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(100, task); timer.start(); drawArea.setPreferredSize(new Dimension(TABLE_WTDTH,TABLE_HEIGHT)); frame.add(drawArea); //设置frame最佳大小,并可视 frame.pack(); frame.setVisible(true); frame.setLocationRelativeTo(null); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new PinBallGame().init(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Spring集成webSocket页面访问404问题的解决方法
这篇文章主要介绍了Spring集成webSocket页面访问404问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-12-12JavaEE SpringMyBatis是什么? 它和Hibernate的区别及如何配置MyBatis
这篇文章主要介绍了JavaEE Spring MyBatis是什么? 它和Hibernate的区别有哪些?如何配置MyBatis?本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08springboot中使用ConstraintValidatorContext验证两个字段内容相同
开发修改密码功能时,通过ConstraintValidator校验新密码和确认新密码的一致性,首先定义Matches注解和DTO对象,然后创建MatchesValidator类实现验证逻辑,对springboot验证字段内容相同问题感兴趣的朋友一起看看吧2024-10-10将SpringBoot项目无缝部署到Tomcat服务器的操作流程
SpringBoot 是一个用来简化 Spring 应用初始搭建以及开发过程的框架,我们可以通过内置的 Tomcat 容器来轻松地运行我们的应用,本文给大家介绍 SpringBoot 项目部署到独立 Tomcat 服务器的操作流程,需要的朋友可以参考下2024-05-05Java如何通过反射获取Constructor、Field、Method对象
反射指的是对象的反向处理操作,根据对象取得对象的来源信息,在反射的世界里面,看重的不再是一个对象,而是对象身后的组成,下面这篇文章主要给大家介绍了关于Java如何通过反射获取Constructor、Field、Method对象的相关资料,需要的朋友可以参考下2022-06-06
最新评论