java_弹球小游戏
弹球游戏实现原理:
隔一定时间(小于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_弹球小游戏的更多相关文章
- 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 ...
- 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 ...
随机推荐
- 细说Nullable<T>类型
目录一.简介二.语法和用法三.类型的转换和运算四.装箱与拆箱五.GetType()方法六.ToString()方法七.System.Nullable帮助类八.语法糖 一.简介 众所周知,值类型变量不能 ...
- 【Android Developers Training】 40. 序言:通过NFC共享文件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 31. 序言:共享简单数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- ajax数据请求4(xml格式)
ajax数据请求4(xml格式): <!doctype html> <html> <head> <meta charset="utf-8" ...
- ajax来判断用户是否登录与添加
首先在用ajax之前,先说一下JSON: JSON:javascript object notation js对象标记 对于json,我们只需要知道如何定义json?如何输出?怎么遍历? 1.定义 ...
- Java基础(1) - 语法 & 概念
Java基础语法 基础 1. Java对大小写敏感 2. Java注释 //单行注释 这是一行注释 /* 这里是多行 注释 */ /** 这里是文档注释 @author 0o晓月メ */ 3. 访问修 ...
- man ssh翻译(ssh命令中文手册)
本文为命令ssh的man文档翻译,翻译了90%的内容,剩余是一些没必要翻译的东西,请见谅. 如此文有所疑惑,希望我的另一篇文章能解惑: SSH(1) BSD Ge ...
- js实现单张图片(或者多张)的预览功能
这个是预览单张图片的,如果要预览多张图片,改下面红色标记的地方就好了 <html> <head> <meta http-equiv="Content-Typ ...
- 爬取拉勾部分求职信息+Bootstrap页面显示
今天在用python实现爬虫的时候,就想看一下用c#实现同样的功能到底会多出来多少code,结果写着写着干脆把页面也简单的写一个出来,方便调试, 大致流程如下: 1.分析拉勾数据 2.查找拉勾做了哪些 ...
- MongoDB数据库基础操作
前面的话 为了保存网站的用户数据和业务数据,通常需要一个数据库.MongoDB和Node.js特别般配,因为Mongodb是基于文档的非关系型数据库,文档是按BSON(JSON的轻量化二进制格式)存储 ...