1.补充

  为了让Java绘制动画,可以借助Swing的定时器,其构造为:

方法名 说明
Timer(int delay,ActionListener listener) 每间隔delay毫秒,自动触发ActionListener里的事件处理

  

  1 import javax.swing.*;
2 import java.awt.*;
3 import java.awt.event.*;
4
5 public class ballGameDemo {
6 private final int TABLE_WIDTH = 300;
7 private final int TABLE_HEIGHT = 400;
8
9 private final int r_width = 60;
10 private final int r_height = 20;
11
12 private final int ball_size = 16;
13
14 private int ballx = 120;
15 private int bally = 20;
16
17 private int speedX = 5;
18 private int speedY = 5;
19
20 private int r_x = 120;
21 private final int r_y = 340;
22
23 private boolean isOver = false;
24
25 private Timer time;
26
27 private class MyCanvas extends Canvas {
28 @Override
29 public void paint(Graphics g){
30 if (isOver){
31 g.setColor(Color.RED);
32 g.setFont(new Font("Times",Font.BOLD,30));
33 g.drawString("Game Over",80,200);
34 }else{
35 g.setColor(Color.BLUE);
36 g.fillOval(ballx,bally,ball_size,ball_size);
37 g.drawOval(ballx,bally,ball_size,ball_size);
38
39 g.setColor(Color.PINK);
40 g.fillRect(r_x,r_y,r_width,r_height);
41 g.drawRect(r_x,r_y,r_width,r_height);
42 }
43 }
44 }
45
46 Frame frame = new Frame("弹弹球");
47
48 MyCanvas canvas = new MyCanvas();
49
50
51
52
53 public void init() {
54 KeyListener keyListener = new KeyAdapter() {
55 @Override
56 public void keyPressed(KeyEvent e) {
57 int keyCode = e.getKeyCode();
58
59 if (keyCode == KeyEvent.VK_A){
60 if (r_x > 0){
61 r_x -= 15;
62 }
63 }
64
65 if (keyCode == KeyEvent.VK_D){
66 if (r_x < (TABLE_WIDTH - r_width)){
67 r_x +=15;
68 }
69 }
70 }
71 };
72
73 frame.addKeyListener(keyListener);
74 canvas.addKeyListener(keyListener);
75
76 ActionListener actionListener = new ActionListener() {
77 @Override
78 public void actionPerformed(ActionEvent e) {
79 if (ballx <= 0 || ballx > (TABLE_WIDTH - ball_size)){
80 speedX = -speedX;
81 }
82
83 if (bally <= 0 ||(ballx > (r_y - ball_size) && ballx > r_x && ballx < (r_x+r_width))){
84 speedY = -speedY;
85 }
86
87 if (bally > (r_y-ball_size) && (ballx < r_x || ballx >(r_x+r_width))){
88 time.stop();
89 isOver = true;
90 canvas.repaint();
91 }
92
93 ballx += speedX;
94 bally += speedY;
95
96 canvas.repaint();
97 }
98 };
99 time = new Timer(10, actionListener);
100 time.start();
101
102 canvas.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
103 frame.add(canvas);
104
105 frame.addWindowListener(new WindowAdapter() {
106 @Override
107 public void windowClosing(WindowEvent e) {
108 System.exit(0);
109 }
110 });
111 frame.pack();
112 frame.setVisible(true);
113 }
114
115 public static void main(String[] args) {
116 new ballGameDemo().init();
117 }
118 }

AWT09-弹球小游戏的更多相关文章

  1. java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏

    画笔Graphics Java中提供了Graphics类,他是一个抽象的画笔,可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图. Graphics常用的画图方法如下: drawLine(): ...

  2. 初识python:tkinter 实现 弹球小游戏(面向对象)

    使用蹩脚式面相对象,实现弹球小游戏(非面向对象实现,主要介绍tk基础用法). #!/user/bin env python # author:Simple-Sir # time:2020/8/7 10 ...

  3. 初识python:tkinter 实现 弹球小游戏(非面相对象)

    通过 tkinter 采用非面相对象式实现弹球小游戏(使用蹩脚式面相对象实现). #!/user/bin env python # author:Simple-Sir # time:2020/8/3 ...

  4. java_弹球小游戏

    弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint ...

  5. c语言 弹弹球小游戏

    #include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#i ...

  6. C语言实现双人控制的战斗小游戏

    实现功能 1.双人分别控制小人移动 2.子弹碰撞 3.可改变出弹方向 4.血条实体化 前言 这个游戏是看了知乎一位非常好的老师的专栏后练手写的,(至于是哪位,知乎搜C语言小游戏最牛逼的那位) 有老师系 ...

  7. SkiaSharp 之 WPF 自绘 投篮小游戏(案例版)

    此案例主要是针对光线投影法碰撞检测功能的示例,顺便做成了一个小游戏,很简单,但是,效果却很不错. 投篮小游戏 规则,点击投篮目标点,就会有一个球沿着相关抛物线,然后,判断是否进入篮子里,其实就是一个矩 ...

  8. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  9. 拼图小游戏之计算后样式与CSS动画的冲突

    先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...

  10. 推荐10款超级有趣的HTML5小游戏

    HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...

随机推荐

  1. centos 6系统下新磁盘分区(MBR格式)

    添加新磁盘后,fdisk -l查看所有磁盘列表( fdisk只能分区2T以下磁盘,超过2T的用parted命令来进行GPT分区) 然后fdisk -cu /dev/sdb选择要分区的磁盘,按m显示菜单 ...

  2. php批量转换时间戳

    //批量转换时间戳 array_map(array($this, 'myfunction'),'时间戳数组'); //如 array('time1'=>11,'time2'=>2222); ...

  3. 在FL Studio中如何制作和优化你的人声和弦(Vocal Chords)

    人声和弦在Future Bass.Melodic Dubstep等类型的电子音乐中被常用.与一般的和弦相同,其主要起到为主旋律做铺垫的效果,但是人声和弦加入了人声的因素,可以使得和弦更有趣,更有电子音 ...

  4. VMW14.x虚拟机安装Mac10.13系统教程

    之前虚拟机安装Mac经常出问题,所以这次又重新安装Mac,为了加深映像和之后回忆方便,特写下此次安装教程. 一 工具的准备: 首先准备教程的软件和包 1,虚拟机VMW    下载地址:https:// ...

  5. jmeter录制请求

    用了一段时间的jmeter感觉比LR方便很多,界面也比较简洁,开源免费,配置环境也方便,LR简直没法比,但唯一的是功能没有LR强大,毕竟是免费的,要求别那么高. 下面开始进入正题,配置环境和下载就不多 ...

  6. 【模板】【P3605】【USACO17JAN】Promotion Counting 晋升者计数——动态开点和线段树合并(树状数组/主席树)

    (题面来自Luogu) 题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训--牛是可怕的管理者! 为了方便,把奶牛从 1⋯N(1≤N≤100,000) 编号,把公司组织成一棵树 ...

  7. 【数据结构模版】可持久化线段树 && 主席树

    浙江集训Day4,从早8:00懵B到晚21:00,只搞懂了可持久化线段树以及主席树的板子.今天只能记个大概,以后详细完善讲解. 可持久化线段树指的是一种基于线段树的可回溯历史状态的数据结构.我们想要保 ...

  8. 学习Java的第一步,配置电脑环境

    JAVA安装与配置 俗话说的好,工欲善其事,必先利其器,想要学习Java,那么我们首先需要一个能够进行学习的环境. 一.安装JDK 为什么要安装jdk,jdk是什么? ​ JDK是java软件开发包( ...

  9. java42

    1.Random类 随机生成某个整数 Random r = new Random(); System.out.println(r.nextInt()); 伪随机数:第一次打印为随机,再次运行,数字将保 ...

  10. vue----(组件)子组件和父组件

    1.组件的定义 1.定义组件并引用 2.父组件向子组件传值 3.子组件向父组件传值 什么是组件 1.Html中有组件,是一段可以被复用的结构代码 2.Css中有组件,是一段可以被复用的样式 3.Js中 ...