弹球游戏实现原理:

  隔一定时间(小于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. python+NLTK 自然语言学习处理二:文本

    在前面讲nltk安装的时候,我们下载了很多的文本.总共有9个文本.那么如何找到这些文本呢: text1: Moby Dick by Herman Melville 1851 text2: Sense ...

  2. 简单轻量级的一套JS 类库(RapidDevelopmentFramework.JS)

    1.最近好久没有更新自己的博客了,一直在考虑自己应该写一些什么.4.2日从苏州回到南京的路上感觉自己的内心些崩溃和失落,我就不多说了? 猛然之间我认为自己需要找一下内心的平衡.决定开发属于自己一套快速 ...

  3. angular中的$q服务

    $q的一共有四个api: 1.$q.when(value, successFn, errorFn, progressFn),返回值为一个promise对象 --value可以是一个任意数据,也可以是一 ...

  4. WebSocket 结合 Nginx 实现域名及 WSS 协议访问

    简单了解一下 WebSocket 现在,很多网站为了实现推送技术,所用的技术都是轮询.轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器 ...

  5. 解决yii框架,gii脚手架不能使用。

    应用场景 把代码转移到线上服务器时,GII.BUG工具不正常使用,但在本地服务器是正常的. 分析原因 Yii框架在使用GII 和BUG 时,会针对访问IP地址拦截,没有在配置中设置的IP地址是会默认被 ...

  6. 实现AOP功能的封装与配置的小框架

    内容 java基础巩固笔记 - 实现AOP功能的封装与配置的小框架 设计(目录): XXX = java.util.ArrayList中 代码 Advice接口 MyAdvice类 BeanFacto ...

  7. Python3 从入门到出门

    引:此文是自己学习python过程中的笔记和总结,适合有语言基础的人快速了解python3和没基础的作为学习的大纲,了解学习的方向:笔记是从多本书和视频上学习后的整合版. (一)初识python 1. ...

  8. Linux离线安装Ruby详解

    很多时候我们会发现,真实的生成环境很多都没有外网,只有内网环境,这个时候我们又需要安装Ruby,则不能提供yum命令进行在线安装了,这个时候我们就需要下载安装包进行离线安装.本文主要简单介绍如果离线安 ...

  9. 如何移除HTML5的type=""number""的input标签的上下箭头

    初次使用input的数字输入类型type="number"时会发现默认有个上下的箭头,如下图: 很明显这里不需要这个默认箭头,那么我们如何移出这个默认样式呢? 第一种方式,写css ...

  10. python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。

    本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...