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 ...
随机推荐
- 工作流(workflow)
1,JBPM 工作流(开源历史悠久) 2,activity 工作流(开源历史悠久) 3,workable 工作流(功能比较强大,但是开源维护缓慢,比较注重商业化) 以上三个是主流的工作流
- 网页中Office和pdf相关文件导出
最近被派去维护和开发一些做了一半.年久失修的项目.有一部分内容是关于word文件导出,顺带着把excel.pdf文件的导出也调研下吧,我想未来开发我应该会遇到的,遂做了下笔记分享给需要的人. 由于项目 ...
- Weevely使用方法以及通信流量分析
Weevely简介 weevely项目地址:点击查看 weevely是一款针对PHP的webshell的自由软件,可用于模拟一个类似于telnet的连接shell,weevely通常用于web程序的漏 ...
- Xshell不能连接Kali系统SSH的解决
修改sshd_config文件 vim /etc/ssh/sshd_config 将#PasswordAuthentication yes的注释去掉 将#PermitRootLogin prohibi ...
- python-网络安全编程第八天(实战高精度密码字典生成器)
前言 emmmm 高精度密码字典源码 1.py import exrex import sys #url过滤处理 def host_para(host): if '://' in host: host ...
- Java的BigDecimal,对运算封装
添加maven依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...
- 怎么用MindManager2019去做一个好的网络图
大家知道网络图吗?是由作业(箭线).事件(又称节点)和路线三个因素组成的.它是一种图解模型,形状如同网络,故称为网络图.运用网络图能够使步骤简洁明了,今天我我们就说一说网络图软件MindManager ...
- PDF编辑:pdfFactory文本备注功能详解
除了word的doc文件外,PDF也是我们经常接触到的文件格式,经常需要在pdf文件上进行编辑与修改,或者给内容做提示和备注. 文件的文本备注功能可以用pdfFactory来进行,编辑打印PDF一条龙 ...
- java Base64算法
Base64算法并不是加密算法,他的出现是为了解决ASCII码在传输过程中可能出现乱码的问题.Base64是网络上最常见的用于传输8bit字节码的可读性编码算法之一.可读性编码算法不是为了保护数据的安 ...
- 项目、地铁/公交、游戏签到、项目上线后发现新bug该怎么处理
项目:1.提前分配好业务(每个人该干什么 )2.提前召开会议3.提前挑好人4.准备项目思维导图5.提前审阅项目6.为确保项目按期交付 把控好时间7.给员工提前打好招呼 (提醒加班)8.建立好安全机制9 ...