AWT09-弹球小游戏
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-弹球小游戏的更多相关文章
- java 图形化小工具Abstract Window Toolit :画笔Graphics,画布Canvas(),弹球小游戏
画笔Graphics Java中提供了Graphics类,他是一个抽象的画笔,可以在Canvas组件(画布)上绘制丰富多彩的几何图和位图. Graphics常用的画图方法如下: drawLine(): ...
- 初识python:tkinter 实现 弹球小游戏(面向对象)
使用蹩脚式面相对象,实现弹球小游戏(非面向对象实现,主要介绍tk基础用法). #!/user/bin env python # author:Simple-Sir # time:2020/8/7 10 ...
- 初识python:tkinter 实现 弹球小游戏(非面相对象)
通过 tkinter 采用非面相对象式实现弹球小游戏(使用蹩脚式面相对象实现). #!/user/bin env python # author:Simple-Sir # time:2020/8/3 ...
- java_弹球小游戏
弹球游戏实现原理: 隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint ...
- c语言 弹弹球小游戏
#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#i ...
- C语言实现双人控制的战斗小游戏
实现功能 1.双人分别控制小人移动 2.子弹碰撞 3.可改变出弹方向 4.血条实体化 前言 这个游戏是看了知乎一位非常好的老师的专栏后练手写的,(至于是哪位,知乎搜C语言小游戏最牛逼的那位) 有老师系 ...
- SkiaSharp 之 WPF 自绘 投篮小游戏(案例版)
此案例主要是针对光线投影法碰撞检测功能的示例,顺便做成了一个小游戏,很简单,但是,效果却很不错. 投篮小游戏 规则,点击投篮目标点,就会有一个球沿着相关抛物线,然后,判断是否进入篮子里,其实就是一个矩 ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- 推荐10款超级有趣的HTML5小游戏
HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...
随机推荐
- 从 Webpack 到 Snowpack, 编译速度提升十倍以上——TRPG Engine迁移小记
动机 TRPG Engine经过长久以来的迭代,项目已经显得非常臃肿了.数分钟的全量编译, 每次按下保存都会触发一次10s到1m不等的增量编译让我苦不堪言, 庞大的依赖使其每一次编译都会涉及很多文件和 ...
- jboss反序列化漏洞实战渗透笔记
一.利用shodan,fofa或谷歌搜索关键字:8080/jmx-console/ 二.下载java反序列化终极测试工具进行验证漏洞 三.记住User Current Directory: C:\j ...
- 巧妙运用Camtasia制作爱豆的动感影集
对于追星族来说,收集爱豆的图片.视频是日常必做的事情,而对于进阶型的追星族来说,为爱豆自制各种精美的视频.影集等,会让自己追星之路显得更为充实. 我们可以借助Camtasia教程录制软件为爱豆制作各种 ...
- 使用Folx下载任务完成后,怎么自动完成关闭
下载工具的优点是可以通过多线程的方式,提高文件的下载速度,减少用户的下载时间.但另一方面来说,下载工具为了达到高速下载,也会占据较多的带宽资源,甚至会拖慢电脑的运行. 因此,很多用户会利用电脑的空闲时 ...
- oracle整表数据被误删除之寻踪
问题描述 开发同事在在14点左右发现任务表task_info数据不正确,3个小时之前的数据消失了,数据截至时间11:38:27 问题分析 查询过dba_source,只找到一个删除该表的存储过程,而且 ...
- js实现长按显示全部内容
js实现文字超出省略号显示时长按显示全部 元素内容超出省略号显示时长按该元素,生成toast弹窗(id:toolkitContainer),以显示全部内容 #toolkitContainer { ma ...
- Thrift接口简介
参考地址:http://roclinux.cn/?p=3316 [thrift是什么] 计算机技术里一款著名的通信框架 – thrift框架 thrift的全名叫做Apache thrift,是一款软 ...
- V-指令,细节补充
v-for遍历对象的时候 v-for=" (item) in person" 这里item是person对象里面的value值 而v-for=" (item,key) i ...
- Python to Exe By Install PyInstaller on Win7-64bit
本文主要记录为史振华在尝试转换PY文件为EXE文件过程中各种疑惑和最终解决方法,尝试了PYTHON 2.7/3.5/3.6及其相关依赖pywin32-222.win32/pywin32-222.win ...
- JZOJ2020年8月12日提高组反思
JZOJ2020年8月12日提高组反思 真·难亿一点点 T1 题目长并附带伤害-- 暴力搜 对于字符串,我选择\(Pascal\) T2 概率问题,再见 T3 样例没懂,再见 T4 有史以来见过的条件 ...