1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 弹球小游戏(Java实现)

弹球小游戏(Java实现)

时间:2021-11-23 12:28:10

相关推荐

弹球小游戏(Java实现)

详细代码(GBK格式编码)

package com.draw;import javax.swing.Timer;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;public class PinBall {//创建窗口对象Frame frame = new Frame("弹球小游戏");//设置游戏界面宽度和高度private final int TABLE_WIDTH = 250;private final int TABLE_HEIGHT = 400;//设置球拍的宽度和高度private final int RACKET_WIDTH = 65;private final int RACKET_HEIGHT = 15;//设置小球的大小private final int BALL_SIZE = 15;//定义变量,记录小球坐标private int ballX = 80;private int ballY = 20;//定义变量,记录小球在X,Y轴分别移动的速度private int speedX = 5;private int speedY = 10;//定义变量,记录球拍坐标private int racketX = 100;private final int racketY = 350;//Y坐标固定//定义变量,标识当前游戏是否结束private boolean isOver = false;//声明一个定时器private Timer timer;//自定义一个类,继承canvas,充当画布private class MyCanvas extends Canvas {@Overridepublic void paint(Graphics g) {//TODO 在这里绘制内容if (isOver) {//第一部分 游戏结束g.setColor(Color.BLUE);g.setFont(new Font("Times", Font.BOLD, 30));g.drawString("游戏结束!", 50, 180);} else {//第二部分 游戏中//绘制小球g.setColor(Color.GREEN);g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);//绘制球拍g.setColor(Color.CYAN);g.fillRect(racketX, racketY, RACKET_WIDTH, RACKET_HEIGHT);}}}public void init() {//创建画布区域MyCanvas drawArea = new MyCanvas();//组装视图,及游戏逻辑的控制//实现球拍坐标的变化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 < (TABLE_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 >= (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(100, task);timer.start();drawArea.setPreferredSize(new Dimension(TABLE_WIDTH, TABLE_HEIGHT));frame.add(drawArea);//设置frame最佳大小,并可视化frame.pack();frame.setVisible(true);}public static void main(String[] args) {new PinBall().init();}}

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。