弹球游戏实现原理:

  隔一定时间(小于1秒)重新绘制图像,因为Graphics类是一个抽象类,创建子类的时候需要把所有涉及的方法都得重写,所以这里使用的是创建Canvas的子类,只需要重写它的paint()方法来实现。这里我们用了键盘监听事件、Timer类等。

游戏说明:

  该弹球游戏中的小球会随着时间增加速度且速度最多是横向速度和垂直速度为10。当小球的y坐标(垂直坐标)大于球拍的y坐标(垂直坐标)即判断游戏结束。控制台显示的是小球的x方向的速度和y方向的速度。

  1 import java.awt.*;
2 import java.util.Random;
3 import javax.swing.Timer;
4 import java.awt.event.*;
5 public class PinBall
6 {
7 private Frame f=new Frame("弹球游戏");
8 Random rand=new Random();
9 //桌面的宽度以及高度
10 private final int TABLE_WIDTH=300;
11 private final int TABLE_HEIGHT=400;
12 //球拍的宽度以及高度以及水平位置、垂直位置
13 private final int RACKET_WIDTH=60;
14 private final int RACKET_HEIGHT=20;
15 private int racketX=rand.nextInt(24)*10;
16 private int racketY=300;
17 //小球的大小、运行速度、坐标
18 private final int BALL_SIZE=16;
19 private int ySpeed=1;
20 private double xyRate=1;
21 private int xSpeed=(int)(xyRate*ySpeed);
22 private int ballX=rand.nextInt(284);
23 private int ballY=1;
24 //创建画布
25 private MyCanvas tableArea=new MyCanvas();
26 //定义时间类
27 Timer timer;
28 //游戏是否结束的旗标
29 private boolean isLose=false;
30 //设置游戏等级
31 private int time_times=1;
32 public void init(){
33 tableArea.setPreferredSize(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));
34 f.add(tableArea);
35 //定义键盘监听器
36 KeyAdapter keyProcessor=new KeyAdapter()
37 {
38 public void keyPressed(KeyEvent ke){
39 if(ke.getKeyCode()==KeyEvent.VK_LEFT){
40 if(racketX>0)
41 racketX-=10;
42 }
43 if(ke.getKeyCode()==KeyEvent.VK_RIGHT){
44 if(racketX<TABLE_WIDTH-RACKET_WIDTH)
45 racketX+=10;
46 }
47 }
48
49 };
50 f.addKeyListener(keyProcessor);
51 //tableArea.addKeyListener(keyProcessor);
52 ActionListener taskPerformer=evt->
53 {
54 //小球碰到左边框或右边框
55 if(ballX<=0||ballX>=TABLE_WIDTH-BALL_SIZE){
56 xSpeed=-xSpeed;
57 }
58 if(ballY>racketY-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH-BALL_SIZE)){
59 timer.stop();
60 isLose=true;
61 tableArea.repaint();
62 }else if(ballY<=0||(ballY>=racketY-BALL_SIZE&&ballX>racketX&&ballX<=racketX+RACKET_WIDTH)){
63 ySpeed=-ySpeed;
64 }
65 ballY+=ySpeed;
66 ballX+=xSpeed;
67 tableArea.repaint();
68 if((xSpeed<10&&xSpeed>-10)&&(ySpeed<10&&ySpeed>-10)){
69 time_times++;
70 }
71 if(time_times==10){
72 if(xSpeed>0){
73 xSpeed++;
74 }else{
75 xSpeed--;
76 }
77 if(ySpeed>0){
78 ySpeed++;
79 }else{
80 ySpeed--;
81 }
82 time_times-=10;
83 System.out.println(xSpeed+" "+ySpeed);
84 }
85 };
86 timer=new Timer(100,taskPerformer);
87 timer.start();
88 f.pack();
89 f.setVisible(true);
90 }
91 class MyCanvas extends Canvas
92 {
93 public void paint(Graphics g){
94 if(isLose){
95 g.setColor(new Color(255,0,0));
96 g.setFont(new Font("Times",Font.BOLD,30));
97 g.drawString("游戏结束",50,200);
98 }else{
99 g.setColor(new Color(240,240,80));
100 g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);
101 g.setColor(new Color(80,80,200));
102 g.fillRect(racketX,racketY,RACKET_WIDTH,RACKET_HEIGHT);
103 }
104 }
105 }
106 public static void main(String[] args)
107 {
108 new PinBall().init();
109 }
110 }

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

  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. c语言 弹弹球小游戏

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 记一次服务器Tomcat优化经历

    公司需要一台测试服务器来做测试用,所以花了几天时间把服务全部部署好,在部署好war包之后,发现Tomcat访问超级慢. 1.进入Tomcat的bin目录下,运行 ./catalina.sh run命令 ...

  2. js将格式化的时间转换成时间戳

    var timestamp1 = Date.parse(new Date(startTime)), timestamp2 = Date.parse(new Date(endTime));;consol ...

  3. Intent解析

    一.综述 intent对象是一个信息桶.它包含了接收它的组件感兴趣的信息(如:携带的动作和数据),附加Android系统感兴趣的信息(如:处理intent和启动目标Activity指令的组件的类别) ...

  4. 【Android Developers Training】 27. 序言:和其它应用交互

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 解决VMware虚拟机不能上网的问题

    这是其中一种情况,因为使用360等加速的时候把VMware 的DHCP等服务关闭了,重新启动服务即可,方法是WIN+R 输入cmd,在doc输入services.ms打开服务,找到 把这些都启动即可

  6. Java内部类与final关键字详解

    一.内部类的几种创建方法: 1.成员内部类 class Outer{ private int i = 1; class Inner{ public void fun() {System.out.pri ...

  7. JavaScript面向对象轻松入门之多态(demo by ES5、ES6、TypeScript)

    多态(Polymorphism)按字面的意思就是"多种状态",同样的行为(方法)在不同对象上有不同的状态. 在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方 ...

  8. 统计学习方法 三 kNN

    KNN (一)KNN概念: K近邻算法是一种回归和分类算法,这主要讨论其分类概念: K近邻模型三要素: 1,距离: 2,K值的选择: K值选择过小:模型过复杂,近似误差减小,估计误差上升,出现过拟合 ...

  9. 【操作教程】SequoiaDB分布式存储教程

    1.各模式适用场景介绍 由于SequoiaDB对比其他的NoSQL有更多的方式将数据分布到多台服务器上,所以下面笔者为阅读者一一介绍每种分布式方式适合于哪种场景. 1.1 Hash 方式分布数据 在H ...

  10. 普通RAID磁盘数据格式规范

    普通RAID磁盘数据格式规范 1.介绍 在当今的IT环境中,系统管理员希望改变他们正在使用的内部RAID方案,原因可能有以下几个:许多服务器都是附带RAID解决方案的,这些RAID解决方案是通过母板磁 ...