JAVA_AWT 实现简单弹球小游戏

学习AWT中的绘图功能的小案例:教程位置:这里

package com.lzy.pinballgame;import java.awt.*;
import java.awt.event.*;/*** @author: lzy* @description: 弹球小游戏Demo* @date: 2020-09-23-10:01*/
public class PinBall {//创建frame,确定常量大小Frame frame = new Frame("pinball game demo");private final int TABLE_WIDTH = 300;private final int TABLE_HEIGHT = 400;private final int RACKET_WIDTH = 80;private final int RACKET_HEIGHT = 20;private final int BALL_SIZE = 15;//定义变量记录小球的坐标private int ballX = 120;private int ballY = 20;//定义小球在想,要,方向上的移动速度public int speedup=0;private int speedX = 5;private int speedY = 5;//定义球拍的初始化坐标private int racketX = 120;private final int racketY = 340;//定义变量是否当前游戏已经结束private boolean isOver = false;//声明一个定时器private javax.swing.Timer timer;public int sum=0;//自定义类,继承canvas当画布private class MyCanvas extends Canvas {@Overridepublic void paint(Graphics g) {//在这里绘制内容//游戏结束,绘制结束画面if (isOver) {//mc.repaint();g.setColor(Color.BLUE);g.setFont(new Font("Times", Font.BOLD, 30));g.drawString("Game Over", 50, 200);}//游戏中//绘制小球g.setColor(Color.red);g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);//绘制球拍g.setColor(Color.gray);g.fillRect(racketX, racketY, RACKET_WIDTH, RACKET_HEIGHT);g.setColor(Color.cyan);g.drawString("fenshu:"+sum,0,TABLE_HEIGHT-10);g.drawString("nandu:"+speedup,60,TABLE_HEIGHT-10);}}//创建绘制区域,实例化我们的自定义类MyCanvas mc = new MyCanvas();public void init() {//组装视图和游戏逻辑//完成球拍坐标的变换KeyListener kl = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {//所有键盘上的案件都可以通过int来获取int keyCode = e.getKeyCode();if (keyCode == KeyEvent.VK_LEFT) {//向左移动,但是我们不能移动出去了。所以需要判断if (racketX > 0) {racketX -= 10;}}if (keyCode == KeyEvent.VK_RIGHT) {//向右移动,但是需要注意的是,我们的定点是在左上角,在确认是否到达便捷的时候要加上球拍长度if (racketX + RACKET_WIDTH < TABLE_WIDTH) {racketX += 10;}}}};//注册监听,两个都可以作为事件源,为了保证可以被监听到我们把两个都注册监听frame.addKeyListener(kl);mc.addKeyListener(kl);//小球坐标的控制//创建监听器ActionListener ballListener= new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//更新小球坐标,重绘界面//首先判断x坐标,修正速度if(ballX<=0 || ballX+BALL_SIZE>TABLE_WIDTH){speedX=-speedX;}if (ballY<=0 || (ballY+BALL_SIZE>racketY && ballX>racketX && ballXracketY &&(ballXracketX+RACKET_WIDTH)){timer.stop();isOver=true;mc.repaint();}if(ballY+BALL_SIZE>=racketY){sum++;speedup++;}ballX+=speedX;ballY+=speedY;mc.repaint();}};//定时器,多久执行一次,每隔这个时间执行的代码是什么//timer = new Timer(50, ballListener);timer=new javax.swing.Timer(50, ballListener);timer.start();mc.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));frame.add(mc);frame.pack();frame.setVisible(true);}public static void main(String[] args) {new PinBall().init();}
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部