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 ...
随机推荐
- Web基础_0x00_Web工作方式
web工作方式 对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当输入URL的时候,首先浏览器会去请求DNS服务器,通过NDS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服 ...
- CorelDRAW快速制作闪耀钻石项链效果
今天小编为大家分享使用CorelDRAW快速制作闪耀钻石项链效果,过程并不是很复杂,主要用到刻刀工具.智能填充和渐变色的应用,待到一个角完成之后会走一点点捷径,利用旋转复制的方法做出完整的钻石效果,最 ...
- Vegas转场功能的妙用,让片头转场更酷炫
如今视频剪辑已经是一件非常平常的事情了,很多时候我们制作一段或者剪辑一段视频,其实都比较简单,但是如果想要视频显得高级些,这时候就可以给自己的视频制作一个好看的片头了,具体该怎么做呢? 用视频剪辑软件 ...
- vulnhub: DC 2
首先地址探测找到主机IP: root@kali:~# nmap -sn 192.168.74.139/24 Starting Nmap 7.80 ( https://nmap.org ) at 202 ...
- python定时执行详解
知识点 1. sched模块,准确的说,它是一个调度(延时处理机制),每次想要定时执行某任务都必须写入一个调度. (1)生成调度器:s = sched.scheduler(time.time,time ...
- 浅谈 van Emde Boas 树——从 u 到 log log u 的蜕变
本文参考算法导论完成. 模板题在此 QwQ 优化的过程比较长,还请读者耐心阅读,认真理解. 最初的想法 我会暴力! 用一个 \(size\) 数组维护每个元素出现的次数. 不细讲,时间复杂度 \(O( ...
- 详解docker部署SpringBoot及如何替换jar包
关于docker的安装和使用,可以看看之前这两篇文章.Docker从安装部署到Hello World和Docker容器的使用和连接.这篇文章主要介绍如何在docker上部署springboot项目.关 ...
- Android动画系列之属性动画
原文首发于微信公众号:jzman-blog,欢迎关注交流! 属性动画相较帧动画和补间动画更强大,帧动画和补间动画只能应用于 View 及其子类,而属性动画可以修改任何对象的属性值,属性值可在指定的一段 ...
- 你的Idea还可用吗?不妨试试这个神器!
@ 目录 一.STS安装 1.STS下载 2.STS安装 二.STS使用 1.STS配置JDK 2.STS配置Maven 3.使用STS创建SpringBoot项目 三.优化STS 1.主题美化 2. ...
- Python to Exe By Install PyInstaller on Win7-64bit
本文主要记录为史振华在尝试转换PY文件为EXE文件过程中各种疑惑和最终解决方法,尝试了PYTHON 2.7/3.5/3.6及其相关依赖pywin32-222.win32/pywin32-222.win ...