弹球游戏实现原理:

  隔一定时间(小于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. win7中python3.4下安装scrapy爬虫框架(亲测可用)

    貌似最新的scrapy已经支持python3,但是错误挺多的,以下为在win7中的安装步骤: 1.首先需要安装Scrapy的依赖包,包括parsel, w3lib, cryptography, pyO ...

  2. mysql清除数据库中字符串空格方法

    update `z_lottery_list` set `win_number`=replace(`win_number`,' ','');

  3. 【Android Developers Training】 48. 轻松拍摄照片

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

  4. angularLoad(用以异步加载js文件)

    angularLoad(用以异步加载js文件) 使用方法: 1.执行命令 下载 lib npm install angular-load --save 2.index.html引用js <scr ...

  5. MySQL数据库Raid存储方案

    作为一名DBA,选择自己的数据存储在什么上面,应该是最基本的事情了.但是很多DBA却容易忽略了这一点,我就是其中一个.之前对raid了解的并不多,本文就记录下学习的raid相关知识. 一.RAID的基 ...

  6. Ubantu 16.4 samba安装配置

    本文总结了Ubantu 16.04 环境下的samba安装.配置及使用.本文为原创,也是我的第一篇博客,以后会经常写博客,记录自己的学习.总结及研究,让博客见证着我成长的轨迹. 下文中的所有命令均使用 ...

  7. 奇舞js笔记——第0课——如何写好原生js代码

    摘要 1.好的代码职责要清晰,javscript不要用来操作样式: 2.API要设计的合理:通用性,适度的抽象(数据抽象,过程抽象),可扩展性: 3.效率问题:用好的.合适的算法(前端程序员要把自己当 ...

  8. 谈谈关于PHP的代码安全相关的一些致命知识

    谈谈关于PHP的代码安全相关的一些致命知识 目标 本教程讲解如何防御最常见的安全威胁:SQL 注入.操纵 GET 和 POST 变量.缓冲区溢出攻击.跨站点脚本攻击.浏览器内的数据操纵和远程表单提交. ...

  9. Java自学手记——泛型

    泛型在集合中的应用 泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时:2.避免了无谓的强制类型转换. 用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐. ...

  10. 391.FANUC宏程序编程

    运算符 运算符由2个字母组成,用于两个值的比较,以决定它们是相等还是一个值小于或大于另一个值.注意,不能使用不等号 运算符 含义 EQ 等于(=) NE 不等于 GT 大于 GE 大于或等于 LT 小 ...